データベース分割には次のものが含まれます: 1. 機能ごとに分割 [垂直分割] し、異なる機能に関連するテーブルを異なるデータベースに配置します。この利点は、非常に直感的であることです。2. データベースの特定の部分に従って、 table フィールド値の範囲分割【水平分割】 あるテーブルのデータ量がどんどん増えて耐えられなくなった場合、さらに分割する必要があります。
データベースを分割するいくつかの方法:
1.機能ごとに分割する (垂直分割)
異なる機能に関連するテーブルを異なるデータベースに配置するこの利点は、非常に直感的であることです。ただし、機能の特定の部分のデータ量や性能要件が制御可能な範囲を超える場合は、さらに細分化する必要があります。
2.テーブル内の特定のフィールド値の範囲に応じて分割する(水平分割)
あるテーブルに付随するデータ量がどんどん増えて耐えられなくなった場合、さらに分割する必要があります。 1 つのオプションは、キー範囲に基づいてセグメント化することです。たとえば、A に ID 1 ~ 10000、B に ID 10000 ~ 20000 を配置します。このような展開が予想されます。もう 1 つは、特定のフィールドの値に応じて分割する方法で、たとえば、ユーザー名の最初の文字が A ~ D であれば A に属し、E ~ H は B に属します。これにもアンバランスがあり、ある範囲が単一の点で耐えられる範囲を超える場合には、分割し続ける必要があります。日付などによる細分化もあります。
利点: 単一テーブルのサイズは制御可能であり、自然な水平方向の拡張が可能です。
欠点: 集中書き込みのボトルネックの問題は解決できません。
3.ハッシュに基づくセグメンテーション
一般的には mod を使用して分割します。まず分割データベースの数を決定し、ハッシュ係数を取得してどれを使用するかを決定します。この方法ではデータを均等に分散できますが、データ量が増えると拡張が必要になった場合、この方法ではオンライン拡張ができません。ノードが追加されるたびに、ハッシュ アルゴリズムを再計算する必要があります。
したがって、この方法では一貫性のあるハッシュ mod 2^n を使用することをお勧めします
コメント統合注文データベースを例として、サブデータベースとサブテーブルのソリューションを説明します。は 32*32 です。つまり、userId の最後の 4 桁は、mod 32 によって 32 のライブラリに分割されます。同時に、各ライブラリは、userId の最後の 4 桁 div 32 mod 32 を使用して、合計で 32 のテーブルに分割されます。 1024 テーブル中。そのオンライン展開は 8 つのクラスター (マスター/スレーブ) であり、各クラスターには 4 つのライブラリ
4 があります。ルーティング テーブルに基づくセグメント化
これまでの方法はすべて、アプリケーション データに基づいて操作を決定します。ルーティング テーブルに基づくセグメント化は、より緩和された方法です。別のルーティング テーブルを保持し、そのルーティング テーブルを検索して、ユーザーの特定の属性に基づいてどのデータベースを使用するかを決定する、より一般的なソリューションです。
利点: ID とライブラリのマッピング アルゴリズムは自由に変更できます
欠点: 追加の単一ポイントが導入される可能性があります
以上がデータベースを分割するにはいくつかの方法がありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。