Python中的Berkeley DB(1):Hello Berkeley DB
2015-09-16 00:16
886 查看
Python中的Berkeley DB(1):Hello Berkeley DB
什么是Berkeley DB1
Berkeley DB(后文简称BDB)是一个高性能的嵌入式数据库编程库(引擎),它可以用来保存任意类型的键/值对 (Key/Value Pair),而且可以为一个键保存多个数据。BDB可以支持数千的并发线程同时操作数据库,支持最大256TB的数据。BDB提供诸如C语言,C++,Java,Perl,Python,Tcl等多种编程语言的API,并且广泛支持大多数类Unix操作系统和Windows操作系统以及实时操作系统(如 VxWorks)。
1991年,Berkeley DB的第一个版发行(Linux系统也在这一年诞生),其最初的开发目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现,该版本还包含了B+树数据访问算法。
1992年,BSD UNIX第4.4发行版中包含了Berkeley DB1.85版。基本上认为这是Berkeley DB的第一个正式版。
1996年,Sleepycat软件公司成立,提供对Berkeley DB的商业支持。
2006年,Sleepycat被Oracle收购,当时最新版本是4.7.25。
为什么是Berkeley DB
从功能来看,BDB似乎非常单一,同其它Key/Value类数据库系统类似,它只具有很少的数据操作能力,在当前各种No-SQL系统百花齐放的时代,你可能会觉得功能如此简单的数据库系统并不会有太多的用武之地,不过读完下面的介绍,你可能会对BDB另眼相看了。优异的性能2
BDB和应用运行在同一进程空间,直接使用原生态的API存取数据,因此它具有其它数据库系统无法比拟的性能,不要不相信,它跑起来甩出Redis几条大街!至于MySQL、Oracle这些RDBMS系统,更不好意思和Berkeley在一起谈性能了,MySQL5.1版之前的数据事务存储引擎使用的是BDB,Google Accounts选用的BDB作为存储引擎。轻量化和跨平台
BDB被Oracle收购后,其使用许可变更为AGPL3,但它仍然是一个Freeware,你可以从Oracle网站上下载3它的源码,在任何一个你喜欢或需要的平台上编译运行,它还有Java版本(Berkeley DB Java Edition),让你更方便地跨平台部署你的应用,此外,Python语言也内置了对BDB的绑定(binding),可以让你无需在本地安装BDB的情况下无障碍地使用,本文后续部分便为你介绍如何在Python中方便地使用BDB。需要注意的是,Python 2.7版本中的binding库pybsddb为V4.8,为了方便大家测试我们会基于这个版本,如果你需要使用到最新的功能特性请参考该项目的新主页。4Hello Berkeley DB
本节我们用一个类似Hello world的入门案例来讲一讲如何在Python中调用BDB binding。我们假设你安装了原始的Python 2.7.X系列Python运行环境,打开Windows命令行或Linux终端,输入python启动Python语言解析器,输入
import bsddb。
Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>import bsddb
如果系统未提示错误,意味着导入bsddb包正常,那么可以进行下一步操作了。
此时我们还可以输入
print bsddb.db.DB_VERSION_STRING查看BDB版本号。
>>>print bsddb.db.DB_VERSION_STRING Berkeley DB 4.7.25: (May 15, 2008)
下面我们创建一个新的数据库(注意BDB中没有数据表的概念,一个Key/Value对组成的集合对应一个磁盘文件)。
>>> mydb = bsddb.db.DB() >>> mydb.open('mydb.db',dbtype = bsddb.db.DB_HASH, flags = bsddb.db.DB_CREATE)
上面的代码中,使用bsddb.db.DB()创建一个DB实例,然后使用DB中的open方法打开一个数据库,设计dbtype参数为DB_HASH表明这个库的结构为哈希表类型,设置flags参数为DB_CREATE表明如果数据文件不存在则新建一个空的数据文件。
TIPS:执行了mydb.open后会在当前操作系统路径下新建一个mydb.db的数据文件。如果你打开命令行没有改变当前路径的话默认会在用户主目录下(Windows为 C:\Users\你的用户名,Linux系统为~)
现在你就可以使用这个已经打开的DB实例存储第一个数据了,使用DB的put方法存储一个Key/Value对,如mydb.put(“author”,”evancsss”),其中Key为author,Value为evancss。执行完put方法后,我们使用close()方法关闭数据库,并退出Python以验证数据是否已在磁盘上持久化存储。
>>> mydb.put("author","evancss") >>> mydb.put("title","Berkeley DB in Python") >>> mydb.close() >>> exit()
现在我们要读取刚刚建立的数据库,重新进入Python解析器并开始使用BDB,这次我们使用from * import *的语法来简化我们的操作:
>>> from bsddb import db >>> mydb = db.DB() >>> mydb.open('mydb.db') >>> print mydb.items() [('title', 'Berkeley DB in Python'), ('author', 'evancss')]
哇塞,一切顺利,我们用一个简单的items()方法取出了刚刚添加的两条数据。
待续……
第二篇:Berkeley DB的数据结构
第三篇:高级特性与线程安全
第四篇:使用Berkeley DB进行URL去重
第五篇:使用Berkeley DB作为缓冲队列
第六篇: 新版Berkeley DB的特性
参考文档
http://blog.sina.com.cn/s/blog_502c8cc40100yqkj.html ↩http://www.cnblogs.com/me115/p/3395396.html ↩
http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html ↩
https://www.jcea.es/programacion/pybsddb.htm ↩
相关文章推荐
- 关于逻辑回归(Logistic regression)模型的简单思考
- 【Python】切割字符串
- 【Python】正则表达式的威力
- Python学习,可爱的Python第一篇
- 零基础学python-17.1 参数的传递快速入门
- 零基础学python-17.1 参数的传递快速入门
- 【Python之旅】第二篇(五):基于列表、字典和元组的员工信息处理接口
- Python学习笔记2--模式匹配
- Mac OS 中的 Python(和 NumPy)开发环境设置
- 利用python opencv实现图像自适应二值化
- python属性
- Python-docx简介
- 2015/9/15 Python基础(12):模块和包
- python 错误和异常解析
- 利用Python从文件中读取字符串(解决乱码问题)
- python 闭包中引用的变量值变更问题
- python keyword模块解析
- Python 学习(1)---基本知识整理
- H-Index II @python
- Eclipse + Python 的安装与配置流程