大量のデータ(使用可能なRAMよりも多い)を常にシーケンシャルに読み書きするC++アプリケーションを作成する必要があります。
データを将来の証拠として保持し、文書化するのを容易にするために、私はProtocolBufferを使用します。ただし、プロトコルバッファは大量のデータを処理しません。
以前のソリューションは、データユニットごとに1つのファイルを作成する(そしてそれらをすべて1つのディレクトリに保存する)ことでしたが、これは特にスケーラブルではないようです。
今回は組み込みデータベースを使ってみたいと思います。同様の機能を使用するには、キー->値の関連付けを保存するだけで済みます(したがって、sqliteはやり過ぎのようです)。値は、ProtocolBufferから出力されるバイナリシリアル化になります。
データベースが「メモリに保持するもの、ディスクaspに移動するもの」の問題、「大量のデータをディスクに効率的に保存する方法」の問題を管理し、理想的には、シーケンシャル読み取りパターンを最適化することを期待しています(読み取りによって事前に次のエントリ)。
代替案を探している私は代替案がないことに驚いた。この分離は必要ないため、データベースを別のプロセスに保持したくありません(これによりredisが除外されます)。
私が見つけた唯一のオプションはBerkeleyDBでしたが、不快な低レベルのCapiがあります。次に、私が見つけた最良のオプションは、BerkeleyDBの上にあるstldb4でした。APIは非常に優れているようで、私のニーズに合っています。
でも心配です。stldb4は奇妙に見え(libferrisのものに依存している)、保守されていない解決策(1年前の最後のリリース)であり、私がかなり一般的であると思われる問題についてです。
この問題を管理する方法について、より良い提案がありますか?
回答ありがとうございます。