注:他の同様のQをここで検索しましたが、他の回答された質問はどれもリモートで類似していません。それによって... MySqlテーブルについて質問があります(より正確には、テーブルのフィールド、つまりtweets
またはupdates
)。
では、質問... InnoDBテーブルの行の最大数はいくつですか?つまり、MyIsam、InnoDB、および他のユーザーが保持できる量の間にかなりの量の差がある場合、一般的には、そうでない場合です。次に、テーブルが非常に大きくなる場合、データを保存するためのベストプラクティスは何ですか(同じ1つのテーブル、または分割/複数のテーブル/ db)。
私はTwitterが1日に1億のツイートのようなものを受け取ると読んだ。同じ文脈で、私の2番目の質問はTwitterなどにどのように当てはまりますか?
http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html を使用すると、キーサイズから制限を計算できます。
しかし、ツイートのような情報を参照整合性やInnoDBの他の機能を備えたトランザクションエンジンに保存したくないことをお勧めします。また、間違いなくそれらすべてを単一のDBインスタンスの1つのテーブルに格納しないでください。それらをたくさんの独立した非SQLデータベースに入れて高速に追加し、メタ情報(ハッシュタグ、RTなど)をより複雑なデータベースに抽出します。 Twitter DBアーキテクチャでのプレゼンテーションは簡単にグーグルできます(例 http://www.slideshare.net/nkallen/q-con-3770885 )。
大量のデータを1つのテーブルに格納する必要がある場合、パーティショニングはあなたの友人であり、おそらくPostgresがそれをよりよくサポートしています。パーティションテーブルは、物理的には、論理的に1つのテーブルのように見えるいくつかのテーブルです。これらのサブテーブル(パーティション)を別のディスクに配置したり、それらのディスクでメンテナンスを個別に実行したりします。また、必須の列のみを含む1つの非常に長いテーブルと、大きいがオプションの列を格納するいくつかのテーブルを含む「スタースキーマ」は、助けて。
行の制限はありませんが、InnoDBデータベースでは サイズの制限 :
テーブルスペースの最小サイズは10MBです。テーブルスペースの最大サイズは、40億データベースページ(64TB)です。これは、テーブルの最大サイズでもあります。
同じテーブルの複数のパーティションの複数のファイルに行を格納することで、常に horizontally partition テーブルを作成できます。
テーブルの64TB制限には、次の例外があります。
innodb_page_size = 16K
(デフォルト)。これは、4Kと64Kの間で2の累乗に設定でき、テーブルスペースの制限を比例的に変更します。PARTITIONed
テーブルは基本的に、まとめてまとめられ、1つの大きなテーブルとして機能する一連の「サブテーブル」です。 5.6.7より前のパーティション数の制限は1024でした。その後は8192になりました。そのため、64 TBを掛けてください。OK、byte制限のみが与えられます。さらに、オーバーヘッドとインデックスも含まれます。次に、行の最大数を取得するには、平均レコードの大きさで除算する必要があります。
(平均レコードサイズを計算するのは簡単ではありません。)
簡単な答え:
InnoDBテーブルでは、おそらく1兆の「小さい」レコードを簡単に取得できます。少し努力すれば、1000兆に達するかもしれません。しかし、その前にディスクドライブの予算が使い果たされると思います。さらに、すべてのINSERTs
を実行して埋めるために何年もかかるでしょう!
したがって、現実的な答え:MySQLは「無制限」の行数を処理できます。
実生活? 10億行を超える、150億にも及ぶ行を含むいくつかのテーブルについて聞いたことがあります。
私の Limits を参照してください。ただし、行の問題については詳しく説明していません。