Berkeley DB 简简介

Posted by zhangxiaojian on October 31, 2014

完成了关于Berkeley DB 整体介绍的PPT,弄懂了其中product的区别,仅用于大概了解,没有具体说怎么用。

发展历史

  • 1991年,Berkeley DB的第一个版本发行(Linux系统也在这一年诞生),其最初的开发目的是以新的HASH访问算法来代替旧的hsearch函数和大量的Dbm库。

  • 1992年,BSD UNIX第4.4发行版中包含了Berkeley DB 1.85版。基本上认为这是Berkeley DB的第一个正式版本。

  • 1996年,Sleepycat软件公司成立,提供对Berkeley DB的商业支持。

  • 2006年,Sleepycat被Oracle收购,当时最新版本是4.7.25。

概述

  • Berkeley DB是一款嵌入式开源数据库,它为应用程序提供可扩展的,高性能的,事务保护的数据管理服务。

bdb1

Berkeley DB为应用程序提供简洁的函数API调用,并且运行在应用程序的地址空间中(左图)。而不是与数据库进行通信(右图)。

  • Berkeley DB本身非常精简,代码大小在300 KB左右。但确能够管理高达256 TB的数据库文件。(实际使用中受到操作系统最大文件的限制)

  • Berkeley DB支持高并发访问,成千上万个用户可同时操纵同一个数据库。能以足够小的空间占用量运行于有严格约束的嵌入式系统,也可以在高端服务器上耗用若干GB的内存和若干TB的磁盘空间

  • Berkeley DB 几乎可以运行在所有的Unix,Linux,Windows和一些嵌入式实时操作系统平台上。它已经成功部署到很多网络服务器,桌面应用程序,掌上电脑,机顶盒中。

存储形式

  • Berkeley DB 是一款NoSQL数据库,采用key-value的键值存储结构。其中key用来查找,value存储序列化之后的数据。数据可以是任何复杂的类型。

bdb2

  • Berkeley DB的数据以OS的文件形式存放在磁盘上。

  • 如果需要以某个属性值(如上例姓名)查找key-value, Berkeley DB支持自动更新的索引机制。

系统结构

其中包含五个子系统:

bdb3

  • 存取管理为适应不同应用程序的需求,提供了四种不同类型的存储结构。分别是Btrees,Hash,Queue,Recno。

  • 应用程序可以从中选择最适合的文件组织结构。程序员创建表时可以使用任意一种结构,并且可以在同一个应用程序中对不同存储类型的文件进行混合操作。

  • 那么如何进行选择呢?

bdb4

  • 缓冲池提供了系统对数据页的快速访问,管理与缓冲区内存相关的I/O操作,将缓冲的脏数据页被写回磁盘,并且在需要的时候申请新的数据页。

  • 事务和日志子系统为多个数据库操作提供原子性和可恢复性。保证事务原子执行和可回滚的,而且遇到系统故障时,数据是可恢复的。

  • 锁子系统用于数据库的并发访问,保证数据的一致性,允许数据项在同一时间有多个读操作但只有一个写操作。

  • 上述子系统提供了和企业级数据库相媲美的ACID特性,并且是可配置的,可以只使用某个子系统特性

产品体系

  • Berkeley DB 包含三种不同的衍生产品,其中最为传统的Berkeley DB通过配置前述子系统,又可以分为四种类型的产品:

bdb5

  • Oracle Berkeley DB 是用c语言完成的库,是最早的Berkeley DB,支持前面所述的特性架构。并且支持丰富的语言接口:C/C++, Java , C# .NET, Perl and Python等等

  • ¨Berkeley DB Java Edition 是使用纯Java开发的库,包含了传统Berkeley DB 的很多特性,也有自己的不同之处。支持Java API,但不像Oracle Berkeley DB仅仅是一个语言接口。

  • ¨Berkeley DB XML 最大的特性是将数据以XML 文件的形式存储。用C++语言开发,同样支持很多语言接口:C++, Java , Perl and Python

体系结构图:

bdb6

关于上图第三层的四种product的支持特性表:

**哈哈** **Data Store** **Concurrent** **Transactional** **High Availability**
描述 提供带索引的,单线程/进程读写操作的嵌入式数据存储。 加入锁子系统,提供多线程/多进程读写操作。(多个同时读,只有一个写) 提供完整的ACID支持,并且数据可以恢复。 支持数据在多个物理机上的同步复制。
恢复操作 N N Y Y
锁特性 N Y Y Y
并发读写 N Y Y Y
事务支持 N N Y Y
SQL API N N Y N
复制支持 N N N Y

参考:

http://en.wikipedia.org/wiki/Berkeley_DB

http://docs.oracle.com/cd/E17076_04/html/programmer_reference/index.html

http://blog.sina.com.cn/s/blog_502c8cc40100yqkj.html