web-dev-qa-db-ja.com

大規模なデータベースのサイズと速度を見積もる

まず、データベースに含まれる最大のテーブルに関してデータベースのサイズを見積もる方法を知りたいと思います。私は次のことをしました:

+----------+------------------+------+-----+---------+-------+
| Field    | Type             | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| users_id | int(32) unsigned | NO   | MUL | NULL    |       |
| s        | binary(16)       | NO   | PRI | NULL    |       |
| t        | binary(16)       | NO   | PRI | NULL    |       |
| x        | binary(16)       | NO   | PRI | NULL    |       |
+----------+------------------+------+-----+---------+-------+

これはサイズにとって重要なテーブルです(他のテーブルはユーザーデータ(id、user、pass、email)を維持するためだけのものであり、100を超えるエントリがあるとは思われません)。

上記の表には、約7.61263 * 10 ^ 9のエントリがあると思います。私はこの簡単な計算を行いました:7.61263 * 10 ^ 9 +(4バイト+16バイト+16バイト+16バイト)〜= 395GB。しかし、dbms(インデックス、データベース構造など)からのオーバーヘッドを考慮する方法がわかりませんか?

データベースサイズを見積もる方法は?

この大きなテーブルで実行されているMySQLの速度と安定性についてはどうでしょうか。サイズを小さくするために、データを2つ以上のデータベースに分割する必要がありますか?

3
Kami

サイズの両方の速度について質問する限り、そうです、ラッセルの権利です。実際に テーブルにサンプルデータを入力する 、代表的なクエリをテストして、それらがどのように実行されるかを確認する必要があります。

サイズの問題については、インデックスの正確なサイズを常に計算できるとは限りませんが、MySQLのドキュメント データ型ストレージ要件 および 使用しているストレージエンジン)の適切なドキュメントを参照してください。 using。 は、行のオーバーヘッドに関する情報と、インデックスを推定するためのガイダンスです。

(たとえば、MyISAMの行で2 ** 32の制限に達するため、 大きなテーブルのサポート でビルドする必要があります)

複数のデータベースが必要かどうかについては、そうすべきではありません。複数のテーブルに分散する必要がある場合は、いつでも partitioning を使用できます。これは、 ファイルシステムの制限 に反対している場合にも役立つと思います。

3
Joe

データを生成してテーブルに入力する単純なループを記述します。そうすれば、これらすべての質問に、はるかに正確かつ正確に答えることができます。実世界のテストを行うのに最小限の時間がかかります。

2
Russell Steen

MyISAMの場合、指定した計算に1行あたり1バイトを追加します。 dataを処理します。各インデックスについて、計算は次のようになります

  • フィールドサイズを計算する
  • データへのポインタに6を追加します(デフォルトを想定)
  • bTreeのオーバーヘッドを考慮して、たとえば1.5を掛けます。

InnoDBの場合、計算は非常に面倒です。簡単な答えは、MyISAMのデータとインデックスのサイズを取得してから、2または3を掛けることです。

DESCではなくSHOWCREATE TABLEを使用してください-インデックスが実際に表示されません。PKが大きく、セカンダリキーに悪影響を及ぼしていると思われます。

0
Rick James