2

私がRocksDBを使いたいと思う方法は珍しいです。メモリ内に非常に多くの文字列を持つアプリケーションのメモリ負荷を下げるために使用したいと考えています。その理由は、アプリケーションが最終的に、そうでなければすべての文字列を格納するために数十ギガの RAM が必要になるところまでスケーリングするためです。これは、一部が C++ で記述され、一部が VB.NET で記述された 64 ビット専用アプリケーションです (わかっています。わかっています)。

私はすべての文字列をディスクに移動する任務を負っています。

出来る限りのパフォーマンスを発揮したい。確かに SQLite のようなものを使用できますが、SQL はまったく必要ありません。キー/値ストアが必要なだけです。キーは 32 ビットの int にすることができ、値は文字列になります。典型的な文字列の長さは 1K から 5K です。

必要なパフォーマンス特性は次のとおりです。

  1. 文字列が一括してディスクに書き込まれています。書かれた後、それらが変更されることはめったにありません。ほとんどの場合、それらは単に読み取り専用になります。
  2. 文字列は、RAM から移動する方法としてのみディスクに書き込まれています。パフォーマンスのために、すべての文字列を同時に RAM に保持すると、その人は敗北します。理想的には、キャッシュとして使用する RAM の量を指定できます。
  3. 耐久性は重要ではありません。書き込みキャッシュに時間がかかるかどうかは気にしません。実際、上記の (2) で指定されたバッファー サイズを超えた場合にのみ、文字列がディスクに書き込まれることだけを気にします。たとえば、ディスク上に 10 億個の文字列があり、そのうちの 1,000 個を RAM に保持している場合 (バッファー サイズとして)、1,000 個の文字列がディスクに書き込まれるまで、1,000 個の文字列がディスクに書き込まれなくても問題ありません。割り当てられます。

これまで見てきたほとんどすべてのシステム、memcached、redis、leveldb、lightning、sqlite 4 の LSM はすべて、さまざまな問題を解決します。耐久性のために物事が永続化されるようにするという問題を解決するものもあります。明らかに私の場合、クラッシュプルーフであることは気にしません。私のアプリケーションは、アプリの起動時にデータ ストアを再作成します。アプリがクラッシュしても、ディスクに残っている内容は気にしません。さらに他のもの (memecached など) は、最初に RAM に配置することでディスクのパフォーマンスを最適化します。それは、私が解決しなければならない問題とはほとんど反対の問題を解決することです。

最終的には、これは 64 ビット システムであるため、最適化のためにメモリ マップ ファイルをシステムに使用してもらいたいと考えています。

RocksDB は、私が使用する必要があると思うツールに最も近いものですが、非常に紛らわしく複雑なシステムであり、100 万の設定があります。さらに、私の特定のシナリオは、投稿された「レシピ」のいずれにも含まれていません。

ですから、RocksDB チームの誰かが喜んで私にガイダンスを提供してくれるかどうか知りたいです。これを機能させることができれば、私は非常に感謝しており、オンラインで他の人が同じタイプの問題を解決するのに役立つでしょう.

4

1 に答える 1

0

データをディスクに移動する必要があると言う部分はよくわかりませんでしたが、耐久性は必要ありませんでした。

それ以外では、leveldb が最適です。

*fast writes
*ability to do atomic bulk insert (WriteBatch)
*low memory footprint
*fast key lookup (and fast iterator to read adjacent data)

プラットフォームを指定しませんでしたが、Linux でネイティブであるか、 Windows でWindows ポート( .net wrappers ) を使用できます。

于 2016-06-10T10:25:45.780 に答える