gpt4 book ai didi

c++ - 快速嵌入式数据库

转载 作者:可可西里 更新时间:2023-11-01 16:38:50 24 4
gpt4 key购买 nike

我正在开发一个需要存储与音乐文件相关的元数据(艺术家、标题、播放次数等)以及整数集(特别是 SHA-1 哈希值)的应用程序。

我选择的解决方案需要:

  • 提供“快速”存储和检索(当查看可能包含数千首歌曲的列表时,我需要能够或多或少地以交互方式检索元数据)。
  • 跨平台(Linux、Windows 和 OSX)。
  • 提供一个我可以从 C++ 进行交互的接口(interface)。
  • 开源(或者至少像啤酒一样免费)。
  • 提供快速集合操作(​​并集、交集、差集)——如果解决方案没有提供这个,但它允许我存储二进制数据,我可以使用类似 "Fast Set Operations Using Treaps" 的技术自己实现它.
  • “嵌入”- 也就是说,无需我fork 另一个进程即可运行,或者至少提供一个简单的接口(interface)(如 libmysqld)。

我考虑过的解决方案包括:

  • 平面文件。这非常简单,但除了平面数据存储外不提供任何功能。
  • SQLite。这似乎是一个非常受欢迎的选项,但它似乎在性能和并发性方面存在一些问题(有关一些示例问题,请参阅 KDE's Akonadi)。
  • 嵌入式 MySQL/MariaDB。这似乎是一个合理的选择,但考虑到我不需要很多复杂的 SQL 功能,它也可能有点重量级。

我认为一个完美的假设解决方案是 Redis 之类的东西,但它将数据持久保存到磁盘,并且只将部分数据存储在内存中以加快检索速度。 Redis 本身可能不是一个好的选择,因为 1) 我需要手动 fork 它,2) 它的 Windows 端口似乎不太可靠,以及 3) 存储所有我在 RAM 中的数据并不理想。

是否有针对此类问题的任何其他解决方案,或者我已经列出的解决方案之一是否比其他解决方案好得多?

最佳答案

最后,我决定将 SQlite 用于元数据。它似乎和例如一样快,如果不是更快的话。 libmysqld,它有一个非常简单干净的 C 接口(interface)。根据基准测试,它的速度应该足以满足我的需求。

对于更大的数据结构,我打算将它们存储在单独的二进制文件中(SQlite 网站说它可以存储二进制数据,但如果您的数据大小超过一定数量,则将其存储在平面文件中会更快相反 - 请参阅 this page )。

关于c++ - 快速嵌入式数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17439459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com