3

私は巨大なmysqlテーブル(ロギング用)を持っています。何かのようなもの:

ロガー(sha1)タイムスタンプアクション

したがって、約10万のロガーが存在すると予想されます。各ロギングは平均して100行と言います。これにより、テーブルは非常に迅速に約1億行になります。

多くのロガーが一度にエントリを書き込むので、挿入(実際に追加)を非常に迅速に行う必要があります。

通常、クエリは「ロガーからのすべてのログを「x」日付順に表示してください」になります。

だから私はmysqlパーティショニングを使うつもりでした:http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

私の質問は、パーティションの数とパーティションのサイズのバランスをどのように見つけるかです。

ロガーはUUIDであり、sha1番号であるため、mysqlがsha1値ごとに1つのパーティションを作成するようにすることを考えていました。したがって、基本的に、各ロガーは独自のDBテーブルファイルを持ちます。

他の提案はありがたい

4

1 に答える 1

1

何かを特定の数に分割する簡単な方法は、モジュラス関数を使用することです。

したがって、おそらく SHA1 ハッシュの最初の 4 つの 16 進文字を取得し、それらを整数 (最大 65,025 になる) に変換し、mod 1024 にすると、次のようになります。

aa00 % 1024 = 512

10進数で

43520 % 1024 = 512

512 を返すすべての数値は、同じパーティションに入れることができます。計算により、0 から 1023 までの値が得られます。

于 2012-06-25T16:56:56.690 に答える