1. はじめにデータベース内のデータ量が一定レベルに達すると、システムパフォーマンスのボトルネックを回避する必要があります。データ処理が必要であり、使用される方法は、パーティション分割、シャーディング、データベース シャーディング、およびテーブル シャーディングです。 2. シャーディング(データベースシャーディングに類似)シャーディングは、データベースを複数の物理ノードにスケールアウトする効果的な方法です。その主な目的は、単一ノードのデータベース サーバーの I/O 容量の制限を打破し、データベースのスケーラビリティの問題を解決することです。 Shard という言葉は「破片」を意味します。データベースを大きなガラス片とみなしてそれを割った場合、それぞれの小さな破片はデータベース シャードと呼ばれます。データベース全体を分割するプロセスはシャーディングと呼ばれ、シャーディングと翻訳できます。 正式には、シャーディングは、大規模なデータベースを複数の物理ノードに分散するパーティション分割スキームとして簡単に定義できます。各パーティションには、スライスと呼ばれるデータベースの一部が含まれます。パーティション分割の方法は任意で、従来の水平分割や垂直分割に限定されません。シャードには、複数のテーブルの内容や、複数のデータベース インスタンスの内容を含めることができます。各シャードはデータベース サーバーに配置されます。データベース サーバーは、1 つ以上のシャードからのデータを処理できます。システムには、クエリのルーティングと転送を実行するサーバーが必要です。このサーバーは、クエリが実行のためにアクセスするデータを含むシャードまたはシャード コレクション ノードにクエリを転送する役割を担います。 3.スケールアウト/スケールアップと垂直/水平分割MySQL には、スケール アウトとスケール アップという 2 つの拡張ソリューションがあります。 スケールアウトとは、アプリケーションを水平方向に拡張できることを意味します。一般的に、データ センター アプリケーションの場合、スケール アウトとは、マシンを追加しても、アプリケーションがこれらのマシンのリソースを有効に活用して効率を向上させ、優れたスケーラビリティを実現できることを意味します。 スケールアップとは、アプリケーションを垂直方向に拡張できることを意味します。一般的に、単一のマシンの場合、スケールアップとは、コンピューティング ノード (マシン) が CPU コアやストレージ デバイスを追加し、より大きなメモリを使用すると、アプリケーションがこれらのリソースを最大限に活用して効率を向上させ、優れたスケーラビリティを実現できることを意味します。 MySql のシャーディング戦略には、垂直シャーディングと水平シャーディングが含まれます。 垂直分割: テーブル間の IO 競合を解決するために機能モジュールごとに分割することを指します。例えば、注文ライブラリ、商品ライブラリ、ユーザーライブラリなどに分けることができ、このように複数のデータベースのテーブル構造は異なります。 水平分割: 同じテーブルのデータがブロックに分割され、異なるデータベースに保存され、単一テーブルのデータ量の増加によって生じる負荷を解決します。これらのデータベースのテーブル構造はまったく同じです。 テーブル構造の設計は垂直に分割されています。よくあるシナリオとしては、 a). 大きなフィールドの垂直分割。基本テーブルのアクセス パフォーマンスを向上させるには、別のテーブルに大きなフィールドを作成します。原則として、パフォーマンスが重要なアプリケーションでは、データベース内の大きなフィールドは避ける必要があります。 b). 用途に応じて縦に分割する。たとえば、企業の重要な属性は、基本属性、販売属性、調達属性、生産および製造属性、財務会計属性などに従って垂直に分割できます。 c). アクセス頻度に基づく垂直セグメンテーション。たとえば、電子商取引や Web 2.0 システムでは、ユーザー属性が多数ある場合、頻繁に使用される基本的な属性と、あまり使用されない属性を垂直に分離できます。 テーブル構造の設計は水平に分割されています。よくあるシナリオとしては、 a) たとえば、オンライン電子商取引サイトの注文表に大量のデータがある場合、それを年間レベルと月間レベルに分割する必要があります。 b). Web 2.0 Web サイトには、登録ユーザーとオンライン アクティブ ユーザーが多すぎます。関連ユーザーと、ユーザーに密接に関連するテーブルは、ユーザー ID の範囲に従って水平に分割されます。 c) たとえば、フォーラムのトップ投稿にはページングの問題が発生し、各ページにトップ投稿を表示する必要があります。この場合、トップ投稿を水平に分割して、トップ投稿を取得するときにすべての投稿のテーブルから読み取ることを回避できます。 4. テーブルとパーティションテーブル シャーディングの表面的な意味は、テーブルを複数の小さなテーブルに分割することであり、パーティショニングはテーブルのデータを N 個の複数のブロックに分割することです。これらのブロックは、同じディスク上にあっても、異なるディスク上にあってもかまいません。 テーブルシャーディングとパーティショニングの違い 1. 実装 MySQL のテーブル シャーディングは、実際のテーブル シャーディングです。テーブルが多数のテーブルに分割された後、各小さなテーブルは 3 つのファイル (MyISAM エンジン: .MYD データ ファイル、.MYI インデックス ファイル、および .frm テーブル構造ファイル) に対応する完全なテーブルになります。 2. データ処理 テーブルが分割された後、データはサブテーブルに格納されます。メインテーブルは単なるシェルであり、データの格納とアクセスは各サブテーブルで行われます。パーティショニングにはテーブルを分割するという概念はありません。パーティショニングは、データを格納するファイルを多数の小さなブロックに分割するだけです。パーティション化されたテーブルは依然としてテーブルであり、データ処理は依然として自分で行われます。 3. パフォーマンスを向上させる テーブルを分割すると、単一テーブルの同時実行能力が向上し、ディスク I/O パフォーマンスも向上します。パーティショニングはディスク I/O ボトルネックを解消し、ディスクの読み取りおよび書き込み機能を改善して MySQL のパフォーマンスを向上させることを目的としています。 この時点で、パーティショニングとテーブル シャーディングの焦点は異なります。テーブル シャーディングの焦点は、データにアクセスする際の MySQL の同時実行性を向上させる方法にあります。一方、パーティショニングの焦点は、MySQL のパフォーマンスを向上させるという目的を達成するために、ディスクの読み取りおよび書き込み機能を突破する方法にあります。 4. 実施の難しさ テーブルを分割する方法は多数ありますが、マージを使用するのが最も簡単な方法です。このアプローチはパーティショニングとほぼ同じくらいの難しさがあり、プログラム コードに対して透過的です。他のテーブルパーティション分割方法を使用する場合、パーティション分割よりも面倒になります。パーティショニングの実装は比較的簡単です。パーティション テーブルの作成は通常のテーブルの作成と何ら変わりなく、コード側では透過的です。 パーティションの適用シナリオ 1. テーブルのクエリ速度が遅すぎるため、使用に影響します。 2. 表のデータはセグメント化されている 3. データに対する操作は、多くの場合、データ全体ではなく、データの一部のみに関係する。 テーブルsalesを作成する( id INT AUTO_INCREMENT、 金額 DOUBLE NOT NULL、 order_day DATETIME NOT NULL、 主キー(id, order_day) ) エンジン=Innodb 範囲によるパーティション(YEAR(order_day)) ( パーティション p_2010 値が (2010) 未満 パーティション p_2011 値が (2011) より小さい、 パーティション p_2012 値が (2012) より小さい、 PARTITION p_catchall 値が MAXVALUE 未満です); サブテーブルの適用シナリオ 1. テーブルのクエリ速度が遅すぎるため、使用に影響します。 2. 頻繁な挿入や結合クエリが発生すると、速度が低下します。 シャーディングの実装には、比較的複雑なビジネス統合と移行が必要です。 5. テーブルとデータベースの分割テーブルを分割すると、単一テーブル内のデータ量が多すぎるためにクエリ効率が低下するという問題は解決できますが、データベースの同時処理能力の質的な向上は得られません。同時実行性の高い読み取りおよび書き込みアクセスに直面して、データベース マスター サーバーが書き込み操作の負荷に耐えられない場合、スレーブ サーバーをどれだけ拡張しても、現時点では意味がありません。したがって、考え方を変えてデータベースを分割し、データベースの書き込み機能を向上させる必要があります。これをデータベース シャーディングと呼びます。 テーブルシャーディング戦略と同様に、データベースシャーディングでは、次の図に示すように、キーワードモジュロ方式を使用してデータアクセスをルーティングできます。 6. パーティショニングとシャーディングの違いこれで、MySql テーブル シャーディング、データベース シャーディング、シャーディングとパーティショニングに関する詳細で詳細な知識に関するこの記事は終了です。MySql テーブル シャーディング、データベース シャーディング、シャーディングとパーティショニングに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。皆様が今後も 123WORDPRESS.COM を応援してくれることを願っています。 以下もご興味があるかもしれません:
|
<<: Web ページは何ピクセルで設計すればよいでしょうか?
>>: IE6 ウェブページ作成リファレンス IE6 デフォルトスタイル
場合によっては、リモート マシンでいくつかのコマンドを実行する必要があることがあります。これが時々行...
目次最初の方法: MySQLデータベースが接続されていない場合2 番目の方法: データベースがすでに...
序文デフォルトでは、MySQL はデータベース クエリ データをキャッシュするために大きなメモリ ブ...
[mysql] replace の使用方法 (フィールドの内容の一部を置き換える) [mysql]...
:動的コンポーネントv-bind:is="component name" を使用...
1. nginxをインストールして起動する # nginxをインストールする sudo apt-ge...
目次序文インデックス プッシュダウンとは何ですか?インデックスプッシュダウン最適化の原理インデックス...
DB ベンチマーク テストを実行する場合、qps と tps はデータベースのパフォーマンスを測定す...
MySQL 5.6 での union all のパフォーマンスパート 1:MySQL 5.6.25 ...
この記事では、例を使用して MySQL トリガーの構文とアプリケーションを説明します。ご参考までに、...
目次Vue が DOM を非同期更新する原理1 実際の DOM 要素を取得できるのはいつですか? 2...
explain はクエリ実行プラン情報を取得するために使用されます。 1. 文法次のように、sele...
この記事では、円形のプログレスバー効果を実現するためのJavaScriptの具体的なコードを参考まで...
MySQL CURDATE関数の紹介文字列コンテキストまたは数値コンテキストの YYYMMDD 形式...
ナビゲーションなどは日々の開発でよく使うので、記録として記事を書きます。ナビゲーションは終了/開始位...