音楽ファイル(アーティスト、タイトル、再生回数など)に関連付けられたメタデータと、整数セット(特にSHA-1ハッシュ)を格納する必要があるアプリケーションに取り組んでいます。私はニーズを選ぶ高速埋め込みデータベース
ソリューション:
- は「速い」ストレージ&検索(曲の潜在的に何千ものリストを表示しているとき、私は多かれ少なかれ対話形式でメタデータを取得できるようにする必要があります)を提供します。
- クロスプラットフォーム(Linux、Windows、OSX)です。
- 私はC++と対話できるインターフェースを提供しています。
- オープンソース(少なくとも、ビールのように自由にしてください)。
- 解決策がこれを提供しないが、バイナリデータを格納できるならば、私は"Fast Set Operations Using Treaps"のようなテクニックを使って自分自身を実装することができます。
- つまり、私が
fork
別のプロセスを使わなくても動作していても、少なくとも(libmysqldのように)簡単なインターフェースを提供していても動作します。私が検討している
ソリューションが含まれます:
- フラットファイルを。これは非常に簡単ですが、フラットなデータストレージ以外の機能は提供していません。
- SQlite。これは非常に普及しているオプションのようですが、パフォーマンスと並行性に関するいくつかの問題があるようです(いくつかの例題についてはKDE's Akonadiを参照してください)。
- 組み込みMySQL/MariaDB。これは合理的な選択肢だと思われますが、私は複雑なSQL機能をたくさん必要としないので、少し重いかもしれません。
私が想像している仮想ソリューションは、Redisのようなものですが、データをディスクに保存し、データの一部のみをメモリに保存して検索を高速化します。 1)私は手動でfork
にする必要があり、2)そのWindowsポートは堅固ではないように思えるし、3)をすべてRAM内ののすべてを理想よりも少なく保存するため、Redis自体は良い選択肢ではないかもしれない。
このタイプの問題には他に解決策がありますか、既に私が他のものよりもはるかに優れているソリューションの1つですか?
* AkonadiでのMutexベースのトランザクションのシリアル化(SQliteの並行処理のサポートでは不十分かもしれません)は、IMAP同期などのバックグラウンド操作が行われている間にクライアントをブロックする可能性があります。なぜデータベースがロックされている間にIMAPの同期を行っているのか(それは何でも)、* SQLiteの問題*を呼び出すのはなぜですか? –
SQliteのサイトのベンチマークは、KDEが言っていることと全く矛盾しているようです。Akonadiは恐ろしいほど私を驚かないでしょう。おそらく、SQliteは実際より多くの調査に値するでしょう。 – CmdrMoozy
SQliteは、ブラウザから何千ものユーザを扱うことができるプロダクションサーバ(そこにいて、Tシャツを手に入れたことがあります)までどこでも使用されています。パフォーマンスの問題ではありません。 –