嵌入式数据库与数据库服务器

转自:http://blog.csdn.net/gobitan

初次接触嵌入式数据库(Embedded Database)可能对这个概念总不是很清楚,它究竟与数据库服务器(Database Server)有什么区别,它们又分别适用于那些应用场景呢,这是需要解决的问题。
在谈区别之前,先来个感性认识。像Oracle、Sybase、MySQL和SQL Server这些大家熟知的数据库都属于数据库服务器(当然不排除某些也提供嵌入式版本),而像SQLite、Berkeley DB等属于嵌入式数据库。
嵌入式数据库跟数据库服务器最大的区别在于它们运行的地址空间不同。通常,数据库服务器独立地运行一个守护进程(daemon),而嵌入式数据库与应用程序运行在同一个进程。
数据库服务器的架构如下:
图中的数据库客户端通常通过数据库驱动程序如JDBC、ODBC等访问数据库服务器,数据库服务器再操作数据库文件。
数据库服务是一种客户端服务器模式,客户端和服务器是完全两个独立的进程。它们可以分别位于在不同的计算机甚至网络中。客户端和服务器通过TCP/IP进行通讯。这种模式将数据与应用程序分离,便于对数据访问的控制和管理。
 
嵌入式数据库架构如下:
嵌入式数据库不需要数据库驱动程序,直接将数据库的库文件链接到应用程序中。应用程序通过API访问数据库,而不是TCP/IP。因此,嵌入式数据库的部署是与应用程序在一起的。比如常见的版本控制器SubVersion,它所用的嵌入式数据库就是跟应用程序放在一起的。
数据库服务器和嵌入式对比如下:
(1)数据库服务器通常允许非开发人员(DBA,数据库库管理员)对数据库进行操作,而在嵌入式数据中通常只允许应用程序对其进行访问和控制。
(2)数据库服务器将数据与程序分离,便于对数据库访问的控制。而嵌入式数据库则将数据的访问控制完全交给应用程序,由应用程序来进行控制。
(3)数据库服务器需要独立的安装、部署和管理,而嵌入式数据通常和应用程序一起发布,不需要单独地部署一个数据库服务器,具有程序携带性的特点。
从上面的对比可以看出,数据库服务器和嵌入式数据库各自具有自己的特点,它们分别适用于不同的应用场景。
如果你要存储的数据的访问比较复杂,比如跨网络、复杂的访问控制策略,又需要数据库管理员经常进行管理和维护,那么数据库服务器就非常适合你。
如果你要存储的数据的访问之需要应用程序控制即可,并且基本不需要人工干预,而且需要对数据的访问简单、快速有效,那么嵌入式数据库适合你。
另外,你是否有过这样的情况:存储的数据量不是很大,如果搞个一般的数据库来感觉太浪费了,而且如果发布这个程序还非常麻烦,这时那些微小的嵌入式数据库可能非常适合你(如某些电子邮件客户端就采用的是嵌入式数据库)。

嵌入式数据库:
1.   嵌入在进程中执行,不需要单独引擎。
2.   可定制、体积小,满足嵌入式系统需求。
 
Berkeley DB(开源,商用收费)
 
技术特点
1. Berkeley DB 是一个开放源代码的内嵌式数据库管理系统,能够为应用程序提供高性能的数据管理服务。应用它程序员只需要调用一些简单的API就可以完成对数据的访问和管理。(不使用SQL语言)
2. Berkeley DB 为许多编程语言提供了实用的API接口,包括C、C++、Java、Perl、Tcl、Python和PHP等。所有同数据库相关的操作都由Berkeley DB函数库负责统一完成。
3. Berkeley DB 轻便灵活(Portable),可以运行于几乎所有的UNIX和Linux系统及其变种系统、Windows操作系统以及多种嵌入式实时操作系统之下。Berkeley DB被链接到应用程序中,终端用户一般根本感觉不到有一个数据库系统存在。
4. Berkeley DB 是可伸缩(Scalable)的,这一点表现在很多方面。Database library本身是很精简的(少于300KB的文本空间),但它能够管理规模高达256TB的数据库。它支持高并发度,成千上万个用户可同时操纵同一个数据库。Berkeley DB能以足够小的空间占用量运行于有严格约束的嵌入式系统。
Berkeley DB 在嵌入式应用中比关系数据库和面向对象数据库要好,有以下两点原因:
     (1)因为数据库程序库同应用程序在相同的地址空间中运行,所以数据库操作不需要进程间的通讯。在一台机器的不同进程间或在网络中不同机器间进行进程通讯所花费的开销,要远远大于函数调用的开销;
(2)因为Berkeley DB对所有操作都使用一组API接口,因此不需要对某种查询语言进行解析,也不用生成执行计划,大大提高了运行效。
 
SQLite(开源,商用免费)
轻量级别数据库SQLite的主要特点:
1.  支持事件,不需要配置,不需要安装,也不需要管理员;
2.  支持大部分SQL92;
3.  一个完整的数据库保存在磁盘上面一个文件,同一个数据库文件可以在不同机器上面使用,最大支持数据库到2T,字符和BLOB的支持仅限制于可用内存;
4.  整个系统少于3万行代码,少于250KB的内存占用(gcc),大部分应用比目前常见的客户端/服务端的数据库快,没有其它依赖
5.  源代码开放,代码95%有较好的注释,简单易用的API。官方带有TCL的编译版本。
 
Empress(商业数据库)
 
开发阶段特点:
1.  可嵌入程序,该特性使应用程序和数据库工作于统一地址空间,增强了系统的稳定性,提高了系统的效率。
2.  确定的响应时间,Empress 可以使数据的响应时间相对一致,使用者可以设定一个超时限制,如果在规定时间内没有完成插入,修改等操作,系统会报错。
3.  快速的操作Empress 提供了内核级的CAPI,称为MR, 用MR编写的应用程序在执行时不需要解析。另外在MR中加速的机制还包括优秀的加锁控制,内存管理和基于记录数量的选择功能。
4.  灵活的开发方式,Empress 提供多种开发接口,加快开发进程而无需开发者重新学习开发语言和熟悉开发环境。
5.  友好的存储方式,Empress 数据库可以放在操作系统支持的任何存储设备中,Empress的表单甚至可以分割放在不同的存储设备中,比如在内存,硬盘和CD-ROM中。
6.  微型内核结构 Empress 高度单元化, 可根据需要选择需要的单元,从而缩小产品中Empress 数据库所占用的资源。
7.  宽广的平台支持,Empress 支持多种硬件平台和软件平台, 也可移植到客户要求的硬件平台或操作系统。
技术优势:
1.  微型内核结构,占用少量内存空间,特别适合紧凑性的设计
2 一周 7 天,每天 24 小时连续工作,无需任何额外操作免维护
3.  内核级  CAPI  接口,使运行速度最大化
4.  高度灵活的 SQL 接口
5.  优秀的掉电恢复能力
6.  强壮的交易和锁存机制
7.  支持 SCSI,RAID,IDE,RAM,CD-RW,DVD-ROM,CF, 等存储介质
8.  支持 Unicode 
9.  引擎可加载于磁盘和内存
 
eXtremeDB
eXtremeDB 特点:
1.  内存数据库, eXtremeDB 将数据以程序直接使用的格式保存在主内存之中,不仅剔除了文件 I/O 的开销,也剔除了文件系统数据库所需的缓冲和 Cache 机制。其结果是每个交易一微秒甚至更少的极限速度,相比于类磁盘数据库而言,速度成百上千倍地提高。作为内存数据库, eXtremeDB 不仅性能高,而且数据存储的效率也非常高。为了提高性能并方便程序使用,数据在 eXtremeDB 中不做任何压缩, 100M 的空间可以保存高达 70M 以上的有效数据,这是其他数据库所不可想象的。
2.  混合数据库, eXtremeDB 不仅可以建立完全运行在主内存的内存数据库,更可以建立磁盘 / 内存混合介质的数据库。在 eXtremeDB ,我们把这种建立在磁盘、内存或磁盘 + 内存的运行模式称为 eXtremeDB Fusion 融合数据库。 eXtremeDB Fusion 兼顾数据管理的实时性与安全性要求,是实时数据管理的台阶性进步。
3.  嵌入式数据库, eXtremeDB 内核以链接库的形式包含在应用程序之中,其开销只有 50KB~130KB 。无论在嵌入式系统还是在实时系统之中, eXtremeDB 都天然地嵌入在应用程序之中,在最终用户毫不知情的情况下工作。 eXtremeDB 的这种天然嵌入性对实时数据管理至关重要:各个进程都直接访问 eXtremeDB 数据库,避免了进程间通信,从而剔除了进程间通信的开销和不确定性。同时,  eXtremeDB 独特的数据格式方便程序直接使用的,剔除了数据复制及数据翻译的开销,缩短了应用程序的代码执行路径。
4.  由应用定制的 API ,应用程序对 eXtremeDB 数据库的操作接口是根据应用数据库设计而自动产生,不仅提升了性能,也剔除了通用接口所必不可少的动态内存分配,从而提高了应用系统的可靠性。定制过程简单方便,由高级语言定制 eXtremeDB 数据库中的表格、字段、数据类型、事件触发、访问方法等应用特征,通过 eXtremeDB 预编译器自动产生访问该数据库的 C/C++ API 接口。
5.  可预测的数据管理
eXtremeDB 独特的体系结构,保证了数据管理的可预测性。 eXtremeDB 不仅更快、更小,而且更确定。在 80 双核 CPU 的服务器上, eXtremeDB 1TB 内存里保存 15B 条记录;无论记录数多少, eXtremeDB 可以在八十分之一微秒的时间内提取一条记录。

你可能感兴趣的:(数据库)