找回密码
 FreeOZ用户注册
查看: 2547|回复: 2

[新技术交流] Oracle Berkeley DB 支持SQL啦!

[复制链接]
发表于 24-3-2010 23:14:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
Oracle Berkeley DB将于2010年3月底发布最新版本Oracle Berkeley DB 11g release 2,具体版本号为 11.2.5.0.xx (xx代表具体的patch版本号)。
除了对原有Oracle Berkeley DB的功能进行了一定的改进和增强(比如提升了数据压缩功能、性能优化、C/C++中系统资源自动管理功能等等),本次发布的版本中最引人瞩目的变化是我们引入了一个有用的新特性——Oracle Berkeley DB SQL,简称BDBSQL。这是自Berkeley DB诞生20多年来第一次支持SQL接口。这无论是对开源社区,还是对嵌入式数据库行业来说,都将是一件喜事。在此也感谢整个Oracle Berkeley DB 研发团队的努力工作和大家的不断支持。

新的版本,新增的BDBSQL接口,值得期待。

                               
登录/注册后可看大图


Oracle Berkeley DB SQL接口简介

从Oracle Berkeley DB (简称BDB)诞生以来,它一直扮演着一个嵌入式、提供API调用的、高性能、非关系型的数据库引擎的角色, 被广泛应用于存储、金融、互联网、电子商务、汽车、消费电子、航空及国防等领域。简言之,它是一个1M大小的C语言类库,提供了基于键/值对(key/value pair)形式的并发和事务操作的API给C/C++/Java/C#/PHP等编程语言调用。由于BDB灵活高效的特点,它特别适合一些大数据量的、或者任务密集型的、或者硬件资源受限而性能要求高的嵌入式、跨平台等等的应用需求。
但我们发现,在很多场合对于关系数据库和SQL的需求是大量存在的。在 “edge”(如消费电子)或者一些大型的企业应用(如ERP)中,一个即时高效、并发的,支持SQL的、本地化嵌入式数据库通常是首选。因此,从 Oracle Berkeley DB 11g release 2开始,我们在保留原有基于key/value操作的API的同时,新增加了BDBSQL接口,实现了对SQL的支持。
BDBSQL完全兼容SQLite(著名的嵌入式开源关系数据库)原有的编程接口。以往运行在SQLite上的程序和应用都可以无缝的、方便的迁移到 Oracle Berkeley DB这个更加强大的引擎。并且,Oracle Berkeley DB和SQLite还将进行长期的官方层面的合作,保证了Oracle Berkeley DB的SQL接口和SQLite保持一致,免除了用户的后顾之忧。此外,Berkeley DB SQL完美支持很多第三方的SQLite工具,如JDBC,ODBC,FireFox 3及其SQLite Manager 插件等。
就具体实现来说,在BDBSQL中,我们将原SQLite的底层存储引擎替换为Berkeley DB的数据库引擎。如下图所示:


从上面的BDBSQL实现图可以看到,Oracle Berkeley DB引入了SQLite的SQL层:包括用户接口(sqlite3(), ODBC, JDBC等)和SQL语言处理层(Tokenizer、Parser及Generator),而底层引擎(虚拟机)则使用了BDB的存储引擎。从而,将原来SQLite基于数据库级别的并发提升一个级别 - 至BDB的基于页(Page)级别的并发,并可以利用BDB的更好的内存管理、数据和事务恢复功能、更多的扩展(如Berkeley DB的db_hotbackup、db_stat、db_archive等一系列命令行工具)。

Oracle Berkeley DB 11g release 2在主流平台经过了严格的、多重的测试和认证(每个平台涵盖以十万计的测试案例),测试平台包括Solaris、*nix、Windows系列(XP, 7, Mobile)、Android 2.0(及以上)、VxWorks等等。此外,我们还提供了大量工具和资料帮助用户熟悉这套最新接口。随版本一起发布的,包括SQLite到Oracle Berkeley DB数据迁移指南、JDBC/ODBC使用指南、全文检索(Full Text Search)向导、空间数据库(R*Tree)向导、Android平台上使用向导、数据库使用手册及调优向导、数据管理员手册、测试集、代码示例等完善的资料,进一步帮助用户放心地来使用我们的产品。了解更多SQLite的语法、API、命令行等帮助,还可以参考SQLite.org上的文档。
总结一下: BDBSQL接口是一个1M大小的C语言类库,是一个高效并发的嵌入式数据库。它支持in-memory cache选项,某些场合可作为内存数据库的一个替代方案。它支持C/C++/Java/PHP等语言接口和通过JDBC/ODBC等驱动程序访问。它运行于Unix/POSIX、Windows家族、VxWorks、QNX、Android等平台。和SQLite一样,它支持SQL92标准。

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等一系列命令行工具来备份,监控,升级等。另外,您还可以联系Oracle寻求支持。

总体而言,我们有充分理由相信Oracle Berkeley DB SQL将会比SQLite更快,更稳定。同时,我们也将会提供更好的支持服务。
BDBSQL接口和BDB key/value接口的比较

我们举个例子说明这两套API在开发上的区别。
假设有一个employee的BDB数据库(注:一个BDB的数据库,即相当于关系型数据库中的一张二维表),我们定义其主键字段为:key{empId, email},定义其value包含字段:value{empName, sex, age, startDate, status}。相应的,对应于Oracle 关系型数据库的表结构为:

TABLE: employee {
empId PRIMARY KEY,
email PRIMARY KEY,
empName,
sex,
age,
startDate,
status
}
接下来,对于数据库的操作,在BDB的语法大致为:
- 要插入一条记录,employeeDatabase.put(key{1000, john.smith@foo.com}, value{'John Smith', 'male', 30, 2005-01-01, 'OK'});
- 随后,如果要更新上面那条记录:employeeDatabase.put(key{1000, john.smith@foo.com}, value{'John Smith', 'male', 60, 2005-01-01, 'Retired'});
- 如果删除该条记录,则:employeeDatabase.delete(key{1000, john.smith@foo.com}); // 此处只需要提供key即可
- 查询记录:employeeDatabase.get(key{1000, john.smith@foo.com}); // 此处只需要提供key即可
在BDBSQL中,上面的增删改操作都可以通过标准的SQL语言来进行。如更新一条记录,可写成:
update employee set age=60, status='Retired' where empId=1000 and email='john.smith@foo.com';
总结

最后,需要强调的是,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 11g release 2将于2010年3月底发布。Oracle Berkeley DB整个产品家族继续以开源形式发布,并对开源社区提供支持。更多关于Oracle Berkeley DB 11g release 2的新功能和特性,请关注我们的官方网站(http://www.oracle.com/database/berkeley-db/index.html)或者本博客的后续文章。
请至官方网站下载最新版本的Oracle Berkeley DB数据库系列产品,包括Oracle Berkeley DB (及SQL),Oracle Berkeley DB Java版和Oracle Berkeley DB XML数据库。

更多需求和反馈,欢迎留言或者给我发邮件:chao.huang[at]oracle.com。



评分

参与人数 1威望 +20 收起 理由
procoder + 20 谢谢分享!

查看全部评分

回复  

使用道具 举报

发表于 2-4-2010 01:49:08 | 显示全部楼层

回复 #1 coredump 的帖子

呵呵,很早以前用bdb的时候就觉得他是一个二叉树的文件而已,比读写文件好点,没有关系数据库复杂,一般在一些嵌入式或者小型应用里面使用;不过在业界,相对于关系数据库以及memcache技术,最近NoSQL 也比较流行,楼主可以看看,呵呵~

评分

参与人数 1威望 +30 收起 理由
coredump + 30 谢谢分享!

查看全部评分

回复  

使用道具 举报

发表于 18-5-2010 09:29:05 | 显示全部楼层
很好很强大
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 17-4-2024 07:25 , Processed in 0.040469 second(s), 22 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表