MySql テーブル、データベース、シャーディング、パーティショニングの知識の詳細な説明

MySql テーブル、データベース、シャーディング、パーティショニングの知識の詳細な説明

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 を応援してくれることを願っています。

以下もご興味があるかもしれません:
  • MYSQL パフォーマンス最適化共有 (データベースとテーブルのシャーディング)
  • MySQL データベースのパーティション分割とテーブル パーティション分割の方法 (一般的に使用される)
  • MYSQL データベースのデータ分割の概要: サブライブラリとサブテーブル
  • MySQL テーブルとデータベース シャーディングのアプリケーション シナリオと設計方法
  • MySQLデータベースとテーブルシャーディングの概要
  • MySQL テーブルとデータベースでデータを分割する方法
  • MySQL シャーディング入門ガイド
  • MySQL でよく使用されるデータベースとテーブル シャーディング ソリューションの概要
  • MySQL シャーディングの詳細
  • MySQL シャーディング プロジェクトの実践

<<:  Web ページは何ピクセルで設計すればよいでしょうか?

>>:  IE6 ウェブページ作成リファレンス IE6 デフォルトスタイル

推薦する

MySQL 5.7.18のインストール方法とMySQLサービスの起動手順の詳細な説明

MySQL は非常に強力なリレーショナル データベースです。しかし、初心者の中には、インストールや設...

HTML タグのカスタム属性に関する質問

以前の開発では、クラス、名前などの HTML のデフォルト属性を使用していました。 Huawei社の...

有名ウェブサイトのロゴにおすすめのフォント40選

世界で最も有名なウェブサイトのロゴデザインにはどんなフォントが使われているかご存知ですか?これらのフ...

JSにおける4つのデータ型判定方法

目次1. 型2. インスタンス3. コンストラクター4.toString() この記事では、4 つの...

Linux Tensorflow2.0のインストール問題を解決する

conda アップデート conda pip で tf-nightly-gpu-2.0-previ...

js キャンバスはスライダー検証を実現します

この記事の例では、スライダー検証を実装するためのjsキャンバスの具体的なコードを参考までに共有してい...

ウェブデザイナーのための超便利なツール 50 選

ウェブデザイナーになるのは簡単ではありません。デザインやアーキテクチャを考慮するだけでなく、さまざま...

MySQL 5.7.25 圧縮版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.25圧縮版のインストールと設定方法を参考までに紹介します。具体的な...

MySQL 5.7.23 のインストールと設定のグラフィックチュートリアル

この記事では、mysql5.7.23 の詳細なインストールプロセスを記録し、皆さんと共有します。 1...

ネイティブ js でカスタム難易度のマインスイーパ ゲームを実装する

この記事の例では、マインスイーパゲームを実装するためのjsの具体的なコードを参考までに共有しています...

html+cssレイアウトの3つの方法(ナチュラルレイアウト/フローレイアウト/ポジショニングレイアウト)

1. 自然なレイアウト<br />レイアウトは変更せずに自動的に左揃えになります。 2....

Postman 自動インターフェーステストの実践

目次背景説明GETリクエストの作成事前リクエストスクリプトで署名を作成するスクリプトは環境変数に書き...

IE8は優れたエクスペリエンスを提供します: アクティビティ

今日は IE8 ベータ 1 (以下、IE8 と略します) をチラ見しました。IE8 は素晴らしい体験...

VueのSSRサーバーサイドレンダリング例の詳細な説明

サーバーサイドレンダリング (SSR) を使用する理由検索エンジンのクローラーが完全にレンダリングさ...