質問: 32gbのメモリあたりredisで可能なレコードの数を計算するにはどうすればよいですか? 私の会社では、mongodbではなくredisでバックエンドの一部を構築する可能性について話し合っていますが、32gのサーバーに保存できるレコードの数を計算したいと思います。それはキーのサイズと値に完全に依存することを私は知っていますが、要素がすべてこのようなものである場合に格納できるアイテムの数を計算する方法はありますか?key: hexadecimal with 12 bytes. value: string with 20 bytes.
回答: 32gbのメモリがredisに割り当てられ、その他のメモリがシステムリソースで使用可能であると仮定すると、保存できるエントリの数を計算できます。ただし、常に何らかのオーバーヘッドがあるため、これは非常に一般化されていることに注意してください。とにかく、数学の観点からエントリの純粋な数を見ると、32gbのramで約10億のエントリを格納できます。1 gb = 1024mb 1 mb = 1024kb 1 kb = 1024b 1gb = 1,073,741,824b 32gb = 34,359,738,368b size = 12b + 20b = 32b number_of_entries = (available_size / size_of_entry) = (34,359,738,368b / 32b) = 1,073,741,824 前に言ったように、オーバーヘッドがまったくないと仮定するのは非常に悪いことです。以下のredisのfaqを参照してください。環境の詳細を知らなければ、より正確な数値を与えることは不可能です。 redisのメモリフットプリントとは何ですか? いくつかの例を挙げます(すべて64ビットインスタンスを使用して取得):空のインスタンスは約1mbのメモリを使用します。 100万個の小さなキー->文字列値のペアは約100mbのメモリを使用します。 100万キー-> 5つのフィールドを持つオブジェクトを表すハッシュ値は、約200mbのメモリを使用します。ユースケースをテストするには、redis-benchmarkユーティリティを使用してランダムなデータセットを生成し、infoメモリコマンドで使用されているスペースを確認するのは簡単です。 64ビットシステムは、同じキーを格納するために32ビットシステムよりもかなり多くのメモリを使用します。特に、キーと値が小さい場合、これは、ポインタが64ビットシステムで8バイトを使用するためです。ただし、もちろん利点は、64ビットシステムで大量のメモリを使用できることです。したがって、大規模なredisサーバーを実行するには、多かれ少なかれ64ビットシステムが必要です。別の方法はシャーディングです。