私は金融業界で働いています。データ処理のためにデータベースヒットを展開したいと考えています。それは非常に高価です。だから私たちはオンデマンドキャッシュロジックに行くつもりです。 [ランタイムインサート&ランタイム検索]プロセスメモリに大量のデータをキャッシュする
誰でも1000万以上のレコードに対してキャッシュロジックの実装に取り組んでいますか?レコードごとに約160〜200バイトと言われています。
私は以下の欠点に直面しました。
- は、キーベースのキャッシュレジストリを実装するためにのSTLのstd ::マップを使用することはできません。 200000レコードの後、挿入と参照が非常に遅いです。
- 共有メモリやメモリは、これらのデータは&フラットファイル、アプリケーションデータベースは 価値が可能で、メモリ
- 使用sqlite3ののプロセス間で共有されていないため、ファイルは、データをキャッシュする、 のために一種のオーバーヘッドがあるマッピングされました。しかし、それも2〜3百万のレコードの後にゆっくりと検索されます。
- プロセスメモリには、独自のカーネルメモリ消費量にある制限があります。私の の仮定は、32ビットマシンで2ギガである。& 64ビットマシンで4ギガバイト。
この問題に遭遇して何らかの手段で解決した場合は、私に何か提案してください。
おかげ
DBインデックスは通常、std :: map(R&Bバイナリツリー)ではなく、BTreesによって実装されます。 BTreesはあなたが話しているスケールにはるかに効果的です。 – littleadv
プロセス間で共有メモリファイルとメモリマップファイルの両方を使用できます。少なくともLinuxで。あなたはどのOSを使用していますか? –
これはキーバリューストアかもっと複雑なものですか? –