我正在寻找一个类似dbm的库,我可以使用它代替Berkeley DB,我目前正在使用它.我转换的主要原因是BDB的许可费用相当高(开源应用程序免费,但我的雇主不希望出于各种原因开源这个特定的应用程序).
我简要地看了一下qdbm,但看起来它不会满足我的需求 - 很多键(几百万)和大数据项(> 1-5兆字节).在我继续搜索之前,我想我会问,因为似乎有大量类似dbm的库.
http://sphia.org/一个Key/Value Store,用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,Public Domain,重新实现"ndbm"
http://repetae.net/computer/vsdb/用C编写,许可证未知,实验
https://github.com/stevedekorte/skipdb使用Skip-List索引在C,BSD许可,键值存储中编写
http://unqlite.org/ 用C/C++编写,嵌入式NoSQL数据库引擎,BSD许可,类似于SQLite.
http://hamsterdb.com/ 用C/C++编写,嵌入式NoSQL数据库引擎,Apache License 2.0.
Java的
https://github.com/dain/leveldb LevelDB的Java端口,Apache License 2.0
https://github.com/jingwei/krati以前的LinkedIn项目,Apache License 2.0
http://www.mapdb.org/嵌入式Java数据库,Apache License 2.0,支持键值存储,非常高效的对象序列化
https://github.com/OpenHFT/Chronicle-Map,LGPL v3,嵌入式纯Java键值存储,比Berkeley DB更快
https://github.com/jetbrains/xodus,Apache License 2.0,一个Java事务无模式嵌入式数据库,比Berkeley DB更快
https://github.com/lmdbjava/lmdbjava,LMDB的 JNI绑定,Apache License 2.0
你可以看东京内阁.它是qdbm/gdbm的继承者,如果你决定扩展它有一个很好的网络前端可用.
编辑:
另一个变种是京都内阁 ; 由同一个人开发,但据说更容易使用.
SQLite是公共域,意味着您可以将其用于任何目的,并且被广泛使用和支持.
您可以通过任何dbm(甚至是qdbm)获得更高的性能,并通过简单的间接级别改进并行性:只需获取密钥并对其进行哈希处理,并将其data_dir/H(key)/
用作存储这些密钥的数据库.将哈希输出限制为较小的值(比方说)255以获得最佳结果.
这种方法有很多好处,很容易总结:
概念简单
易于实施和测试
不锁定整个数据库以进行更新
可以支持更大的数据库
易于更换DBM组件
哈希可能甚至不需要加密安全; 大多数都是统一的 DJB的cdb哈希在大多数情况下运行良好.