数据库服务器-Berkeley DB
2010-01-17 10:56:12 阿炯

Berkeley DB(BDB)是一个高性能的,嵌入数据库编程库,支持C,Perl以及其他很多语言的编程接口。Berkeley DB可以保存任意类型的键/值对 (Key/Value Pair),而且可以为一个键保存多个数据。Berkeley DB可以支持数千的并发线程同时操作数据库,支持最大256TB的数据,广泛用于各种操作系统包括大多数Unix类操作系统和Windows操作系统以及实时操作系统。

Berkeley DB以Sleepycat Public License发布(该授权条款为OSI及FSF所认可的条款)。发布时包括了完整的代码、编译工具、测试包,以及说明文件。由于良好的代码的质量以及工具程序,Berkeley DB常被其他开放源代码软件所使用。对于不想使用Sleepycat Public License的开发团体,甲骨文公司也提供了其他付费的授权方式。2.0或以上版本的Berkeley DB使用双重授权;而2.0版本以下的则使用BSD特许条款,可自由作商业用途。Oracle 将 Berkeley DB 许可证在2013年年中更改为 AGPL(下文有详述)。

Berkeley DB不支持SQL或者其他的数据库查询语言,不支持表结构和数据列(但新版本里加入了对sql语言的支持)。访问数据库的程序自主决定数据如何储存在记录里,Berkeley DB不对记录里的数据进行任何包装。记录和它的键都可以达到4G字节的长度。尽管架构很简单,却支持很多高级的数据库特性,比如ACID 数据库事务处理、细粒度锁、XA接口、热备份以及同步复制。

加入SQL支持

2010年3月官方发布通告称将于2010年3月底正式发布最新版本Oracle Berkeley DB 11g release 2。除了对原有Oracle Berkeley DB的功能进行了一定的改进和增强(比如提升了数据压缩功能、性能优化、C/C++中系统资源自动管理功能等等),本次发布的版本中最引人瞩目的变化是引 入了对SQL92的支持,这一新增的接口称为Oracle Berkeley DB SQL,简称BDBSQL。这是自Berkeley DB诞生20多年来第一次支持SQL接口。这无论是对开源社区,还是对嵌入式数据库行业来说,都将是一件喜事。

Oracle Berkeley DB SQL接口简介

从Oracle Berkeley DB (简称BDB)诞生以来,它一直扮演着一个嵌入式、提供API调用的、高性能、非关系型的数据库引擎的角色,提供了基于键/值对(key/value pair)形式的并发和事务操作的API给C/C++/Java/C#/PHP等编程语言调用。由于BDB灵活高效的特点,它特别适合一些大数据量的、或者任务密集型的、或者硬件资源受限而性能要求高的嵌入式、跨平台等等的应用需求,并被广泛应用于存储、金融、互联网、电子商务、汽车、消费电子、航空及国防等领域。但在很多场合中,用户渴望有一个即时高效、并发的,支持SQL的、本地化嵌入式数据 库。如在 edge(如消费电子)或者一些大型的企业应用(如ERP)中。因此Oracle Berkeley DB 从11g release 2开始,在保留原有基于key/value操作的API的同时,新增加了BDBSQL接口,实现了对SQL的支持。

BDBSQL接口是一个1M大小的C语言类库,实现了一个高效并发的嵌入式数据库。它支持in-memory cache选项,某些场合可作为内存数据库的一个替代方案。它支持C/C++/Java/PHP等语言接口和通过JDBC/ODBC等驱动程序访问,可以运行于Unix/POSIX、Windows家族、VxWorks、QNX、Android等平台。和SQLite一样,BDBSQL支持SQL92标准,并完全兼容SQLite(著名的嵌入式开源关系数据库)原有的编程接口。以往运行在SQLite上的程序和应用都可以无缝的、方便的迁移 到 Oracle Berkeley DB这个更加强大的引擎。并且Oracle Berkeley DB和SQLite还将进行长期的官方层面的合作,保证了Oracle Berkeley DB的SQL接口和SQLite保持一致,免除了用户的后顾之忧。此外,Berkeley DB SQL完美支持很多第三方的SQLite工具,如JDBC、ODBC、FireFox 3及其SQLite Manager 插件等。

Oracle Berkeley DB 11g release 2在主流平台经过了严格的、多重的测试和认证(每个平台涵盖以十万计测试案例),测试平台包括Solaris、*nix、Windows系列(XP, 7, Mobile)、Android 2.0(及以上)、VxWorks等等。此外,新版本还提供了大量工具和资料帮助用户熟悉这套最新接口,包括SQLite到Oracle Berkeley DB数据迁移指南、JDBC/ODBC使用指南、数据库使用手册及调优向导、数据管理员手册、测试集、代码示例等完善的资料,进一步帮助用户熟悉和使用新版本。

Berkeley DB SQL和SQLite使用上的区别

a) 对于用户和开发人员来说,这两个产品在使用接口上是没有区别的。它们在SQL语法、API、命令行交互、 PRAGAMAs 等方面都是一致的。在性能方面,由于SQLite提供的是数据库级别的锁,而Berkeley DB SQL是页(Page)级别的锁,因此后者在绝大多数情况下能提供更高的效率 (如Insert, Update, Delete, 并发操作等)。但由于BDBSQL提供的细粒度锁的机制,它又会带来一些额外的开销,一些极端的测试用例下会比SQLite慢上少许(但不明显)。

b) 对于已有的SQLite应用程序和工具而已,由于这两者在调用接口都是一致的,因而都可以无缝支持。

c) 对于DBA人员来说,除了可以继续使用SQLite原来的管理工具,还可以使用BDB提供的 db_hotbackup、db_stat、db_archive等一系列命令行工具来备份,监控,升级等。

小结

最后需要强调的是,BDBSQL是作为对BDB已有功能的一个补充而不是替代。它只是本次BDB发布产品的一个新特性,并且将会像Hash、Queue、集群等功能一样持续下去。它的出现在一定程度上更丰富了BDB的应用场景。用户可以根据自己的需要,选择适合的BDB接口:
* 当用户需要非常高的性能,管理非关系型数据,或者以Queue、Hash等方式来组织和访问数据的时候,可以继续选择 Oracle Berkeley DB的既有key/value API。如大型企业系统中单点登录、消息队列、工作流等模块,如管理XML、声音、照片、视频等场合,如SOA中的BAM模块、业务规则引擎,如云计算或 者云存储节点上,等等。

* 而在用户需要一个本地持久化的支持SQL的嵌入式数据库时,BDBSQL将成为优先的选择。比如,手机的通讯录、个人web站点、桌面端的应用(如股票软 件、浏览器客户端的缓存和存储)及开发工具(如IDE)、中小企业的数据库系统、企业实时系统的一些缓存模块、小型的关系型内存数据库等等。

Oracle Berkeley DB整个产品家族继续以开源形式发布,并对开源社区提供支持。更多关于其新功能和特性,请关注我们的官方网站,或者BDB中国研发团队的官方博客


许可证更改为 AGPL

Oracle 在2013年6月发布的 Berkeley DB 新版本 6.0/12c 已经悄悄的将许可证协议更改为 AGPL。Berkeley DB 在 2.0 版本以下使用的是 BSD 许可证,2.0 以后改用一种名为 Sleepycat Public 的许可证,该许可证类似 GPL

Berkeley DB 6.0/12c 的改进记录请看官方发行说明,最值得关注的就是将许可证换成 AGPL。

AGPL 许可证也是一种强 copyleft 许可证,与 GPL 不同的是,AGPL 要求你修改的版本必须为所有通过计算机网络远程交互的用户提供完整源码。这对使用 Berkeley DB 作为本地存储的 Web 开发者来说变化非常显著。因为以前只要不重新分发他们的应用,就不需要担心许可证的问题。但现在的 AGPL 条款规定应用只要接受来自网络的访问,就必须提供源码。为了遵循 AGPL 许可证,Berkeley DB 用户必须确保他们整个应用都是 AGPL 兼容的,也就是说整个应用都必须开源,包括所有的组件,至少是 GPLv3 或者是 AGPL。

Oracle 没有给出任何关于修改许可证为 AGPL 的原因,要避免该许可证的限制,你可以考虑从 Oracle 购买商业许可。关于AGPL的使用,理解举例如下:Google DIY了自己的服务器,hack了Linux内核,Google通过这些服务器提供服务,而没有对外发布自己hack的内核,这是不违反GPL的,但确实违反AGPL的(如果Linux内核是AGPL协议)。如果这些产品是AGPL授权的话,那基于此开发的应该确实是需要开源了。真是这样的话,估计有人会fork以前的BSD版。另外PHP从5.3.0开始自己实现了MySQL驱动mysqlnd,不再采用MySQL官方的libmysql,避免了以后MySQL修改授权协议时引起的版权问题。


主要版本
Berkeley DB:支持常见的操作系统中,例如大多数的UNIX和Windows系统,以及实时操作系统。Berkeley DB 还拥有对一些老的UNIX数据库,例如dbm, ndbm und hsearch的兼容接口。

Berkeley DB XML:是一个接口,通过它可以实现对XML数据存贮的支持。对XML数据的访问,会使用相应的查询语句如Xquery, Xpath。

Berkeley DB Java Edition:在Java平台上,Oracle提供一个纯Java程序编写的Berkeley DB,只需要操作系统支持Java虚拟机便可运行。

关于其更多介绍可参考《BerkeleyDB简介》。


最新版本:6.2


项目主页:http://www.oracle.com/us/products/database/berkeley-db/overview/
中文参考:http://www.bdbchina.com/category/berkeley-db/
该文章最后由 阿炯 于 2023-12-04 15:07:58 更新,目前是第 2 版。