ホームページ >データベース >mysql チュートリアル >MySql テーブル、データベース、シャード、パーティションの詳細な説明
システムパフォーマンスのボトルネックを避けるために、データベースのデータ量はある程度に達します。データは、パーティショニング、シャーディング、データベース、テーブルを使用して処理する必要があります。
シャーディングは、データベースを複数の物理ノードにスケールアウトする効果的な方法であり、その主な目的は、シングルノード データベース サーバーの I/O 容量制限を解決し、データベースのスケーラビリティの問題を解決します。シャードという言葉は「断片」を意味します。データベースを大きなガラス片として扱い、ガラスが割れた場合、その小さな破片のそれぞれをデータベースの断片 (データベース シャード) と呼びます。データベース全体をいくつかの部分に分割するプロセスはシャーディングと呼ばれます。これはシャーディングと翻訳できます。
正式には、シャーディングは、大規模なデータベースを複数の物理ノードに分散するパーティション化スキームとして単純に定義できます。各パーティションにはスライスと呼ばれるデータベースの特定の部分が含まれており、パーティション分割方法は任意であり、従来の水平パーティションと垂直パーティションに限定されません。シャードには、複数のテーブルまたは複数のデータベース インスタンスの内容を含めることができます。各シャードはデータベース サーバー上に配置されます。データベース サーバーは、1 つ以上のデータ シャードを処理できます。サーバーは、クエリのルーティングと転送のためにシステムに必要であり、実行のためにクエリによってアクセスされるデータを含むシャードまたはシャード コレクション ノードにクエリを転送する役割を担います。
Mysql の拡張ソリューションにはスケールアウトとスケールアップが含まれます。
スケールアウト(水平拡張)とは、アプリケーションを水平方向に拡張できることを意味します。一般に、データセンター アプリケーションの場合、スケール アウトとは、さらに多くのマシンが追加された場合でも、アプリケーションがこれらのマシンのリソースを有効に活用して、自身の効率を向上させ、優れたスケーラビリティを実現できることを意味します。
スケールアップ (垂直方向の拡張) は、アプリケーションが垂直方向に拡張できることを意味します。一般に、単一マシンの場合、スケールアップは価値があり、コンピューティング ノード (マシン) が CPU コアやストレージ デバイスを追加し、より大きなメモリを使用すると、アプリケーションはこれらのリソースを最大限に活用して効率を向上させることができます。優れた拡張性。
MySql のシャーディング戦略には、垂直シャーディングと水平シャーディングが含まれます。
垂直 (垂直) 分割: テーブル間の IO 競合を解決するための機能モジュールによる分割を指します。例えば、注文データベース、商品データベース、ユーザーデータベース… このように、複数のデータベースのテーブル構造は異なります。
水平 (水平) 分割: 同じテーブルのデータをブロックに保存し、それを別のデータベースに保存して、単一テーブルのデータ量増加によるプレッシャーを解決します。これらのデータベースのテーブル構造はまったく同じです。
テーブル構造の設計は縦に分割されています。一般的なシナリオには、
#大きなフィールドの垂直セグメンテーションが含まれます。基本テーブルのアクセス パフォーマンスを向上させるために、別のテーブルに大きなフィールドを個別に構築します。原則として、パフォーマンスが重要なアプリケーションでは、データベースの大きなフィールドは避けるべきです。
垂直セグメンテーションによる使い方に合わせてたとえば、企業のマテリアル属性は、基本属性、販売属性、購買属性、製造属性、財務会計属性などに従って垂直にセグメント化できます。
アクセス頻度に従って垂直にセグメント化されます。たとえば、電子商取引や Web 2.0 システムでユーザー属性の設定が多数ある場合、基本的な頻繁に使用される属性とあまり使用されない属性を垂直に分離できます。デザインは横に分かれています。一般的なシナリオには、次のようなものがあります。
たとえば、オンライン電子商取引 Web サイトでは、注文テーブル データの量が多すぎて、年レベルと月レベルで分割されています。
Web 2.0 Web サイト上の登録ユーザーとオンライン アクティブ ユーザーが多すぎる場合は、ユーザー ID の範囲に従って、関連するユーザーとそのユーザーに密接に関連するテーブルを水平方向にセグメント化します。フォーラムのトップの投稿, ページングの問題のため、各ページにピン留めされた投稿を表示する必要があります。この場合、ピン留めされた投稿を取得するときにすべての投稿のテーブルから読み取られるのを避けるために、ピン留めされた投稿を水平に分割できます
テーブルの分割とは、表面的にはテーブルを複数の小さなテーブルに分割することを意味しますが、パーティショニングはテーブルのデータを N 個の倍数に分割することを意味します。エリア、ブロック、これらは同じディスク上に存在することも、異なるディスク上に存在することもできます。
データをテーブルに分割した後、分割テーブルにデータを格納します メインテーブルは単なるシェルであり、データアクセスは分割テーブルごとに発生します。パーティショニングにはテーブルのパーティショニングという概念はありません。パーティショニングは、データを格納するファイルを多数の小さなブロックに分割するだけです。パーティション化されたテーブルは依然として 1 つのテーブルであり、データ処理は依然として自分自身で完了します。
テーブルを分割すると、単一テーブルの同時実行能力が向上し、ディスク I/O パフォーマンスも向上します。パーティションはディスク I/O ボトルネックを突破するため、ディスクの読み取りおよび書き込み機能を改善して mysql のパフォーマンスを向上させたいと考えています。
現時点では、パーティションとサブテーブルのテストの焦点は異なります。サブテーブルの焦点は、データにアクセスする際の MySQL の同時実行性を向上させる方法であり、パーティションの場合は、読み取りを突破する方法です。 mysql のパフォーマンスを向上させるという目的を達成するためのディスクの書き込み機能。
テーブルを分割する方法はいろいろありますが、マージを使ってテーブルを分割するのが最も簡単です。この方法はパーティショニングと同じくらい簡単で、プログラム コードに対して透過的です。他のテーブルパーティショニング方法を使用する場合は、パーティショニングよりも面倒になります。パーティション化の実装は比較的単純で、パーティション化されたテーブルの作成は通常のテーブルの構築と何ら変わりはなく、コード側に対して透過的です。
テーブルのクエリ速度がテーブルの使用に影響を与えるほど遅い場合。
CREATE TABLE sales ( id INT AUTO_INCREMENT, amount DOUBLE NOT NULL, order_day DATETIME NOT NULL, PRIMARY KEY(id, order_day)) ENGINE=InnodbPARTITION 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);
テーブル シャーディング戦略と同様に、シャーディングでは、次の図に示すように、キーワード モジュロを使用してデータ アクセスをルーティングできます。
推奨事項: "
mysql ビデオ チュートリアル"
以上がMySql テーブル、データベース、シャード、パーティションの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。