我正在开发一个应用程序,该应用程序需要存储与音乐文件(艺术家、标题、播放次数等)相关的元数据,以及整数集(特别是 SHA-1 哈希)。
我选择的解决方案需要:
- 提供“快速”存储和检索(在查看可能包含数千首歌曲的列表时,我需要能够或多或少地以交互方式检索元数据)。
- 跨平台(Linux、Windows 和 OSX)。
- 提供一个我可以从 C++ 交互的接口。
- 开源(或者至少像啤酒一样免费)。
- 提供快速集合操作(并集、交集、差集) - 如果解决方案不提供此功能,但它允许我存储二进制数据,我可以使用类似“Fast Set Operations Using Treaps”之类的技术自己实现此功能。
- 被“嵌入”——也就是说,无需我使用
fork
另一个进程即可操作,或者至少提供一个简单的界面来执行此操作(如 libmysqld)。
我考虑过的解决方案包括:
- 平面文件。这非常简单,但除了平面数据存储之外不提供任何功能。
- SQLite。这似乎是一个非常受欢迎的选项,但它似乎在性能和并发方面存在一些问题(请参阅KDE 的 Akonadi,了解一些示例问题)。
- 嵌入式 MySQL/MariaDB。这似乎是一个合理的选择,但考虑到我不需要很多复杂的 SQL 功能,它也可能有点重量级。
我认为完美的假设解决方案类似于 Redis,但它将数据持久保存到磁盘,并且仅将部分数据存储在内存中以快速检索。Redis 本身可能不是一个好的选择,因为 1) 我需要fork
手动操作,2) 它的 Windows 端口似乎不够坚如磐石,以及 3) 将我的所有数据存储在 RAM 中并不理想。
对于此类问题是否还有其他解决方案,或者我已经列出的解决方案之一比其他解决方案好得多?