序文リレーショナル データベースは、システムのボトルネックになる可能性が高くなります。単一のマシンのストレージ容量、接続数、および処理能力には制限があります。データ量と同時実行性が増加すると、データベースをセグメント化する必要があります。 データ シャーディングの手段は、データベースとテーブルを異なる部分に分割することです。ライブラリとテーブルのシャーディングには 2 つの側面があります。シャーディング テーブルなしでライブラリのみをシャーディングする場合と、シャーディング ライブラリなしでテーブルのみをシャーディングする場合があります。 データベース分散の核となる内容は、データの分割と、分割後のデータの配置および統合に他なりません。 データベースを複数のテーブルに分割する必要があるのはなぜですか?サブテーブル 1 つのテーブル内のデータの量が多すぎると、SQL 実行のパフォーマンスに重大な影響を及ぼします。一般的に、単一のテーブルが数百万に達すると、パフォーマンスは比較的低下するため、テーブルをサブテーブルに分割する必要があります。 テーブルを分割するということは、1 つのテーブルのデータを複数のテーブルに入れて、1 つのテーブルのみをクエリすることを意味します。たとえば、テーブルをプロジェクト ID ごとに分割し、1 つのテーブルに固定数のプロジェクト データを配置して、各テーブルのデータ量を制御可能な範囲内で制御できるようにします。 サブライブラリ 経験上、データベースは最大 2000 件の同時リクエストをサポートするときに拡張する必要があり、健全な単一データベースの同時実行値は 1000 前後で維持するのが最適です。すると、1 つのライブラリのデータを複数のライブラリに分割し、アクセスするときに 1 つのライブラリのみにアクセスすれば済みます。 これは、データベースとテーブルのシャーディングと呼ばれます。なぜデータベースとテーブルをシャーディングする必要があるのでしょうか?
データベースとテーブルを分割する方法写真を直接見てください: 垂直分割の場合、テーブルの垂直分割を回避するために、システム設計の最初にテーブルを適切に設計することをお勧めします。 水平分割は、範囲または特定のフィールド ハッシュによって実行できます。範囲で分割するメリットは、容量の拡張が簡単で、新しいテーブルやデータベースを用意するだけで済むことです。ただし、ホットな問題を引き起こしやすいため、実際に使用する際にはビジネスシナリオと組み合わせて検討する必要があります。ハッシュ分割のメリットは、各データベースやテーブルのリクエスト負荷を均等に分散できることです。デメリットは、容量拡張が難しく、以前のデータを再ハッシュする必要があり、データ移行のプロセスが必要になることです。 シャーディングによって生じる問題サブデータベースとサブテーブルは、単一のマシンと単一のデータベースによってもたらされるネットワーク IO、ハードウェア リソース、および接続数への負荷を効果的に軽減できます。しかし、いくつかの問題も発生しました。
データ移行2 つのデータ移行ソリューションを紹介します。 最も低レベルの解決策は、システムをしばらくシャットダウンし、事前に作成されたデータ インポート ツールを使用して単一のテーブルからデータを抽出し、それをサブライブラリとサブテーブルに書き込むことです。 2 番目のソリューションは、デュアル書き込み移行ソリューションであり、より信頼性が高いようです。オンラインシステムでは、以前にデータが書き込まれたすべての場所、追加、削除、変更操作、古いデータベースの追加、削除、変更に加えて、新しいデータベースの追加、削除、変更が追加されます。これは、いわゆる二重書き込みです。システムが展開された後、ソリューション 1 のデータ インポート ツールを実行して、古いデータベースを読み取り、新しいデータベースを書き込みます。書き込み時には、gmt_modified などのフィールドに基づいてデータの最終変更時刻を決定する必要があります。新しいデータベースにデータがない場合、またはデータが新しいデータベースのデータよりも新しい場合にのみ、データが書き込まれます。簡単に言えば、新しいデータを古いデータで上書きすることは許可されていません。 1 回の書き込み後も、不一致が残る場合があります。この場合、プログラムは自動的に新しい検証ラウンドを実行し、新しいデータベースと古いデータベースの各テーブルの各データを比較します。相違点がある場合、プログラムは古いデータベースからデータを読み取り、再度書き込みます。データが完全に一致するまでこのサイクルを繰り返します。 ミドルウェアサブライブラリとサブテーブル用のより一般的なミドルウェアは次のとおりです。
要約すると、Sharding-jdbc と Mycat が検討できるオプションです。 Sharding-jdbc などのクライアント層ソリューションの利点は、デプロイメントが不要で、運用および保守コストが低く、プロキシ層での二次転送が不要で、パフォーマンスが高いことです。欠点はカップリングです。 MySQL パーティショニング (非推奨)ここでパーティショニングが導入されているのは、主に分割、データベースとテーブルのシャーディングなどの概念との混乱を避けるためです。
LIST パーティションの例を次に示します。 テーブルorders_listを作成します( id INT AUTO_INCREMENT、 顧客姓 VARCHAR(30)、 ストアID INT、 営業担当者ID INT、 注文日 日付、 注 VARCHAR(500)、 インデックス idx (id) ) エンジン = INNODB PARTITION BY LIST(store_id) ( パーティション p1 値 (1, 3, 4, 17) インデックスディレクトリ = '/var/orders/district1' データディレクトリ = '/var/orders/district1'、 パーティション p2 (2, 12, 14)の値 インデックスディレクトリ = '/var/orders/district2' データディレクトリ = '/var/orders/district2', パーティション p3 値 (6, 8, 20) インデックスディレクトリ = '/var/orders/district3' データディレクトリ = '/var/orders/district3', パーティション p4 値 (5, 7, 9, 11, 16) インデックスディレクトリ = '/var/orders/district4' データディレクトリ = '/var/orders/district4', パーティション p5 値 (10, 13, 15, 18) インデックスディレクトリ = '/var/orders/district5' データディレクトリ = '/var/orders/district5' ); パーティショニングの利点:
要約するMySQL シャーディングに関するこの記事はこれで終わりです。MySQL シャーディングの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: editplus の Zen コーディング例コードの説明
アクセス数が増えると、MySQL データベースへの負荷が増大します。MySQL アーキテクチャを使用...
コードをコピーコードは次のとおりです。 .sugLayerDiv{位置:相対; overflow:h...
Linux システムのネットワーク接続を構成するのは難しい場合があります。幸いなことに、多くの新しい...
目次1. 事務:取引の 4 つの主な特徴:同時トランザクションはどのような問題を引き起こしますか? ...
1. エフェクト表示JavaScript で書かれた宇宙飛行士のウォッチフェイス。 http://x...
ユーザー名前空間は Linux 3.8 で追加された新しい名前空間で、ユーザー ID やグループ I...
デスクトップ プラットフォームの Web レイアウトのメタ タグは誰もがよく知っています。これは常に...
方法:説明: どちらも達成できません:方法1: sp_product から sp.productid...
Dockerイメージのインポートとエクスポートこの記事では、移行、バックアップ、アップグレードなどの...
JDBCデータベースリンクと関連メソッドのカプセル化の詳細な説明MySQL データベースを使用して、...
最近、仕事で問題に遭遇しました。グローバル変数 red_heart があります。これは多くの場所で使...
目次1. 値を入力し、そのデータ型を返す** 2. アレイ重複排除3. 文字列の重複排除4. ディー...
序文MySQL と Navicat をインストールした後、接続時に、ERROR 2059 (HY00...
それは何ですか? em はフォントの高さを指し、どのブラウザでもデフォルトのフォントの高さは 16 ...
目次1. 基礎知識: 2. DHCPサーバーの設定: 1. サーバーのIPを確認する2. DHCP ...