Berkeley DB 安装
下载:
http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
解压:
tar -xvf
./
build_android
build_unix
build_vxworks
build_wince
build_windows
我的是linux,进入build_unix输入一下命令:
../dist/configure
make
make install
其它详情请参考:http://docs.oracle.com/cd/E17076_02/html/installation/build_unix.html#build_unix_sqlinter
Berkeley DB 基础
1、创建及打开DBENV:
env = bsddb.db.DBEnv()
env.open("./", bsddb.db.DB_CREATE|bsddb.db.DB_INIT_MPOOL)
bdb = bsddb.db.DB(env)
2、创建及打开DB:
bdb = bsddb.db.DB(env) # 注:可以不创建 DBENV 直接创建bdb:bdb = bsddb.db.DB()
bdb.open("./newsPub_uv.db", bsddb.db.DB_HASH, bsddb.db.DB_CREATE)
Berkeley DB 并行
概要:BDB本身不会区分一个游标或者操作是属于一个进程和多个进程。
Berkeley DB 提供单个写入/多个读取的支持;
说明:单个写入/多个读取 是指读和写不能同时存在,如果有一个写入(只能有一个写入)其他的读取就会被阻塞,如果有一个或多个读取就会阻塞其他的写入,有一个例外请看正文。
必须声明 DB_INIT_CDB 和 DB_INIT_MPOLL 标记;同时和 DB_INIT_LOCK、DB_INIT_TXT、DB_RECOVER 这些标记是互斥的。
单个写入/多个读取 是通过读锁 和 写锁实现的:
1、所有的游标(cursor)和 单独的 get 操作 会加一个读锁,cursor 会保持读锁直到游标关闭、get 只有执行期间保持读锁;
2、同时只能有一个游标(cursor)设置 DB_WRITECURSOR 标记,这个就是例外的情况,因为该游标能同时读/写 BDB,正常情况就是只能有一个线程或者进程能同时拥有读和写的操作权限,且该标记游标将会阻塞其他任何写的操作但不会阻塞读操作;
3、读锁不会阻塞读取游标和读取(get)操作,且其写操作(游标)只有在所有的读取游标关闭和读取操作结束后才会获取写锁;
4、如果一个 BDB 游标返回错误信息,则游标会自动关闭;
5、以上锁定都是针对adb( = DB(DBEnv))中的每一个open的DB对象,设置 DBEnv 的 DB_CDB_ALLDB 标记可以改变这种行为。
Berkeley DB 备份
db_hotbackup -v -d PATH_1 -h PATH_2 -b PATH_3
-v:输出详细信息
-d:源路径
-h:对应DBEnv的主目录
-b:备份路径
参考:
http://docs.oracle.com/cd/E17076_02/html/programmer_reference/cam.html#cam_intro
https://www.jcea.es/programacion/pybsddb_doc/4.8.4/db.html
http://sipi.usc.edu/manuals/db-4.7.25/utility/db_hotbackup.html
Oracle Berkeley DB Programmer's Reference Guide
浙公网安备 33010602011771号