データベース内のデータ量が一定のレベルに達した後、システム パフォーマンスのボトルネックを回避します。データは、パーティショニング、シャーディング、データベース、テーブルを使用して処理する必要があります。
推奨コース: MySQL チュートリアル 。
シャーディング (シャーディングに似ています)
シャーディングは、データベースを複数の物理ノードにスケールアウトすることです。これは効果的な方法です。その主な目的は、単一ノードのデータベース サーバーの I/O 容量の制限を打破し、データベースのスケーラビリティの問題を解決することです。シャードという言葉は「断片」を意味します。データベースを大きなガラス片として扱い、ガラスが割れた場合、その小さな破片のそれぞれをデータベースの断片 (データベース シャード) と呼びます。データベース全体をいくつかの部分に分割するプロセスはシャーディングと呼ばれます。これはシャーディングと翻訳できます。
正式には、シャーディングは、大規模なデータベースを複数の物理ノードに分散するパーティション化スキームとして単純に定義できます。各パーティションにはスライスと呼ばれるデータベースの特定の部分が含まれており、パーティション分割方法は任意であり、従来の水平パーティションと垂直パーティションに限定されません。シャードには、複数のテーブルまたは複数のデータベース インスタンスの内容を含めることができます。各シャードはデータベース サーバー上に配置されます。データベース サーバーは、1 つ以上のデータ シャードを処理できます。サーバーは、クエリのルーティングと転送のためにシステムに必要であり、実行のためにクエリによってアクセスされるデータを含むシャードまたはシャード コレクション ノードにクエリを転送する役割を担います。
スケールアウト/スケールアップと垂直分割/水平分割
Mysql の拡張計画にはスケールアウトとスケールアップが含まれています。
スケールアウト(水平拡張)とは、アプリケーションを水平方向に拡張できることを意味します。一般に、データセンター アプリケーションの場合、スケール アウトとは、さらに多くのマシンが追加された場合でも、アプリケーションがこれらのマシンのリソースを有効に活用して、自身の効率を向上させ、優れたスケーラビリティを実現できることを意味します。
スケールアップ (垂直方向の拡張) は、アプリケーションが垂直方向に拡張できることを意味します。一般に、単一マシンの場合、スケールアップは価値があり、コンピューティング ノード (マシン) が CPU コアやストレージ デバイスを追加し、より大きなメモリを使用すると、アプリケーションはこれらのリソースを最大限に活用して効率を向上させることができます。優れた拡張性。
MySql のシャーディング戦略には、垂直シャーディングと水平シャーディングが含まれます。
垂直 (垂直) 分割: テーブル間の IO 競合を解決するための機能モジュールによる分割を指します。例えば、注文データベース、商品データベース、ユーザーデータベース… このように、複数のデータベースのテーブル構造は異なります。
水平 (水平) 分割: 同じテーブルのデータをブロックに保存し、それを別のデータベースに保存して、単一テーブルのデータ量増加によるプレッシャーを解決します。これらのデータベースのテーブル構造はまったく同じです。
テーブル構造の設計は縦に分割されています。一般的なシナリオには、
a) 大きなフィールドの垂直セグメント化が含まれます。基本テーブルのアクセス パフォーマンスを向上させるために、別のテーブルに大きなフィールドを個別に構築します。原則として、データベース内の大きなフィールドは、パフォーマンスが重要なアプリケーションでは避けるべきです (
b)。目的に応じてフィールドを垂直に分割します。使用。例えば、企業のマテリアル属性を、基本属性、販売属性、購買属性、製造属性、財務会計属性などに従って垂直にセグメント化することができる。例えば、電子商取引やWeb2.0システムにおいて、ユーザー属性の設定が多い場合、基本的なよく使う属性とあまり使わない属性を縦に分割し、テーブル構造の設計を横に分割することができます。一般的なシナリオとしては、
a) が挙げられます。たとえば、オンライン電子商取引 Web サイトでは、注文テーブル データの量が多すぎるため、年間レベルと月次レベルに分割されています
b ). Web 2.0 Web サイトの登録ユーザー、オンライン アクティブ ユーザーが多すぎます。ユーザー ID の範囲などに従って、該当するユーザーとユーザーに関連の深いテーブルを水平方向に分割します。
c) たとえば, フォーラムのトップの投稿, ページングの問題を伴うため、各ページのピン留めされた投稿を表示する必要があります. この場合、ピン留めされた投稿を取得するときにすべての投稿のテーブルから読み込まれないように、ピン留めされた投稿を横に分割できます
#テーブルとパーティション
テーブルの分割とは、表面的には、テーブルを複数の小さなテーブルに分割することを意味します。パーティショニングとは、テーブルのデータを N 個のブロックに分割することを意味します。これらのブロックは、同じディスクまたは異なるディスク上。ディスク上。テーブル分割とパーティショニングの違い
1、実装方法の点での違い
現時点では、パーティションとサブテーブルのテストの焦点は異なります。サブテーブルの焦点は、データにアクセスする際の mysql の同時実行性を向上させる方法であり、パーティションの焦点は、ディスクの読み取りおよび書き込み機能を突破する方法です。これにより、mysql のパフォーマンスが向上するという目標があります。
4. 実装の難しさに関して言えば、テーブルを分割する方法はたくさんありますが、マージを使用してテーブルを分割するのが最も簡単な方法です。この方法はパーティショニングと同じくらい簡単で、プログラム コードに対して透過的です。他のテーブルパーティショニング方法を使用する場合は、パーティショニングよりも面倒になります。パーティション化の実装は比較的単純で、パーティション化されたテーブルの作成は通常のテーブルの構築と何ら変わりはなく、コード側に対して透過的です。
パーティショニングの適用可能なシナリオ
1. テーブルのクエリ速度が遅く、テーブルの使用に影響を及ぼします。
2. テーブル内のデータはセグメント化されています
3. データの操作には、すべてのデータではなく、データの一部のみが関与することがよくあります
CREATE TABLE sales ( id INT AUTO_INCREMENT, amount DOUBLE NOT NULL, order_day DATETIME NOT NULL, PRIMARY KEY(id, order_day) ) ENGINE=Innodb PARTITION BY RANGE(YEAR(order_day)) ( PARTITION p_2010 VALUES LESS THAN (2010), PARTITION p_2011 VALUES LESS THAN (2011), PARTITION p_2012 VALUES LESS THAN (2012), PARTITION p_catchall VALUES LESS THAN MAXVALUE);
サブの適用性-tables シナリオ
1. テーブルのクエリ速度が非常に遅くなり、テーブルの使用に影響が出ています。
2. 頻繁に挿入したり、共同でクエリを実行したりすると速度が遅くなります。
サブテーブルの実装にはビジネス実装と移行を組み合わせる必要があり、これは比較的複雑です。
サブテーブルとサブデータベースサブテーブルは、単一テーブル内の過剰なデータ量によって引き起こされるクエリ効率の低下の問題を解決できますが、改善することはできません。データベースの同時実行性、処理機能により質的な向上がもたらされます。高度な同時読み取りおよび書き込みアクセスに直面して、データベース マスター サーバーが書き込み操作の負荷に耐えられない場合、スレーブ サーバーをどのように拡張しても意味がありません。そこで考え方を変えてデータベースを分割し、データベース書き込み能力を向上させる必要があります、これがいわゆるサブデータベースです。
テーブル シャーディング戦略と同様に、シャーディングではキーワード モジュロを使用してデータ アクセスをルーティングできます。
以上がmysqlシャーディングパーティションデータベースパーティションテーブルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。