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 パフォーマンス最適化共有 (データベースとテーブルのシャーディング)
  • MyBatis は、Mysql データベースのサブライブラリとサブテーブルの操作と概要を実装します (推奨)
  • MySQLデータベースとテーブルシャーディングの概要
  • MySQLデータベースシャーディングとテーブルシャーディングが完全に崩壊

<<:  Ubuntu 20.04は静的IPアドレスを設定します(異なるバージョンを含む)

>>:  MySQL DML言語操作例

推薦する

プロフェッショナルおよび非プロフェッショナルのウェブデザイン

まず、Web ページのスタイルの形成は、主に Web ページのレイアウト設計、ページの色処理、画像と...

CSSを使用して特別なロゴやグラフィックを実装する

1. はじめに画像は多くのスペースを占め、画像の数が増えるほど管理が難しくなるため、シンプルなラベル...

優れたウェブサイトのコピーライティングと優れたユーザーエクスペリエンス

ウェブサイトを見るというのは、実は美しい女性を評価するようなものです。見た目を見るとき、私たちは見た...

setup+ref+reactive は vue3 の応答性を実装します

セットアップは、結合された API を記述するために使用されます。テンプレートが使用できるようにする...

CentOS7 での mysql 5.7.23 のバイナリ インストール

インターネット上のインストール情報は不均一で、落とし穴だらけです。インストールにはかなりの労力がかか...

MySQL マスタースレーブレプリケーションの原理と実践の詳細な説明

目次導入効果原理形状練習するこの記事では、例を使用して、MySQL マスター/スレーブ レプリケーシ...

Unix/Linuxフォークの隠れたオーバーヘッド

目次1. フォークの起源2. 初期のUNIXオーバーレイ技術3. UNIXに導入される前のフォークの...

dockerでredis5.0.3をインストールする方法

1. 公式5.0.3イメージを取得する [root@localhost ~]# docker pul...

MySQL 分離レベル操作プロセスの詳細説明 (cmd)

コミットされていない読み取りの例の操作プロセス - コミットされていない読み取り1. 2 つの My...

入力のsize属性とmaxlength属性の違い

最近、プロジェクトで input size 属性と maxlength 属性を使用しました。以前は、...

パフォーマンスの最適化を教える 52 個の SQL 文

1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...

MySQL の char、varchar、text フィールド タイプの違い

MySQL では、char、varchar、text の各タイプのフィールドはすべて文字タイプのデー...

大量のデータを含むエレメントのシャトルボックスで「すべて選択」をクリックするとスタックする問題の解決方法

目次解決策1: EUIの転送コンポーネントをコピーして変更し、プロジェクトディレクトリに導入する解決...

JavaScript を使用して div の位置をドラッグして入れ替える例

1 実施原則これは、DOM 要素の dragstart/ondragover/ondrop イベント...

Idea で Tomcat のソースコードデバッグを開始し、デバッグのために Tomcat に入る方法

idea 開発ツールを使用してコードをデバッグする場合、Java Web プロジェクトで、Web コ...