欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
Berkeley DB
第91行: | 第91行: | ||
* Remove items | * Remove items | ||
* Close the database | * Close the database | ||
− | + | ==数据库操作== | |
+ | Databases and Related Methods Description | ||
+ | *db_create Create a database handle | ||
+ | *DB->associate Associate a secondary index | ||
+ | *DB->close Close a database | ||
+ | *DB->cursor Create a cursor handle | ||
+ | *DB->del Delete items from a database | ||
+ | *DB->err Error message with error string | ||
+ | *DB->errx Error message | ||
+ | *DB->fd Return a file descriptor from a database | ||
+ | *DB->get Get items from a database | ||
+ | *DB->get_byteswapped Return if the underlying database is in host order | ||
+ | *DB->get_env Return a handle for the underlying database environment | ||
+ | *DB->get_type Return the database type | ||
+ | *DB->join Perform a database join on cursors | ||
+ | *DB->key_range Return estimate of key location | ||
+ | *DB->open Open a database | ||
+ | *DB->pget Get items from a database | ||
+ | *DB->put Store items into a database | ||
+ | *DB->remove Remove a database | ||
+ | *DB->rename Rename a database | ||
+ | *DB->set_alloc Set local space allocation functions | ||
+ | *DB->set_append_recno Set record append callback | ||
+ | *DB->set_bt_compare Set a Btree comparison function | ||
+ | *DB->set_bt_minkey Set the minimum number of keys per Btree page | ||
+ | *DB->set_bt_prefix Set a Btree prefix comparison function | ||
+ | *DB->set_cachesize Set the database cache size | ||
+ | *DB->set_dup_compare Set a duplicate comparison function | ||
+ | *DB->set_encrypt Set the database cryptographic key | ||
+ | *DB->set_errcall Set error message callback | ||
+ | *DB->set_errfile Set error message FILE | ||
+ | *DB->set_errpfx Set error message prefix | ||
+ | *DB->set_feedback Set feedback callback | ||
+ | *DB->set_flags General database configuration | ||
+ | *DB->set_h_ffactor Set the Hash table density | ||
+ | *DB->set_h_hash Set a hashing function | ||
+ | *DB->set_h_nelem Set the Hash table size | ||
+ | *DB->set_lorder Set the database byte order | ||
+ | *DB->set_pagesize Set the underlying database page size | ||
+ | *DB->set_paniccall Set panic callback | ||
+ | *DB->set_q_extentsize Set Queue database extent size | ||
+ | *DB->set_re_delim Set the variable-length record delimiter | ||
+ | *DB->set_re_len Set the fixed-length record length | ||
+ | *DB->set_re_pad Set the fixed-length record pad byte | ||
+ | *DB->set_re_source Set the backing Recno text file | ||
+ | *DB->stat Return database statistics | ||
+ | *DB->sync Flush a database to stable storage | ||
+ | *DB->truncate Empty a database | ||
+ | *DB->upgrade Upgrade a database | ||
+ | *DB->verify Verify/salvage a database | ||
==安装 Berkeley DB 4.4.20== | ==安装 Berkeley DB 4.4.20== | ||
2007年1月30日 (二) 23:42的版本
目录 |
Berkeley DB 概述
Berkeley DB是由美国Sleepycat Software公司开发的一套开放源码的嵌入式数据库的程序库(database library),它为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。Berkeley DB为数据的存取和管理提供了一组简洁的函数调用API接口。
数据库巨人Oracle在2006年2月14日宣布已经收购 Sleepycat,并将BerkeleyDB数据库纳入了自己的嵌入式数据库产品线。
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.
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
数据库操作
Databases and Related Methods Description
- db_create Create a database handle
- DB->associate Associate a secondary index
- DB->close Close a database
- DB->cursor Create a cursor handle
- DB->del Delete items from a database
- DB->err Error message with error string
- DB->errx Error message
- DB->fd Return a file descriptor from a database
- DB->get Get items from a database
- DB->get_byteswapped Return if the underlying database is in host order
- DB->get_env Return a handle for the underlying database environment
- DB->get_type Return the database type
- DB->join Perform a database join on cursors
- DB->key_range Return estimate of key location
- DB->open Open a database
- DB->pget Get items from a database
- DB->put Store items into a database
- DB->remove Remove a database
- DB->rename Rename a database
- DB->set_alloc Set local space allocation functions
- DB->set_append_recno Set record append callback
- DB->set_bt_compare Set a Btree comparison function
- DB->set_bt_minkey Set the minimum number of keys per Btree page
- DB->set_bt_prefix Set a Btree prefix comparison function
- DB->set_cachesize Set the database cache size
- DB->set_dup_compare Set a duplicate comparison function
- DB->set_encrypt Set the database cryptographic key
- DB->set_errcall Set error message callback
- DB->set_errfile Set error message FILE
- DB->set_errpfx Set error message prefix
- DB->set_feedback Set feedback callback
- DB->set_flags General database configuration
- DB->set_h_ffactor Set the Hash table density
- DB->set_h_hash Set a hashing function
- DB->set_h_nelem Set the Hash table size
- DB->set_lorder Set the database byte order
- DB->set_pagesize Set the underlying database page size
- DB->set_paniccall Set panic callback
- DB->set_q_extentsize Set Queue database extent size
- DB->set_re_delim Set the variable-length record delimiter
- DB->set_re_len Set the fixed-length record length
- DB->set_re_pad Set the fixed-length record pad byte
- DB->set_re_source Set the backing Recno text file
- DB->stat Return database statistics
- DB->sync Flush a database to stable storage
- DB->truncate Empty a database
- DB->upgrade Upgrade a database
- DB->verify Verify/salvage a database
安装 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环境下安装
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 :)
- 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 ...