音楽ファイルに関連付けられたメタデータ (アーティスト、タイトル、再生回数など) と整数のセット (特に SHA-1 ハッシュ) を保存する必要があるアプリケーションに取り組んでいます。
私が選択するソリューションは、次のことを行う必要があります。
- 「高速」なストレージと検索を提供します (何千もの可能性のある曲のリストを表示する場合、多かれ少なかれインタラクティブにメタデータを検索できる必要があります)。
- クロスプラットフォームであること (Linux、Windows、および OSX)。
- C++ から対話できるインターフェイスを提供します。
- オープンソースであること (または、少なくともビールのように無料であること)。
- 高速集合操作 (和集合、交差、差分) を提供する - ソリューションでこれが提供されない場合でも、バイナリ データを格納できる場合は、「Treaps を使用した高速集合操作」のような手法を使用して自分で実装できます。
- 「埋め込む」 - つまり、別のプロセスを必要とせずに操作する
fork
か、少なくともそうするための簡単なインターフェース (libmysqld など) を提供します。
私が検討した解決策は次のとおりです。
- フラットファイル。これは非常に単純ですが、フラット データ ストレージ以外の機能はありません。
- SQlite。これは非常に人気のあるオプションのようですが、パフォーマンスと同時実行性に関していくつかの問題があるようです (問題の例については、 KDE の Akonadiを参照してください)。
- 組み込みの MySQL/MariaDB。これは合理的なオプションのようですが、複雑な SQL 機能をあまり必要としないことを考えると、少し重いかもしれません。
私が完璧だと思っている仮説的な解決策はRedisのようなものですが、データをディスクに保持し、データの一部のみをメモリに保存して検索を高速にします。Redis 自体は適切なオプションではない可能性があります。1)fork
手動で行う必要がある、2) その Windows への移植は信頼性が低いと思われる、3)すべてのデータを RAM に保存するのは理想的とは言えないためです。
このタイプの問題に対する他の解決策はありますか、それとも私が既にリストした解決策の 1 つは他の解決策よりもはるかに優れていますか?