MySQLテーブルシャーディングとパーティショニングの具体的な実装方法

MySQLテーブルシャーディングとパーティショニングの具体的な実装方法

縦型テーブル

垂直テーブル分割とは、多数の列を持つテーブルを複数のテーブルに分割することを意味します。たとえば、テーブル A には 20 個のフィールドが含まれており、テーブル A1 と A2 に分割され、各テーブルに 10 個のフィールドが含まれます (具体的な分割方法はビジネスによって異なります)。

利点: 同時実行性の高いシナリオでは、テーブル ロックと行ロックの数を減らすことができます。

デメリット: データ レコードが非常に大きい場合、読み取り速度と書き込み速度に依然としてボトルネックが発生します。

水平テーブル

あるウェブサイトのデータベースに数億件のレコードを含むテーブルがある場合、SELECT でクエリを実行すると、インデックスがないとクエリが非常に遅くなります。この場合、ハッシュ アルゴリズムを使用してテーブルを 10 個のサブテーブルに分割できます (この時点で、各テーブルのデータ量は 1,000 万件のレコードのみです)。

同時に、各サブテーブルの情報を記録するための一般テーブルが生成されます。id=100 のレコードをクエリする場合、テーブル全体をスキャンする必要がなくなります。代わりに、一般テーブルを使用して、レコードが配置されている対応するサブテーブルを見つけ、対応するテーブルを検索します。これにより、IO 負荷が軽減されます。

デメリット: フロントエンド プログラム アプリケーションの SQL コードのメンテナンスに大きな問題が生じます。この場合、MySQL Merge ストレージ エンジンを使用してテーブル パーティションを実装できます。

---------------------------------------私は私に痛みを感じさせる境界線です----------------------------------------------------

Merge ストレージ エンジンを使用してテーブルをパーティション分割することは、アプリケーションの SQL ステートメントに対して透過的であり、コードを変更する必要はありません。

CREATE TABLE t1 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY、メッセージ CHAR(20));
CREATE TABLE t2 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY、メッセージ CHAR(20));
INSERT INTO t1 (メッセージ) VALUES ('テスト'),('テーブル'),('t1');
INSERT INTO t2 (メッセージ) VALUES ('テスト'),('テーブル'),('t2');
CREATE TABLE total (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY、メッセージ CHAR(20)) ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;

合計表を作成するときに、エラーが発生する場合があります。

定義が異なる、または MyISAM 型ではない、または存在しない基礎テーブルを開くことができません

実際、マージ ストレージ エンジンは仮想テーブルであり、対応する実際のテーブルは MyISAM タイプのテーブルである必要があります。MySQL バージョンが 5.1 以上の場合、デフォルトのデータベースは InnoDB ストレージ エンジンを使用するため、合計を作成する場合、t1 テーブルと t2 テーブルは MyISAM ストレージ エンジンである必要があります。

サブテーブルを定期的に追加する必要がある場合は、マージ テーブルの結合を変更するだけで済みます。

CREATE TABLE t3( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY、メッセージ CHAR(20));
ALTER TABLE 合計 UNION=(t1,t2,t3)

水平分割

たとえば、データが 100 万個ある場合、それらは 10 個の部分に分割されます。最初の 10 万個のデータは最初のパーティションに配置され、次の 10 万個のデータは 2 番目のパーティションに配置されます。データが取得されると、テーブル構造内のすべてのフィールドが含まれ、水平分割によってテーブル構造は変更されません。

垂直分割

たとえば、ユーザー テーブルを設計するときに、最初はよく考えずに、すべての個人情報を 1 つのテーブルに入れることがあります。このテーブルには、個人プロファイルなどの比較的大きなフィールドが含まれます。ただし、これらのプロファイルは多くの人に閲覧されるわけではないため、誰かが閲覧したいときには検索することになります。テーブルを分割すると、このような大きなフィールドを分離できます。

完全なテーブルは、.MYD データ ファイル、.MYI インデックス ファイル、および .frm テーブル構造ファイルの 3 つのファイルに対応します。

以下もご興味があるかもしれません:
  • MySQL の高度な機能 - データ テーブル パーティショニングの概念とメカニズムの詳細な説明
  • MySql テーブル、データベース、シャーディング、パーティショニングの知識の詳細な説明
  • MySql テーブル、データベース、シャーディング、パーティショニングの知識ポイントの紹介
  • Navicat による MySQL パーティショニングの実践
  • MySQL パーティションテーブルの正しい使用方法
  • MySQL 最適化 Zabbix パーティション最適化
  • MySQL パーティション フィールド列に別のインデックスを作成する必要がありますか?
  • MySQL データベース テーブルのパーティション分割に関する考慮事項 [推奨]
  • MySQL データ テーブル パーティション テクノロジーの簡単な分析
  • MySQL データテーブルのパーティション戦略と利点と欠点の分析

<<:  ネイティブ js を使用してライブ バレット スクリーンのスクロール効果をシミュレートします。

>>:  Win10 の Linux サブシステムを有効にする方法を説明します (詳細な画像とテキスト付き)

推薦する

Linux sar コマンドの使用方法とコード例の分析

1. CPU使用率sar -p (一日中表示) sar -u 1 10 (1: 1秒ごと、10: 1...

MySQL における datetime と timestamp の違いと選択

目次1 違い1.1 スペース占有1.2 表現範囲1.3 タイムゾーン2 テスト3つの選択肢MySQL...

ubuntu20.04 上の CLion2020.1.3 での ROS のインストールと設定の詳細な説明

1. CLionをダウンロード、インストール、アクティベートするオンラインで提供されるチュートリアル...

Linux で NFS ファイル共有サーバーを構築するための詳細な手順

Linux が NFS サーバーを構築異なるオペレーティング システム間でデータを共有するために、通...

JavaScript における一般的な配列操作

目次1. 連結() 2. 結合() 3. プッシュ() 5. シフト() 6. シフト解除() 7....

HTML ページ内の js および css ファイルのキャッシュを自動的にクリーンアップします (バージョン番号を自動的に追加します)

Web プロジェクトの開発プロセスでは、CSS ファイルや JS ファイルを参照することがよくあり...

Vue+SpringBoot+Shiroのクロスドメイン問題を解決する

目次1. Vueフロントエンドを構成する1. クロスドメイン構成を開発する2. 本番環境のクロスドメ...

Linux ソースコードからのソケット (TCP) クライアント側での接続の例の詳細な説明

序文著者は、アプリケーションからフレームワーク、オペレーティング システムに至るまで、あらゆるコード...

CSS と JS を使用して下線効果を実装する方法の例

この記事では、主に 2 種類の下線の動的効果について説明します。1 つ目は、ホバーすると X 軸が内...

ボタンに醜い灰色の枠線が付いています。これを削除するにはどうすればよいですか?

ダイアログをクロージャで使用し、右上隅の向こう側に閉じるボタンがあるダイアログを描画しました。ボタン...

Vueはルールを使用してフォームフィールドの検証を実装します

Vue でフォーム フィールドを記述および検証する方法は多数あります。このブログでは、より一般的に使...

Windows 10 での MySQL 8.0 のダウンロードとインストール構成のグラフィック チュートリアル

この記事では、MySQL 8.0のダウンロードとインストールについてご紹介します。具体的な内容は以下...

記事では、js を使用して弾幕効果を実現する方法を説明します

目次新しい HTML ファイルを作成します。初期テンプレートを作成するHTML の追加CSS パディ...

CentOS で LibreOffice を使用してドキュメント形式を変換する方法

プロジェクト要件では、アップロードされたドキュメントの前処理が必要です。ユーザーが doc 形式でド...

Vue で円形プログレスバーを実装する例

データ表示は、常にあらゆる職業の人々が求めているものです。特にフロントエンド開発業界では、データを表...