ホームページ >データベース >mysql チュートリアル >MySQL を学習するためのデータ シャーディングおよびデータ分離テクニックとは何ですか?

MySQL を学習するためのデータ シャーディングおよびデータ分離テクニックとは何ですか?

WBOY
WBOYオリジナル
2023-07-29 17:05:331327ブラウズ

MySQL を学習するためのデータ シャーディングおよびデータ分離テクニックとは何ですか?

データ シャーディングとデータ分離は、MySQL データベースにおける一般的な技術手段であり、過剰なデータ量や高負荷などの問題を解決するために使用されます。この記事では、MySQL で一般的に使用されるデータ シャーディングとデータ分離テクニックを紹介し、コード例を添付します。

1. データ シャーディング スキル

  1. 垂直シャーディング: 機能モジュールに従ってデータベース内のテーブルを分離し、異なる機能モジュールを異なるデータベースに格納し、外部キーを使用して関連付けを確立します。サンプル コードは次のとおりです。
-- 创建用户表
CREATE TABLE user (
   id INT(11) PRIMARY KEY,
   username VARCHAR(50),
   password VARCHAR(50)
) ENGINE=InnoDB;

-- 创建订单表
CREATE TABLE order (
   id INT(11) PRIMARY KEY,
   user_id INT(11),
   product_id INT(11),
   amount INT(11),
   FOREIGN KEY (user_id) REFERENCES user(id)
) ENGINE=InnoDB;
  1. 水平シャーディング: 特定のフィールドに従ってデータベース内のテーブルを分割し、データを複数のデータベースに均等に分散します。サンプル コードは次のとおりです。
-- 创建用户表
CREATE TABLE user_0 (
   id INT(11) PRIMARY KEY,
   username VARCHAR(50),
   password VARCHAR(50)
) ENGINE=InnoDB;

-- 创建用户表
CREATE TABLE user_1 (
   id INT(11) PRIMARY KEY,
   username VARCHAR(50),
   password VARCHAR(50)
) ENGINE=InnoDB;

-- 创建订单表
CREATE TABLE order_0 (
   id INT(11) PRIMARY KEY,
   user_id INT(11),
   product_id INT(11),
   amount INT(11)
) ENGINE=InnoDB;

-- 创建订单表
CREATE TABLE order_1 (
   id INT(11) PRIMARY KEY,
   user_id INT(11),
   product_id INT(11),
   amount INT(11)
) ENGINE=InnoDB;
  1. シャーディング キーの選択: 適切なシャーディング キーを選択すると、クエリのパフォーマンスが向上します。通常、カーディナリティの高いフィールド (ユーザー ID や注文 ID など) がシャーディング キーとして選択されます。

2. データ分離スキル

  1. トランザクション分離レベル: トランザクションの分離レベルを設定することで、データ分離の程度を制御します。一般的に使用されるトランザクション分離レベルには、READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE などがあります。
-- 设置事务隔离级别为读取提交
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
  1. 行レベルのロック: データを操作する場合、行レベルのロックを使用すると、データの分離を確保し、同時操作によって引き起こされる問題を回避できます。
-- 开启事务
START TRANSACTION;

-- 锁定行级别
SELECT * FROM user WHERE id = 1 FOR UPDATE;

-- 更新数据
UPDATE user SET username = 'new_username' WHERE id = 1;

-- 提交事务
COMMIT;
  1. データベース分離: 異なるビジネス データを異なるデータベースに保存し、異なるデータベースのアクセス許可を制御することでデータ分離を実現します。サンプル コードは次のとおりです。
-- 创建业务数据库1
CREATE DATABASE business_1;

-- 给用户赋予业务数据库1的访问权限
GRANT ALL PRIVILEGES ON business_1.* TO 'user'@'%' IDENTIFIED BY 'password';

-- 创建业务数据库2
CREATE DATABASE business_2;

-- 给用户赋予业务数据库2的访问权限
GRANT ALL PRIVILEGES ON business_2.* TO 'user'@'%' IDENTIFIED BY 'password';

概要

この記事では、MySQL で一般的に使用されるデータ シャーディングおよびデータ分離テクニックを紹介し、対応するコード例を示します。データ シャーディングでは、垂直シャーディングと水平シャーディングを通じてデータベースを複数のモジュールに分割し、データベースのパフォーマンスとスケーラビリティを向上させます。データ分離では、トランザクション分離レベル、行レベルのロック、データベース分離を通じてデータの分離を確保します。実際のアプリケーションでは、ビジネス ニーズに基づいて適切なシャーディングおよび分離方法を選択する必要があります。

以上がMySQL を学習するためのデータ シャーディングおよびデータ分離テクニックとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。