序文リレーショナル データベースは、システムのボトルネックになる可能性が高くなります。単一のマシンのストレージ容量、接続数、および処理能力には制限があります。データ量と同時実行性が増加すると、データベースをセグメント化する必要があります。 データ シャーディングの手段は、データベースとテーブルを異なる部分に分割することです。ライブラリとテーブルのシャーディングには 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 コーディング例コードの説明
この記事は主に、SQL のストアド プロシージャから返されたデータを取得するプロセスの分析を紹介しま...
最近、実践的なトレーニング プロジェクトを実行する際に ssm フレームワークを使用しました。プロジ...
MySQL インストール パッケージをダウンロードします。mysql-8.0.11-winx64 を...
Unix/Linux システムの nobody ユーザーとは何ですか? 1. Windows システ...
HTML 初心者は、ファイルを正しく参照する方法という問題によく遭遇します。たとえば、HTML ペー...
目次1. 環境設備2. ToastコンポーネントとToastServiceを作成する2.1 Toas...
この記事では、モバイルとPCで簡単なドラッグアンドドロップ効果を実現するためのTypescript ...
最近、インターネットのベテランと「広告」について議論したのですが、彼から非常に興味深い意見を聞きまし...
コード <div class="test"> <div>...
序文フロントエンド開発では、目的のコンテンツを取得するためにループをトラバースする必要がある状況に頻...
目次序文1. 理由: 2. 解決策のアイデア: 1. ローカル保存方法: 2. 実装手順: 3. 最...
SQL を使用してデータを抽出する場合、テーブル内で重複した値に遭遇することがよくあります。たとえ...
Docker はコンテナを起動するときにアクセス ポートを指定します。複数の -p オプションを使用...
Adobe Brackets は、HTML、CSS、JavaScript 用のオープンソースでシンプ...
発掘紹介: Dig は、Unix ライクなコマンドライン モードで NS レコード、A レコード、M...