Berkeley DB ——Introduction
引言
由于需要在软件中保存一些重要数据,我考虑使用嵌入式数据库,一是为了保持软件的精巧,二者是需要较高的性能。我在找嵌入式数据库的时候,发现了Berkeley DB,也看到了很多相关的介绍,评价不错,还有人做了评测,而且有很多使用Berkeley DB的Open Source的成功案例,诸如SendMail和OpenOffice这样著名的项目。Berkeley DB的简单、小巧、可靠和高性能正式我所需要的,相关的还有SQLite这样的,但是我并不需要它具有执行SQL的能力,殊不知一个SQL执行引擎会令它的体积增加不少。
历史
说起Berkeley DB的历史可算是较为悠久了,从第一个发行版到现在已经有15年了,而在1996年成立的Sleepycat(困猫?懒猫?)公司提供其商业支持,直道现在的4.4.2版,源码为C的代码,但提供多种语言的接口:C/C++、Java和TCL等等,还有人在sourceforge上提供了C#的API。现在Sleepycat已经被Oracle收购了,用来对付MySQL,进一步丰富了Oralce的产品线。
特点/特性
简单、小巧、可靠、高性能,小而精。将Berkeley DB和我们的程序共同编译为一个程序(嵌入),和我们的程序运行在相同的地址空间,既没有网络通信的开销也没有进程通信的资源耗费,而且没有复杂的SQL分析解释,使用API进行直接了当的访问,当真是来的直接和快捷。Berkeley DB本身只有几百K,但却能支持256TB的数据,还支持上千用户的并发访问。
真正的事务支持——可说是其最强大的特性。
多线程/进程处理支持。
支持热备份。
缺点
任何事务都有其缺点,Berkeley DB也是如此:
Berkeley DB环境不是跨平台的;而且不支持Windows98/95这样的老系统。
不可进行网络共享。
对中断比较敏感。
数据结构
Berkeley DB和关系数据库不同,它没有和关系数据库中完全对等的表的概念,而只有DBT这样的东西——就是一个Key/Data对,我们可以把key看作表的主键,而Data就是余下的n-1列。我们可以定义一个结构体,存入Data中,这样结构体的每个Field就相当于一个字段。Berkeley DB还有游标(Cursor),有了它,能够遍历多条记录,还能遍历Key相同的多记录。而Berkeley DB中最核心的数据结构就是DB了,它代表数据库,物理上就是.DB文件,我们可以设置其页面大小,存储数据的基础数据结构(平衡二叉树、哈希表、队列和记录)。另外,还有比较复杂的数据库环境DB_ENV,提供比较高级的功能:事务、多线程、日志、备份和恢复等。
应用场景
Berkeley DB是专注于某些应用场景的专注型产品,它适合于使用在嵌入式系统或者某些在某些消费类软件中存储简单的数据。
相关blog
http://blog.sina.com.cn/u/1181509184
所有Berkeley DB相关的随笔