4

この質問は、私が (まだ) 抱えている問題とは関係ありませんが、夜も眠れません。理論的には、最終的には、テーブルの行数がどんどん増えていくと、各行に対応する ID が「足りなくなる」のではないでしょうか。列の値に深さを追加し続けると、それを続けることができると思いますが、最終的には上限があるはずですよね?

「シャーディング」と呼ばれる手法について聞いたことがありますが、好奇心を満足させるほど詳しく説明されていません。数字を追加し続けるという答えですか、それとも独自のサンドボックスで「繰り返し」ID を許可する巧妙なパターンがありますか。これらのサンドボックスが相互作用しなければならない場合はどうなりますか?

4

2 に答える 2

5

シャーディングは ID のサイズとは関係ありません。

それを処理する正しい方法は次のとおりです。心配しないでください。

32 ビットの int には十分な値があり、100 年以上にわたって不足することなく 1 秒あたり 1 行を追加できます。

それだけでは不十分な場合、64 ビットの int を使用すると、 1 秒あたり10 億行を追加しても、500 年以上続く可能性があります。

だから基本的に:心配しないでください。予想される行数に 100 を掛けて次に進むことに基づいて int のサイズを選択します。

リシャーディング:

これは、ルールを使用してデータを取得するサーバーを決定することにより、データベースを複数のサーバーに分割する単純な方法です。ルールは、保存するものとサーバーの数によって異なります。

于 2012-09-13T05:20:29.193 に答える
2

dev.mysql.comから

AUTO_INCREMENT 列には、必要な最大シーケンス値を保持するのに十分な大きさの整数データ型を使用してください。列がデータ型の上限に達すると、次のシーケンス番号生成の試行は失敗します。たとえば、TINYINT を使用する場合、許容される最大シーケンス番号は 127 です。TINYINT UNSIGNED の場合、最大値は 255 です。

それは実際に魅力的です。簡単な(半)答えは BIGINT を使用することだと思います-最大値は18,446,744,073,709,551,615です。それだけの数の列を取得した場合、... すごい...

于 2012-09-13T05:20:07.607 に答える