哪个具有1亿条记录的嵌入式数据库具有高效的C或C ++ API

我正在寻找一个跨平台的数据库引擎,它可以处理数以亿计的记录数据库而不会严重降低查询性能。 它需要有一个C或C ++ API,可以轻松,快速地构建记录并解析返回的数据。

非常气馁的产品是必须将数据转换为字符串以及从字符串转换才能将数据转换到数据库中。 存储IP地址之类的技术用户不需要或不需要这些开销。 这是一个非常重要的标准,因此如果您要参考产品,请明确说明他们如何提供这样的直接API。 不希望变得粗鲁,但我可以使用谷歌 – 请假设我找到了大多数主流产品而且我在问,因为通常很难找到他们提供的直接API,而不仅仅是围绕SQL的C包装器。

它不需要是一个RDBMS – 一个简单的面向ISAM记录的方法就足够了。

虽然主要需求是单用户数据库,但扩展到某种共享文件或服务器操作可能会在将来使用。

如果数据库来自小公司,则非常需要访问源代码(开源或通过许可)。 它不能是GPL或LGPL。

您可以考虑FairCom的 C-Tree – 告诉他们我发给你的;-)

我是hamsterdb的作者。

东京内阁和berkeleydb应该工作正常。 hamsterdb肯定会起作用。 它是一个简单的C API,开源,独立于平台,速度非常快,并且可以使用高达数百GB和数亿个项目的数据库进行测试。

如果您愿意评估并需要支持,请给我发邮件(hamsterdb.com上的联系表格) – 我会尽力帮助!

克里斯托夫再见

您没有提到您所使用的平台,但如果Windows只是正常,请查看可扩展存储引擎 (以前称为Jet Blue),Windows 2000及更高版本中包含的嵌入式ISAM表引擎。 它用于Active Directory,Exchange和其他内部组件,针对少量大型表进行了优化。

它有一个C 接口 , 本机支持二进制数据类型。 它支持索引 , 事务并使用日志来确保primefaces性和持久性。 没有查询语言; 你必须自己直接使用表和索引 。

ESE不喜欢通过网络打开文件,也不支持通过文件共享共享数据库。 您将很难找到任何支持通过文件共享共享的数据库引擎。 Access Jet数据库引擎(AKA Jet Red,完全独立的代码库)是我所知道的唯一一个,并且它通过网络破坏文件而臭名昭着,特别是如果它们很大(> 100 MB)。

无论您使用何种引擎,您都很可能必须在自己的网络服务器进程中自己实现共享使用function,或者使用离散数据库引擎。

对于几年后找到此页面的任何人,我现在使用LevelDB并在顶部添加一些脚手架来添加必要的多重索引。 特别是,它非常适合iOS上的嵌入式数据库。 我最后写了一本关于它的书! (LevelDB的入门,来自Packt,2013年末)。

一个选项可能是Firebird 。 它既提供基于服务器的产品,也提供嵌入式产品。

它也是开源的,并且有大量的提供商可用于所有类型的语言。

我相信你所寻找的是BerkeleyDB: http : //www.oracle.com/technology/products/berkeley-db/db/index.html

别介意它是Oracle,许可证是免费的,而且它是开源的 – 唯一的问题是如果你重新发布使用BerkeleyDB的软件,你必须提供你的源代码 – 或购买许可证。

它不提供SQL支持,而是提供直接查找(通过b-tree或hash-table结构,根据您的需要更有意义)。 它非常可靠,快速,ACID,内置复制支持等等。

以下是我在上面提到的页面中的一个小引号,其中列出了一些function:

数据存储

Berkeley DB可以快速轻松地存储数据,而不会产生其他数据库中的开销。 Berkeley DB是一个C库,它在与应用程序相同的进程中运行,避免了使用远程数据库服务器的进程间通信延迟。 共享缓存将最活跃的数据保存在内存中,从而避免了昂贵的磁盘访问。

  • 本地进程内数据存储
  • 架构中立的应用程序本机数据格式
  • 索引和顺序检索(Btree,Queue,Recno,Hash)
  • 每个应用程序多个进程和每个进程多个线程
  • 精细粒度和可配置锁定,适用于高度并发的系统
  • 多版本并发控制(MVCC)
  • 支持二级索引
  • 内存中,磁盘上或两者
  • 在线Btree压缩
  • 在线Btree磁盘空间回收
  • 在线废弃的锁定删除
  • 关于磁盘数据加密(AES)
  • 最高可记录4GB,表最高可达256TB

更新:刚刚浏览了这个项目并想到了你发布的问题: http : //tokyocabinet.sourceforge.net/index.html 。 它属于LGPL,因此与您的限制不兼容,但仍然是一个有趣的项目。

SQLite将满足这些标准,除了将来的最终共享文件场景(实际上,如果网络文件系统正确实现文件锁定,它可能会这样做)。

已经提到了许多好的解决方案(例如SQLite)。 让我添加两个,因为你不需要SQL:

  • HamsterDB快速,易用,可以存储任意二进制数据。 没有共享数据库的规定。
  • Glib HashTable模块看起来也很有趣,并且很常见,所以你不会冒险进入死胡同。 另一方面,我不确定是否有简单的方法将数据库存储在磁盘上,它主要用于内存中的东西

我已经测试了数百万个记录项目。

SQLite往往是第一个选择。 它不会将数据存储为字符串,但我认为您必须构建一个SQL命令来执行插入,并且该命令将具有一些字符串构建。

如果您不需要relationDB,BerkeleyDB是一个精心设计的产品。 我不知道甲骨文收取了什么费用以及您是否需要申请许可证。

就个人而言,我会考虑为什么你有一些要求。 您是否已完成测试以validation是否需要直接插入数据库? 好像你可能需要花费几个小时来编写一个包装器,它可以从你想要的任何API转换为SQL,然后看看SQLite,MySql,……是否符合你的速度要求。

由于您熟悉Fairtree,那么您可能也熟悉Raima RDM。

它在几年前开源,然后dbstar声称他们以某种方式获得了版权。 这似乎有争议。 从阅读原始Raima许可证,这似乎是不可能的。 当然可以保留原始代码版本。 这是相当罕见的,但我有一份存档的副本。

曾经有一种名为b-trieve的产品,但我不确定是否包含源代码。 我认为它已经停产。 我所知道的唯一一个ISAM方向的数据库引擎是c-tree。