我正在开发一个需要频繁读写数据并需要快速搜索数据(需要某种索引)以及能够对数据进行序列化和保存的应用程序。
目前我考虑使用SQLite,它可以完成工作,但我也愿意尝试其他替代方案。SQLite的语法在C++代码中显得不太优雅(例如,我被迫通过列索引号而不是列名称来访问结果等)。
我正在开发一个需要频繁读写数据并需要快速搜索数据(需要某种索引)以及能够对数据进行序列化和保存的应用程序。
目前我考虑使用SQLite,它可以完成工作,但我也愿意尝试其他替代方案。SQLite的语法在C++代码中显得不太优雅(例如,我被迫通过列索引号而不是列名称来访问结果等)。
看起来对于您来说,数据库是唯一的选择。在列索引点上选择SQLite、MySql或Postgres并不重要。
也许你真正需要的是更好的数据库抽象。您可以尝试使用Poco,它有一个很棒的抽象层:http://pocoproject.org/
Berkeley DB 也称为 SleepyCat。如果您搜寻一下文献,将会发现 Mike Olsen 写过一篇文章,提到使用 SQL 在任何项目中的主要缺点。最近的另一篇后续文章则建议 SQL 正在退出历史舞台,因为 ORM 层变得越来越好。
我能建议你拿一份 Sqlite 网站上列出的 包装器 API 列表吗?那里有很多语言的 API,包括 C++。Sqlite Plus 看起来特别不错。'usuallyuseless' 提到的 POCO 也很好。
我同意,说SQLite与C++或列名索引不兼容是虚假的。有很多C++ SQLite包装器鼓励通过名称访问列。SQLite++只是其中之一。
与其使用sql衍生物,您可以考虑使用倒排索引IR库,如Lucene(或其中的许多克隆版之一)。我知道Lucene是Java编写的,但您可以编写一个托管的C++库与Lecene.Net进行交互。
就速度而言,我对Lucene的读取性能非常满意。它的写入操作没有那么优化,但只要您不尝试构建数百万个“文档”的索引,它仍然相当不错。
http://anyall.org/blog/2009/04/performance-comparison-keyvalue-stores-for-language-model-counts/
这不是SQL的衍生版本。它是一个基于B树/哈希的存储库。在我看来,这非常受欢迎。我所知道的唯一竞争性库是Berkeley DB,其许可证并不理想。