C++的SQLite替代方案

17

我正在开发一个需要频繁读写数据并需要快速搜索数据(需要某种索引)以及能够对数据进行序列化和保存的应用程序。

目前我考虑使用SQLite,它可以完成工作,但我也愿意尝试其他替代方案。SQLite的语法在C++代码中显得不太优雅(例如,我被迫通过列索引号而不是列名称来访问结果等)。


2
列索引和名称与它是否“优雅地适合C++代码”有什么关系? - jalf
可能是重复问题:什么是SQLite的好的面向对象的C++封装 - iammilind
10个回答

21

保持使用SQLite,但为其寻找一个好的C++库。

这个StackOverflow问题可以帮助你...


15
链接已损坏。 - ggg
如果有人对原始的 Stack Overflow 问题链接感兴趣,这里是 archive.org 的副本 - evotopid

8
我认为,增加对包装库的依赖不值得承担额外的成本。当这些包装库的文档可能很少时,您不希望陷入调试包装库的困境。SQLLite更稳定,文档更好,因此是更可靠的依赖项。
我建议要么使用SQLLite,要么根据您的最终应用程序以一种智能的方式自己进行包装。

5
听起来很合理,但这暗示着所有的封装库都自动变得多余。如果将来需要维护,使用广受社区认可(开源)的库可能会让你的工作量更少。 - joeytwiddle

6

看起来对于您来说,数据库是唯一的选择。在列索引点上选择SQLite、MySql或Postgres并不重要。

也许你真正需要的是更好的数据库抽象。您可以尝试使用Poco,它有一个很棒的抽象层:http://pocoproject.org/


4

Berkeley DB 也称为 SleepyCat。如果您搜寻一下文献,将会发现 Mike Olsen 写过一篇文章,提到使用 SQL 在任何项目中的主要缺点。最近的另一篇后续文章则建议 SQL 正在退出历史舞台,因为 ORM 层变得越来越好。


2
注意许可证,它比GPLv2更严格: http://www.opensource.org/licenses/sleepycat.php: “以任何形式重新分发时必须附带有关如何获取DB软件和使用DB软件的任何附属软件的完整源代码的信息。” - jdkoftinoff
根据维基百科,Sleepycat许可证已获得OSI的批准。这对我来说已足够好了。 - Richard
2
没错,只要你不想制作一个使用它的商业闭源程序... - jdkoftinoff

2
如果你问我是否留在SQLite并且“自己动手” - 包装它相当简单,我自己做了各种包装。为什么?因为它的API比任何其他数据库相关的API更友好,而且你不需要花费太多精力。使用包装库只会增加更多未知因素,最重要的是大多数包装器并没有专门为嵌入式数据库服务。我总是重复说,对于嵌入式数据库,正确的方法与数据库服务器的最佳方法非常不同...

1

我能建议你拿一份 Sqlite 网站上列出的 包装器 API 列表吗?那里有很多语言的 API,包括 C++。Sqlite Plus 看起来特别不错。'usuallyuseless' 提到的 POCO 也很好。


1
如果 SQL 语法对您不重要,我建议使用 MetaKit - 它是一种略有不同的方法,但非常强大,我个人知道有多个商业项目成功地使用它,甚至在嵌入式系统上也是如此。 这个教程 对于入门非常有帮助。

嗯...开发似乎在几年前就停滞了。 - Keith Gaughan
正确,但它仍然被广泛使用,稳定且有用。开源许可证基于MIT,因此允许您修改并使您的修改成为闭源。 - jdkoftinoff

1

我同意,说SQLite与C++或列名索引不兼容是虚假的。有很多C++ SQLite包装器鼓励通过名称访问列。SQLite++只是其中之一。


但是SQLite++是一个付费库,你不想花钱只是为了购买一个包装库。 - Pritesh Acharya
@PriteshAcharya,我还没有详细查看,但它说:“SQLite++现在可以免费使用源代码,没有任何限制。” - Matthew Flaschen

0

与其使用sql衍生物,您可以考虑使用倒排索引IR库,如Lucene(或其中的许多克隆版之一)。我知道Lucene是Java编写的,但您可以编写一个托管的C++库与Lecene.Net进行交互。

就速度而言,我对Lucene的读取性能非常满意。它的写入操作没有那么优化,但只要您不尝试构建数百万个“文档”的索引,它仍然相当不错。


0
如果你不是在Windows上工作,你可以考虑一下Tokyo Cabinet。它看起来非常不错。我正在等待Win32端口,所以除了性能看起来令人印象深刻之外,我不能说太多关于它的事情。

http://anyall.org/blog/2009/04/performance-comparison-keyvalue-stores-for-language-model-counts/

这不是SQL的衍生版本。它是一个基于B树/哈希的存储库。在我看来,这非常受欢迎。我所知道的唯一竞争性库是Berkeley DB,其许可证并不理想。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接