今日は、興味深いトピックについてお話ししましょう。データベースとテーブルを分割することを検討する前に、単一の MySQL テーブルにどれくらいのデータが必要でしょうか? 2,000 万行という人もいれば、500 万行という人もいます。それで、どのくらいの値が適切だとお考えですか? かつて中国のインターネット技術界では、「MySQL テーブル 1 つあたりのデータ量が 2,000 万行を超えると、パフォーマンスが大幅に低下する」という格言が広く流布していました。実はこの噂は百度から始まったと言われています。具体的な状況はおおよそ次のようになります。DBA が MySQL のパフォーマンスをテストしたところ、単一テーブルの行数が 2,000 万行に達すると、SQL 操作のパフォーマンスが急激に低下することが分かりました。そのため、この結論に至りました。その後、Baiduのエンジニアが業界内の他の企業に移籍し、この情報を持ち帰ったと言われ、この噂は業界内に広まりました。 その後、アリババの「Java 開発マニュアル」では、単一テーブルの行数が 500 万を超える場合、または単一テーブルの容量が 2 GB を超える場合にのみ、データベースとテーブルを分割することを推奨しました。 Alibaba の黄金律はこれをサポートしています。そのため、多くの人がビッグデータ ストレージを設計するときに、これをテーブル パーティショニングを実行するための標準として使用しています。 それで、どのくらいの値が適切だとお考えですか?なぜ 300 万行や 800 万行ではなく、500 万行なのでしょうか?おそらく、これはアリの最高の実戦値であると言えるでしょうか?それで、問題は、この値はどのように評価されるかということです。ちょっと待ってください、少し考えてください。 実際、この値は実際のレコード数とは関係なく、MySQL の構成とマシンのハードウェアに関連しています。パフォーマンスを向上させるために、MySQL はテーブルのインデックスをメモリにロードします。 InnoDB バッファ サイズが十分であれば、すべてのデータをメモリにロードでき、クエリに問題は発生しません。ただし、単一テーブルのデータベースが一定の上限に達すると、メモリにインデックスを保存できなくなるため、後続の SQL クエリでディスク IO が発生し、パフォーマンスが低下します。もちろん、これは特定のテーブル構造の設計にも関係しており、最終的な問題はメモリの制限です。ここで、ハードウェア構成を増やすと、パフォーマンスがすぐに向上する可能性があります。 したがって、データベースとテーブルのシャーディングに関する私の意見は、実際のニーズと組み合わせる必要があり、過剰に設計すべきではないということです。データベースとテーブルのシャーディングは、プロジェクトの開始時に採用すべきではありません。代わりに、ビジネスが成長し、最適化を継続できなくなったときに、システムのパフォーマンスを向上させるためにデータベースとテーブルのシャーディングを検討する必要があります。この点に関して、Alibaba の「Java 開発マニュアル」では次のように付け加えています。「3 年以内にデータ量がこのレベルに達しないと見積もられる場合は、テーブルを作成するときにデータベースまたはテーブルを分割しないでください。」それで、元の質問に戻りますが、どの値が適切だとお考えですか?ご自身のマシンの状況を踏まえて総合的に判断することをお勧めします。基準が決まっていない場合は、比較的妥協できる値である 500 万行を暫定的に統一基準として使用してください。 皆さんに役立つSQLの書き方について、いくつかポイントを見てみましょう。 SQLの記述を最適化する必要がある
以下もご興味があるかもしれません:
|
>>: Ubuntu 19にTheanoをインストールする際の問題を解決する
メインのオペレーティング システムを Windows から Ubuntu に切り替えたとき、最初に考...
序文group by と distinctive のパフォーマンス比較について: インターネット上の...
ドラッグ アンド ドロップはフロントエンドでよく使われる機能であり、多くのエフェクトで js のドラ...
目次序文プロトタイプチェーン継承コンストラクタの継承組み合わせ継承(プロトタイプチェーン継承とコンス...
1. v-onイベント監視DOM イベントをリッスンするには、v-on ディレクティブを使用します。...
この記事の例では、JavaScriptで4桁のランダムな検証コードを生成する具体的なコードを参考まで...
序文テストを行う際、大量のデータによる負荷に耐えるプロジェクトの能力をテストするために、通常はテスト...
*ページを作成する: 2つの入力ボックスとボタン*コードと手順/* 1. 入力行と列の値を取得する2...
iノードとは何ですか? inode を理解するには、まずファイル ストレージから始める必要があります...
MySQL では、IF()、IFNULL()、NULLIF()、および ISNULL() 関数を使用...
デフォルトでは、MySQL は日付に 0 値を挿入することを受け入れますが、実際には日付の 0 値に...
Tomcat は Java 言語をベースにした Web サーバー ソフトウェアです。この記事では主に...
この記事の例では、メモ帳機能を実装するためのVueの具体的なコードを参考までに共有しています。具体的...
MySQL のインストールに関する以前のメモを要約して、皆さんと共有しました。ステップ 1: mys...
1. 同時実行性同時実行性は OLTP データベースの最も重要な機能ですが、同時実行性にはリソース...