Berkeley DB

来自开放百科 - 灰狐
跳转到: 导航, 搜索
“小咪”和“汪汪”
Sleepycat.jpg

目录

Berkeley DB 概述

Berkeley DB是由美国Sleepycat Software公司开发的一套开放源码的嵌入式数据库的程序库(database library),它为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。Berkeley DB为数据的存取和管理提供了一组简洁的函数调用API接口。

全文>>>

数据库巨人Oracle在2006年2月14日宣布已经收购 Sleepycat,并将BerkeleyDB数据库纳入了自己的嵌入式数据库产品线。 需要注意的是,Berkeley DB尽管是开源的、对个人应用是免费的,但是其商用许可证费用是相当可观的。

Berkeley DB 不是

  • 不是关系型数据库
  • 不是面向对象数据库
  • 不是网络数据库
  • 不是数据库服务器

Berkeley DB 支持的操作

BDB只支持对记录所做的几种逻辑操作:

  • Insert a record in a table.
  • Delete a record from a table.
  • Find a record in a table by looking up its key.
  • Update a record that has already been found.
Wikipedia-35x35.png 您可以在Wikipedia上了解到此条目的英文信息 Berkeley DB Thanks, Wikipedia.

核心子系统

Berkeley DB library
  • Access Methods
  • Memory Pool
  • Transaction
  • Locking
  • Logging

BDB提供的核心服务

  • Page cache management
  • Transactions and logging
  • Locking

Berkeley DB 数据库的优缺点

Sleepycat软件公司出品的Berkeley DB是一种在特定的数据管理应用程序中广泛使用的数据库系统,在世界范围内有超过两亿的用户支持.许多世界知名的厂商,像Amazon, AOL, British Telecom, Cisco Systems, EMC, Ericsson, Google, Hitachi, HP, Motorola, RSA Security, Sun Microsystems, TIBCO 以及 Veritas都依赖于BDB为他们的许多关键性应用提供快速的,弹性的,可靠的,并且高性价比的数据管理.

2.以下是chinaunix.net上一位高手给出的解释,在这里引用一下。

  • mysql就是用BDB实现的(mysql的后台) 。mysql快,BDB比mysql还要快N倍。
  • BDB并发高于RDBMS。
  • 容量支持可达256TB。
  • 基于HASH支持select数据比RDBMS快。

3.BDB数据库与其它的几种数据库的比较。 BDB数据库不同与其他几种数据库–关系型(Relational databases),面向对象型(Object-oriented databases),网络数据库(Network databases),它是一种嵌入式(embeded databases)数据库。

下面先简要说说BDB与其它几种数据库的区别: (1)它们几乎都无一例外的采用了结构化查询语言(SQL),而BDB没有。 (2)它们几乎都无一例外的采用了客户/服务器模型,而BDB采用的是嵌入式模型。

4. 下面是在网上找的一些有关BDB的资料,解释了BDB之所以会和当前流行的大多数数据库不同的一些原因,所引资料未注明出处,后面的翻译是我自己加的:

(1) BDB是一个开放源代码的嵌入式数据库的函数库,它为应用程序提供弹性的,高性能的,transaction-protected的数据库管理服务,BDB为数据的访问和管理提供了简单的应用程序接口API。

(2) BDB之所以是嵌入式数据库是因为它是直接连到应用程序中的。它和应用程序在同一内存空间运行。其结果是,不管应用程序是运行在同一台机器上还是运行在网络上,在进行数据库操作时,它都无需进行进程间通信。BDB为许多编程语言提供了函数接口,这些语言包括C, C++, Java, Perl, Tcl, Python, 和 PHP。所有的数据库操作都发生在函数库内部。多个进程,或者是一个进程中的多个线程,都可以同时使用BDB,因为它们实际是在调用BDB函数库。一些像 locking, transaction logging, shared buffer management, memory management等等之类的低级服务都可以由函数库透明地处理。

(3) BDB函数库是高度可移植的。它可以运行在几乎所有的UNIX和LINUX系统之上,也支持WINDOWS和多种嵌入式实时操作系统。它既可以运行在32位系统上,也可以运行在64位系统上。它活跃在高端服务器,桌面系统,掌上电脑,set-top boxes,网络交换机以及其它的一些领域。一旦BDB被连接到应用当中以后,终端用户一般是不知道后端数据库的存在的。

(4) BDB在许多方面都是弹性的。函数库本身非常紧凑(在常见的机器体系上大约只占用不到300K的text空间,但是它可以操作多达 256TB的数据。它也支持高强度的并发操作,可以同时允许数以千计的用户在同一个数据库进行操作。在高端服务器领域,BDB是足够小的,它可以在高度受限的嵌入式系统上运行,但却可以利用高达GB量级的内存空间和高达TB量级的磁盘空间。

(5) BDB在嵌入式应用方面的性能比关系型数据库和面向对象的数据库优越的原因是多方面的。首先,因为函数库和应用是运行在同一地址空间中的,省掉了数据库操作时的进程间通信。而众所周知,不管是在单机上还是在分布式系统上,进程间通信所花的时间远多于函数调用所要的时间。其次,因为BDB 对所有的操作提供了简洁的函数调用接口,无需对查询语言进行解析,也不需要预执行。

(6) 与其他大多数数据库系统相比,BDB提供了相对简单的数据访问服务。BDB只支持对记录所做的几种逻辑操作。它们是:

  • 在表中插入一条记录。
  • 从表中删除一条记录。
  • 通过查询键(key)从表中查找一条记录。
  • 更新表中已有的一条记录。

BDB不是一个独立的数据库服务器。它是一个函数库,和调用它的应用程序是运行在同一地址空间中的。可以把BDB作为数据库管理系统来构建服务器程序。比如,有许多商业的和开源的轻量级目录访问协议(LDAP)服务器都使用BDB存储记录。LDAP客户端通过网络连接到服务器。服务器调用 BDB的API来查找记录并返回给客户。而在它本身而言,BDB却不是数据库的服务器端。 所以,BDB是一种完全不同于其它数据库管理系统的数据库,而且它也不是一个数据库服务器端。

当面对的是对性能,规模和可靠性要求都比较高的嵌入式应用的时候,BDB是理想的数据库管理系统。但对于要求多种不同服务的应用而言,选择它是不适当的。

BDB 的初衷是提供快速的,可靠的,transaction-protected的记录存储。函数库本身并没有提供对交互查询的支持,也没有提供图形化的报表工具,或者一些其它的数据库管理系统提供的服务。我们一直在致力于保持函数库的短小和简练,这样做,可以使得bug出现的机会大大减小,而且因为只有很少的代码需要执行,我们可以保证数据库一直快速的运行。如果你的应用正好需要的是这样的一套功能的话,那么BDB几乎一定是你的首选对象。

5.我个人的观点 BDB之所以适合LDAP,一个关键的因素是它可以保证LDAP的快速响应.因为BDB本身是一种嵌入式的数据库,速度快是它最大的特点,也是它和其他数据库系统相比最大的优势.我们再来看LDAP,LDAP是一种一旦数据建立就很少需要改动的数据库,并且它最常用的操作是读取,查询,搜索等等不改变数据库内容的操作.而让BDB来做这几种事情无疑是最好的选择.这样,即使在有大量用户提交数据库查询的情况下,LDAP仍能快速反馈给用户有用信息.所以,速度的考虑是LDAP选用BDB的最大因素.这也是目前绝大多数的LDAP服务器都选用BDB的根本原因.

(来源: http://www.nowboy.com/main/archives/52)

Sleepycat产品

Sleepycat Software licenses four different products that use the Berkeley DB technology. Each product offers a distinct level of database support.

  • Berkeley DB Data Store
  • Berkeley DB Concurrent Data Store
  • Berkeley DB Transactional Data Store
  • Berkeley DB High Availability // Google Accounts uses Berkeley DB HA

程序员

程序概念

  • Key/data pairs
  • Object handles
  • Error returns

数据库应用

  • Create a simple database
  • Store items
  • Retrieve items
  • Remove items
  • Close the database

数据库与方法

Berkeley DB and Related Methods

数据库环境与方法

A Berkeley DB environment is an encapsulation of one or more databases, log files and region files. Region files are the shared memory areas that contain information about the database environment such as memory pool cache pages. Only databases are byte-order independent and only database files can be moved between machines of different byte orders. Log files can be moved between machines of the same byte order. Region files are usually unique to a specific machine and potentially to a specific operating system release.

Berkeley DB Environments and Related Methods

Programmatic APIs

  • C
#include <db.h>
  • C++
#include <db_cxx.h>
  • Java
  • Dbm/Ndbm, Hsearch

Berkeley DB supports the standard UNIX dbm, ndbm, and hsearch interfaces.

Berkeley DB APIs

Scripting languages

安装 Berkeley DB 4.4.20

Windows环境下安装

会自动加上环境变量并生成 dbvars.bat文件

CLASSPATH:
C:\DB-4.4.20\jar\debug\db.jar;C:\DB-4.4.20\jar\debug\dbexamples.jar;
C:\DB-4.4.20\jar\db.jar;C:\DB-4.4.20\jar\dbexamples.jar;%CLASSPATH%
PATH:
C:\DB-4.4.20\bin;C:\DB-4.4.20\bin\debug;%PATH%

Linux环境下安装

Debian用户

#apt-get install libdb4.3 - Berkeley v4.3 Database Libraries [runtime]
#apt-get install libdb4.3++ - Berkeley v4.3 Database Libraries for C++ [runtime]
#apt-get install libdb4.3++-dev - Berkeley v4.3 Database Libraries for C++ [development]
#apt-get install libdb4.3-dev - Berkeley v4.3 Database Libraries [development]

install on debian & redhat

http://www.sleepycat.com/docs/ref/build_unix/intro.html

cd build_unix
../dist/configure
$ make
# make install
install to /usr/local/BerkeleyDB.4.4

OK :)

  1. make install // install infomation
Installing DB include files: /usr/local/BerkeleyDB.4.4/include ...
Installing DB library: /usr/local/BerkeleyDB.4.4/lib ...
cp -p .libs/libdb-4.4.so /usr/local/BerkeleyDB.4.4/lib/libdb-4.4.so
cp -p .libs/libdb-4.4.lai /usr/local/BerkeleyDB.4.4/lib/libdb-4.4.la
cp -p .libs/libdb-4.4.a /usr/local/BerkeleyDB.4.4/lib/libdb-4.4.a
ranlib /usr/local/BerkeleyDB.4.4/lib/libdb-4.4.a
chmod 644 /usr/local/BerkeleyDB.4.4/lib/libdb-4.4.a
cp -p libdb.a /usr/local/BerkeleyDB.4.4/lib/libdb.a
ranlib /usr/local/BerkeleyDB.4.4/lib/libdb.a
chmod 644 /usr/local/BerkeleyDB.4.4/lib/libdb.a
PATH="$PATH:/sbin" ldconfig -n /usr/local/BerkeleyDB.4.4/lib

Libraries have been installed in:

/usr/local/BerkeleyDB.4.4/lib

If you ever happen to want to link against installed librariesin a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following:

 - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
   during execution
 - add LIBDIR to the `LD_RUN_PATH' environment variable
   during linking
 - use the `-Wl,--rpath -Wl,LIBDIR' linker flag

See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages.

Installing DB utilities: /usr/local/BerkeleyDB.4.4/bin ...
cp -p .libs/db_archive /usr/local/BerkeleyDB.4.4/bin/db_archive
cp -p .libs/db_checkpoint /usr/local/BerkeleyDB.4.4/bin/db_checkpoint
cp -p .libs/db_deadlock /usr/local/BerkeleyDB.4.4/bin/db_deadlock
cp -p .libs/db_dump /usr/local/BerkeleyDB.4.4/bin/db_dump
cp -p .libs/db_hotbackup /usr/local/BerkeleyDB.4.4/bin/db_hotbackup
cp -p .libs/db_load /usr/local/BerkeleyDB.4.4/bin/db_load
cp -p .libs/db_printlog /usr/local/BerkeleyDB.4.4/bin/db_printlog
cp -p .libs/db_recover /usr/local/BerkeleyDB.4.4/bin/db_recover
cp -p .libs/db_stat /usr/local/BerkeleyDB.4.4/bin/db_stat
cp -p .libs/db_upgrade /usr/local/BerkeleyDB.4.4/bin/db_upgrade
cp -p .libs/db_verify /usr/local/BerkeleyDB.4.4/bin/db_verify

Installing documentation: /usr/local/BerkeleyDB.4.4/docs ...

编译 Examples

cd build_unix
../dist/configure --enable-cxx
make excxx_example_database_load // 装载数据库 .txt -> .db
make excxx_example_database_read // 读数据库
cp excxx_example_database_load excxx_example_database_read ../examples_cxx/getting_started/
cd examples_cxx/getting_started/
./excxx_example_database_load
Database ./itemname.sdb is closed.
Database ./vendordb.db is closed.
Database ./inventorydb.db is closed.
./excxx_example_database_read

操作

  • 将文本装入数据库
awk -F: '{print $1; print $0}' < /etc/passwd |\ sed 's/\\/\\\\/g' | db_load -T -t hash passwd.db

Mac OS X

port search db5*
sudo port install db53

Windows下应用

Linux下应用

Solaris下应用

FreeBSD下应用

在线文档

Links

Comment-32x32.png

<discussion>characters_max=300</discussion>

分享您的观点
个人工具
名字空间

变换
操作
导航
工具箱