BerkeleyDB的替代品?
我正在寻找一个类似于dbm的库,我可以使用它来代替我正在使用的Berkeley DB。 我转换的主要原因是BDB的许可费用相当高(对于开源应用程序是免费的,但是我的雇主不想因为各种原因开源这个特定的应用程序)。
我简单的看了一下qdbm,但是看起来并不能满足我的需求 – 大量的密钥(几百万)和大的数据项(大于1-5兆字节)。 在我继续我的search之前,我想我会问,因为看起来有大量类似于dbm的库。
你可以看看东京内阁 。 它是qdbm / gdbm的inheritance者,并且如果您决定进行扩展,则可以使用一个很好的networking前端。
编辑:
另一个变种是京都内阁 ; 由同一个人开发,但据说更容易使用。
C / C ++
- http://sphia.org/一个关键/价值商店,书面C和BSD许可。;
- https://code.google.com/p/leveldb/用C ++编写,也是BSD许可的
- http://luxio.sourceforge.net/用C ++编写,LGPL,比Berkeley DB快
- http://symas.com/mdb/用C写的,许可证是;OpenLDAP公共许可证 (BSD-Like)
- https://github.com/davidar/sdbm写在C,公共领域,重新实现“ndbm”;
- http://repetae.net/computer/vsdb/用C写的,授权未知,实验;
- https://github.com/stevedekorte/skipdb使用Skip-List索引在C,BSD-Licensed,Key-value Store中书写
- http://unqlite.org/用C / C ++编写,embedded式NoSQL数据库引擎,BSD许可,类似于SQLite。
- http://hamsterdb.com/用C / C ++,embedded式NoSQL数据库引擎,Apache License 2.0编写。
Java的
- https://github.com/dain/leveldb LevelDB的Java端口,Apache许可证2.0
- https://github.com/jingwei/krati以前的LinkedIn项目,Apache许可证2.0
- http://www.mapdb.org/embedded式Java数据库Apache License 2.0支持键值存储,非常有效的对象序列化
- https://github.com/OpenHFT/Chronicle-Map,LGPL v3,embedded式纯Java键值存储, 比Berkeley DB更快
- https://github.com/jetbrains/xodus,Apache License 2.0,一个Java事务模式的embedded式数据库, 比Berkeley DB更快
- https://github.com/lmdbjava/lmdbjava,LMDB的; JNI绑定,Apache License 2.0
SQLite是公有领域,这意味着您可以将其用于任何目的,并被广泛使用和支持。
您可以通过任何dbm(甚至qdbm)获得更高的性能,并通过简单的间接级别提高并行性:只需取出您的密钥并对其进行散列处理,然后使用data_dir/H(key)/
作为数据库来存储这些密钥。 将散列输出限制为一个小值(比如说),以获得最佳结果。
这种方法有许多好处,很容易总结:
- 概念上简单
- 易于实施和testing
- 不locking整个数据库的更新
- 可以支持更大的数据库
- 易于更换DBM组件
哈希可能甚至不需要encryption安全; 只是大体上统一。 在大多数情况下,DJB的cdb散列效果很好。
如果你在Windows上,那么你可以使用内置的数据库引擎。 http://blogs.msdn.com/windowssdk/archive/2008/10/23/esent-extensible-storage-engine-api-in-the-windows-sdk.aspx
你可以试试JDBM 。 它是一个具有磁盘持久性的免费(Apache 2)键值存储。 简单的API和高性能
Postgres或HSQLDB ,甚至可能是H2数据库
db4o是相当便宜和快速的,但它只能用于java或.net
火鸟是你最好的朋友。