技術共有

ビッグデータ時代のデータベース管理: データベースのシャーディングと読み取りと書き込みの分離の重要性

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

序文

「シャーディング」と「データベース分割」という用語はデータベース分野でよく言及され、通常は同様の概念を指しますが、詳細は異なります。データベース シャーディングとは通常、パフォーマンスと管理性を向上させるために、大規模なデータベース内のデータを複数の小規模なデータベースに分散することを指します。データベースの分割とは、より広義には、データベース システムをより小さな部分に分解することを指します。これには、データベース シャーディングや、テーブル シャーディングなどの他のタイプの分割が含まれる場合があります。

シャーディングとデータベース分割の違いは次のとおりです。

特徴データベースのシャーディングデータベースの分割
意味複数の物理データベース インスタンスにデータを分散します。データベース システムを小さなエンティティに分割します。
目的パフォーマンス、スケーラビリティ、耐障害性が向上します。パフォーマンス、管理、スケーラビリティを向上させます。
タイプ主に水平分割と垂直分割が含まれます。サブデータベース、サブテーブル、水平分割、垂直分割などを含みます。
水平に分割これは、データを行ごとに分割するシャーディングの形式です。おそらくデータベース分割の一部です。
縦に分割これは、データを列ごとに分割するシャーディングの形式です。おそらくデータベース分割の一部です。
実装の複雑さそれ以上の場合、追加のルーティング ロジックが必要になります。それは特定の分割方法によって異なります。
影響サブライブラリに適応するには、アプリケーション層のコードを変更する必要がある場合があります。変更に対応するには、アプリケーション層のコードを変更する必要がある場合があります。
異なるユーザーのデータを異なるデータベースに保存します。たとえば、ユーザー ID のハッシュ値に従ってデータを異なるデータベースに割り当てます。大きなテーブルを複数の小さなテーブルに分割するか、データを異なるテーブルまたはライブラリに垂直に分割します。垂直分割: ユーザー情報と注文情報を異なるデータベースに保存します。水平分割: 注文 ID の範囲に従って注文テーブルを異なるデータベースに保存します。

ブランチライブラリの例

  1. -- 分库示例:将订单信息按照用户ID的哈希值存储到不同的数据库
  2. -- 数据库1
  3. CREATE DATABASE orders_db_1;
  4. USE orders_db_1;
  5. CREATE TABLE orders (
  6. order_id INT PRIMARY KEY,
  7. user_id INT,
  8. total_amount DECIMAL(10, 2),
  9. order_date DATE
  10. );
  11. -- 数据库2
  12. CREATE DATABASE orders_db_2;
  13. USE orders_db_2;
  14. CREATE TABLE orders (
  15. order_id INT PRIMARY KEY,
  16. user_id INT,
  17. total_amount DECIMAL(10, 2),
  18. order_date DATE
  19. );

データベース分割の例

  1. -- 垂直拆分示例:将用户信息表和订单信息表分离到不同的数据库
  2. -- 主数据库
  3. CREATE DATABASE main_database;
  4. USE main_database;
  5. -- 用户信息表
  6. CREATE TABLE users (
  7. user_id INT PRIMARY KEY,
  8. username VARCHAR(50),
  9. email VARCHAR(100)
  10. );
  11. -- 订单信息表
  12. CREATE DATABASE orders_database;
  13. USE orders_database;
  14. CREATE TABLE orders (
  15. order_id INT PRIMARY KEY,
  16. user_id INT,
  17. total_amount DECIMAL(10, 2),
  18. order_date DATE
  19. );

データベース シャーディングとデータベース分割は、特定のビジネス ニーズと技術的課題を満たすために、さまざまなシナリオで使用されます。

シーンデータベースのシャーディングデータベースの分割
データ量が大きすぎる単一データベース内のデータ量が単一サーバーのストレージまたは処理能力を超えた場合。データベース テーブルのサイズがクエリのパフォーマンスに影響する場合。
パフォーマンスのボトルネック読み取りおよび書き込み操作が同時に大量に実行されると、単一のデータベースでは十分なスループットを提供できなくなります。単一テーブルの読み取りおよび書き込み操作が遅くなり始め、アプリケーションの応答時間に影響を与えます。
スケーラビリティ要件パフォーマンスを向上させるには、データベース ノードを追加してデータベースを水平方向に拡張する必要があります。単一データベースの負荷を軽減し、管理を簡素化するには、データを垂直に分割する必要があります。
災害復旧と復旧分散環境では、シャーディングによって災害復旧機能とシステムの迅速な復旧を強化できます。データベースを分割すると、データの一部をより簡単にバックアップおよび復元できるようになります。
ビジネスロジック関連データベースのシャーディング後はネットワークの遅延と複雑さが増加する可能性があるため、複雑なテーブル間クエリを含むシナリオには適していません。ビジネス ロジックに従ってデータを分割できるため、関連するデータが一緒に保存され、データベース間のクエリが削減されます。
システムアーキテクチャの調整システム アーキテクチャが分散コンピューティングと大規模なデータ処理をサポートする必要がある場合。特定のクエリまたは操作を最適化するためにデータ構造を再編成する必要がある場合。
原価管理シャーディングを通じて安価なハードウェア リソースを利用して、総所有コストを削減できます。データ ストレージとアクセス パターンを最適化することで、ストレージとコンピューティング リソースを節約できます。
データの分離とセキュリティデータの物理的な分離は、規制要件を満たすために地理的なシャーディングによって実現できます。より詳細なセキュリティ制御のために、データを機密性またはアクセス頻度によって分割できます。

      データベース シャーディングとデータベース分割の両方を使用して上記の問題を解決できますが、焦点は異なります。サブデータベースは、システムのスケーラビリティと災害復旧機能を向上させるだけでなく、大規模なデータの保存と処理を解決する傾向があります。データベースの分割では、データの編成とアクセス パターンの最適化、データベース管理の簡素化に重点が置かれています。