常用内存数据库介绍
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
近年来,内存容量不断提高,价格不断下跌,操作系统已经可以支持更大的地址空间 (计算机进入了 64 位时代),同时对数据库系统实时响应能力要求日益提高,充分利用 内存技术提升数据库性能成为一个热点。
在数据库技术中,目前主要有两种方法来使用大量的内存。一种是在传统的数据库中, 增大缓冲池,将一个事务所涉及的数据都放在缓冲池中,组织成相应的数据结构来进行查 询和更新处理,也就是常说的共享内存技术,这种方法优化的主要目标是最小化磁盘访 问。另一种就是内存数据库(MMDB:Main Memory Database,也叫主存数据库)技术,就 是干脆重新设计一种数据库管理系统,对查询处理、并发控制与恢复的算法和数据结构进 行重新设计,以更有效地使用 CPU 周期和内存,这种技术近乎把整个数据库放进内存 中,因而会产生一些根本性的变化。两种技术的区别如下表:
4 4. 常用内存数据库
5 4.1
SQLite
SQLite 是一个小型的 C 程序库,实现了独立的,可嵌入的,零配置的 SQL 数据库引擎。 特性包括:
事务操作是原子,一致,孤立,并且持久的(ACID),即使在系统崩溃和电源故障 之后。
零配置——不需要安装和管理。 实现了绝大多数 SQL92 标准。 整个数据库存储在一个单一的文件中。 数据库文件可以在不同字节序的机器之间自由地共享。 支持最大可达 2T 的数据库。 (241 字节) 字符串和 BLOB 类型的大小最大可达 2G 字节(231 字节)。 小的代码: 完整配置的少于 250KB,忽略一些可选特性的少于 150KB。 在大多数常见操作上比流行的客户/服务器数据库引擎更快。 简单,易于使用的 API。 内建 TCL 绑定。 另外提供可用于许多其他语言的绑定。 具有良好注释的源代码,95%经过测试。 独立:没有外部依赖。 源代码位于公共域。 可用于任何用途。
学,也可以自己包装一个。 ◇Java 如果要用 Java 访问 SQLite,可以通过 SQLite 的 JDBC 驱动,或者通过专门的 SQLite 包 装库。我个人建议走 JDBC 方式,万一将来要换数据库,代码就不用大改。 ◇Python pysqlite 是 Python 操作 SQLite 的首选。从 Python 2.5 开始,它已经被整合到 Python 的 标准库中。看来 Python 社区还是蛮喜欢 SQLite 嘛。 ◇.Net 对于喜欢.Net 的同学,可以通过 SQLite 的 ADO.NET 驱动来访问。 ◇Ruby Ruby 可以通过 SQLite-Ruby 操作 SQLite 数据库,不过我没用过。 ◇Perl 在 CPAN 上有 DBD::SQLite,不过我也没用过。
◇ 绿色软件
SQLite 的另外一个特点是绿色:它的核心引擎本身不依赖第三方的软件,使用它也不需要 “安装”。所以在部署的时候能够省去不少麻烦。
◇单一文件
所谓的“单一文件”,就是数据库中所有的信息(比如表、视图、触发器、等)都包含在一 个文件内。这个文件可以 copy 到其它目录或其它机器上,也照用不误。
ALTIBASE 公司从 1999 年就一直致力于内存数据库软件和其应用的开发,提供高性能和 高可用性的软件解决方案。特别适合通信、网上银行、证券交易、实时应用和嵌入式系统 领域。目前占据 80%以上内存数据库市场,可以说是当今数据库软件技术的领导者。目前 Altibase 在国内成功案例也比较多,尤其是在电信行业,已经得到了广泛认可.
常用内存数据库介绍
1 1. 内存数据库简介
2 1.1
概念
一、什么是内存数据库
传统的数据库管理系统把所有数据都放在磁盘上进行管理,所以称做磁盘数据库 (DRDB:Disk-Resident Database)。磁盘数据库需要频繁地访问磁盘来进行数据的操 作,由于对磁盘读写数据的操作一方面要进行磁头的机械移动,另一方面受到系统调用 (通常通过 CPU 中断完成,受到 CPU 时钟周期的制约)时间的影响,当数据量很大,操 作频繁且复杂时,就会暴露出很多问题。
★编程语言接口 SQLite 支持很多种语言的编程接口。这对于我这种喜欢混用多种编程语言的人来说,是很 爽的。下面我大概介绍一下。
◇C/C++ 由于 SQLite 本身是 C 写的,它自带的 API 也是 C 接口的。所以 C/C++用起来最直接了。 假如你不喜欢面向过程的 C API 风格,可以另外找个 C++的包装库。想重新发明轮子的同
内存数据库系统带来的优越性能不仅仅在于对内存读写比对磁盘读写快上,更重要的是, 从根本上抛弃了磁盘数据管理的许多传统方式,基于全部数据都在内存中管理进行了新的 体系结构的设计,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,从而 使数据处理速度一般比传统数据库的数据处理速度快很多,一般都在 10 倍以上,理想情 况甚至可以达到 1000 倍。
★技术上的缺点和不足
◇并发访问的锁机制 SQLite 在并发(包括多进程和多线程)读写方面的性能一直不太理想。数据库可能会被写 操作独占,从而导致其它读写操作阻塞或出错。
SQL 标准支持不全 在它的官方网站上,具体列举了不支持哪些 SQL92 标准。我个人感觉比较不爽的是不支 持外键约束。
◇网络文件系统(以下简称 NFS) 有时候需要访问其它机器上的 SQLite 数据库文件,就会把数据库文件放置到网络共享目 录上。这时候你就要小心了。当 SQLite 文件放置于 NFS 时,在并发读写的情况下可能会 出问题(比如数据损坏)。原因据说是由于某些 NFS 的文件锁实现上有 Bug。
SQLite 发行版包含一个独立的命令行访问程序(sqlite),可用于管理 SQLite 数据库,并适 合作为一个如何使用 SQLite 库的例子。
License: 的。
SQLite 使用 Public domain 授权(注),对于个人使用和商业使用都是免费
技术上的优点和特性 SQLite 是一个轻量级、跨平台的关系型数据库。
而使用共享内存技术的实时系统和使用内存数据库相比有很多不足,由于优化的目标 仍然集中在最小化磁盘访问上,很难满足完整的数据库管理的要求,设计的非标准化和软 件的专用性造成可伸缩性、可用性和系统的效率都非常低,对于快速部署和简化维护都是 不利的。
3 2. 内存数据库历史和发展
一、雏形期 从上个世纪 60 年代末到 80 年代初。在这个时期中,出现了主存数据库的雏形。1969 年
IBM 公司研制了世界上最早的数据库管理系统------基于层次模型的数据库管理系统 IMS, 并作为商品化软件投入市场。在设计 IMS 时,IBM 考虑到基于内存的数据管理方法,相应 推出了 IMS/VS Fast Path。Fast Path 是一个支持内存驻留数据的商业化数据库,但它同 时也可以很好地支持磁盘驻留数据。在这个产品中体现了主存数据库的主要设计思想,也 就是将需要频繁访问,要求高响应速度的数据直接存放在物理内存中访问和管理。在这个 阶段中,包括网状数据库、关系数据库等其他各种数据库技术也都逐渐成型。 二、技术理论成熟期 1984 年,D J DeWitt 等人发表了《主存数据库系统的实现技术》一文。第一次提出了 Main Memory Database(主存数据库)的概念。预言当时异常昂贵的计算机主存价格一 定会下降,用户有可能将大容量的数据库全部保存在主存中,提出了 AVL 树、哈希算法、 主存数据库恢复机制等主存数据库技术的关键理论,为主存数据库的发展指出了明确的方 向。 1984 年,D J DeWitt 等人提出使用非易逝内存或预提交和成组提交技术作为主存数据库的 提交处理方案,使用指针实现主存数据库的存取访问。 1985 年,IBM 推出了 IBM 370 上运行的 OBE 主存数据库 1986 年,RB Hagman 提出了使用检查点技术实现主存数据库的恢复机制。威斯康星大学 提出了按区双向锁定模式解决主存数据库中的并发控制问题。并设计出 MM-DBMS 主存数 据库。贝尔实验室推出了 DALI 主存数据库模型。 1987 年,ACM SIGMOD 会议中提出了以堆文件(HEAP FILE)作为主存数据库的数据存 储结构。Southern Methodist 大学设计出 MARS 主存数据库模型。 1988 年普林斯顿大学设计出 TPK 主存数据库。 1990 年普林斯顿大学又设计出 System M 主存数据库。 三、产品发展期和市场成长期 随着互联网的发展,越来越多的网络应用系统需要能够支持大用户量并发访问、高响应速 度的的数据库系统,主存数据库市场成熟 半导体技术快速发展,半导体内存大规模生产,动态随机存取存储器(DRAM)的容量越 来越大,而价格越来越低,这无疑为计算机内存的不断扩大提供了硬件基础,使得主存数 据库的技术可行性逐步成熟 1994 年美国 OSE 公司推出了第一个商业化的,开始实际应用的主存数据库产品 Polyhedra 1998 年德国 SoftwareAG 推出了 Tamino Database。 1999 年日本 UBIT 会社开发出 XDB 主存数据库产品。韩国 Altibase 推出 Altibase 2000 年奥地利的 QuiLogic 公司推出了 SQL-IMDB 2001 年美国 McObject 推出 eXtremeDB。加拿大 Empress 公司推出 EmpressDB
四、几种主存技术应用的比较 第一代:用户定制的主存数据库。通过应用程序来管理内存和数据;不支持 SQL 语句, 不 提供本地存储, 没有数据库恢复技术;性能好但很难维护和在别的应用中不能使用;应用 在实时领域比如工厂自动化生产。 第二代:简单功能的内存数据库。能够快速处理简单的查询;支持部分的 SQL 语句和简 单的恢复技术;主要目的是能够快速处理大量事务;针对简单事务处理领域,尤其是交换机, 移动通信等。 第三代:通用的主存数据库。针对传统的商业关系型数据库领域,能够提供更高的性能、 通用性以及稳定性;提供不同的接口来处理复杂的 SQL 语句和满足不同的应用领域;可以 应用在计费、电子商务、在线安全领域,几乎包括磁盘数据库的所有应用领域。 五、目前几种常见的通用内存数据库 eXtremeDB:eXtremeDB 实时数据库是 McObject 公司的一款特别为实时与嵌入式系统数 据管理而设计的数据库,只有 50K 到 130K 的开销,速度达到微秒级。eXtremeDB 完全驻 留在主内存中,不使用文件系统(包括内存盘)。eXtremeDB 采用了新的磁盘融合技术, 将内存拓展到磁盘,将磁盘当做虚拟内存来用,实时性能保持微秒级的同时,数据管理量 在 32BIT 下能达到 20G。 Oracle TimesTen:Oracle TimesTen 是 Oracle 从 TimesTen 公司收购的一个内存优化的 关系数据库,它为应用程序提供了实时企业和行业(例如电信、资本市场和国防)所需的 即时响应性和非常高的吞吐量。Oracle TimesTen 可作为高速缓存或嵌入式数据库被部署 在应用程序层中,它利用标准的 SQL 接口对完全位于物理内存中的数据存储区进行操 作。 SolidDB:Solid Information Technology 成立于 1992 年,全球总部位于加州 Cupertino, Solid 数据管理平台将基于内存和磁盘的全事务处理数据库引擎、载体级高可用性及强大的 数据复制功能紧密地融为一体。
◇轻量级
先说它的第一个特色:轻量级。想必 SQLite 的作者很看重这个特性,连它的 Logo 都是用 的“羽毛”,来显摆它的轻飘飘。SQLite 和 C/S 模式的数据库软件不同,它是进程内的数据 库引擎,因此不存在数据库的客户端和服务器。使用 SQLite 一般只需要带上它的一个动
Hale Waihona Puke Baidu
态库,就可以享受它的全部功能。而且那个动态库的尺寸也挺小,以版本 3.6.11 为例, Windows 下 487KB、Linux 下 347KB。