我正在开发一个需要存储数据的应用程序,其中包含许多写入和读取需要快速搜索数据(需要某种索引),并且还能够序列化和保存数据。
目前我正在考虑使用SQLite来完成工作,但我愿意接受替代方案。 SQLite的语法实际上并不适合C ++代码(例如,我被迫通过列索引号而不是列名等来访问结果)。
答案 0 :(得分:21)
继续使用SQLite,但为此找到一个好的C ++库。
这StackOverflow question可以帮助你...
答案 1 :(得分:8)
我认为增加对包装器库的依赖并不值得花费额外依赖的成本。当他们的文档可能很少时,您不希望被调试这些包装器库。 SQLLite必须更稳定,并且具有更好的文档,因此具有更可靠的依赖性。
我要么处理sqllite,要么根据你的最终应用程序以一种聪明的方式自己包装。
答案 2 :(得分:6)
听起来好像数据库是您唯一真正的选择。但是,如果您选择SQLite或MySql,Postgres在列索引点中并不重要。
也许你真正想要的是更好的数据库抽象。您可能想尝试Poco,它有一个很棒的:http://pocoproject.org/
答案 3 :(得分:4)
Berkeley DB又名SleepyCat。如果您搜索档案,Mike Olsen就会发表一篇文章,讨论SQL在任何项目中的主要缺点。去年还有另一篇后续文章表明,SQL已经出局了,因为ORM层变得越来越好。
答案 4 :(得分:2)
如果你问我留在SQLite并“自己动手” - 包装它非常简单我自己对SQLite做了各种包装。为什么?因为它的API比其他任何与数据库相关的更友好,所以你不需要花费太多精力。使用包装器库,您将只添加更多未知数,最重要的是大多数包装器并不专门用于提供嵌入式数据库。我一直在重复使用嵌入式数据库,正确的方法与数据库服务器的最佳方法有很大不同......
答案 5 :(得分:1)
我可以建议您列出Sqlite网站上列出的wrapper APIs列表吗?那里有很多语言,包括C ++。 Sqlite Plus看起来特别好。 POCO,“通常无用”提到,看起来也不错。
答案 6 :(得分:1)
如果SQL语法对你不重要,我建议MetaKit - 这是一个稍微不同的方法,但它非常强大,我个人知道不止一些成功使用它的商业项目,即使在嵌入式系统上也是如此
This Tutoria l对开始非常有帮助。
答案 7 :(得分:1)
我同意,说SQLite与C ++或列名索引不兼容是假的。有很多C ++ SQLite包装器鼓励按名称访问列。 SQLite++只是其中之一。
答案 8 :(得分:0)
您可能会考虑使用像Lucene这样的反向索引IR库(或其中的众多克隆之一)而不是sql衍生物。我知道Lucene是Java,但你可以编写一个托管的C ++库来与Lecene.Net互操作。
就速度而言,我对Lucene的读取表现非常满意。它没有针对它的写入进行优化,但它仍然相当不错,只要你不试图建立数百万个“文档”的索引。
答案 9 :(得分:0)
如果您不在Windows上工作,可以查看Tokyo Cabinet。它看起来很不错。我正在等待Win32端口,所以除了性能看起来令人印象深刻之外,我不能说太多。
http://anyall.org/blog/2009/04/performance-comparison-keyvalue-stores-for-language-model-counts/
这不是SQL衍生产品。它是一个直接的b-tree / hash存储。在我看来,这是非常受欢迎的。我所知道的唯一竞争性库是Berkeley DB,它的许可证不太理想。