内存数据库系统对于嵌入式开发来说是特别有用的, IMDS 中每个保存过程缩小了覆盖区 智能连接设备的增长速度正越来越快。这种装置不管是在家庭、口 袋(pocket)或者是内置于工业通信和传送系统,都已经发展为包含了 强大的CPU和完善的嵌入式系统软件。在这种设备中日益流行的一种软 件是数据库管理系统(DBMS)。虽然对桌面电脑或者服务器来说,这种 软件已经是相当成熟了,但数据库是最新才应用到达嵌入式系统的。像 所有进入新环境的生物体一样,数据库也必须经历一个发展过程。一种 新型的DBMS,内存数据库系统(IMDS),代表了DBMS应用到嵌入式 系统的最新步伐。 为什么嵌入式系统开发人员会转向数据库呢?市场竞争使得像机顶 盒、网络开关和消费者电子产品这样的设备需要变得越来越智能。要支 持扩展功能集,应用程序通常必须管理大容量的更复杂的数据。因此, 许多设备开发人员发现他们正致力于自己开发数据管理方案。在应用需 求增长时,普通的数据管理方案维护和扩展起来是特别困难的。 另外,标准化的趋势,商用现货(ommercial off-the-shelf,COTS) 嵌入式 *** 作系统,远离许多私有系统的不完整环境,从而增强数据库的 能力。广泛使用的 *** 作系统的出现,比如嵌入式Linux,形成了一个用 户群体,他们轮留进行数据库和其他工具开发(包括商业的和非商业 的),以不断增强开发平台。 因此,设备开发人员开始转向商业数据库,但已有的嵌入式DBMS 软件还不理想。嵌入式数据库最初出现在10年前,当时用于支持商业系 统,带有包括复杂缓存逻辑和异常终止恢复等功能。但在一个设备上, 例如,在一个机顶盒或者下一代传真机中,这些能力通常毫无必要,并 且应用程序容易出现超出可用内存和CPU资源的现象。 另外,建立传统数据库时是将数据存储在磁盘上。作为一种机械过 程,磁盘的I/O是非常昂贵的,尤其是要取得高性能的话。对于嵌入式 系统来,因为需要实时执行,因此相对而言,传统数据库就太慢了。 内存数据库出现的目的特别针对于满足嵌入式系统的性能需求和资 源能力。正如其名字所暗示的,IMDS完全驻留在内存中,它们不会存储 到磁盘上。
目前关系型内存数据库主要有MySQL(使用内存存储引擎)、SQL Server(In-Memory OLTP)、数蚕内存数据库、Oracle 内存数据库。
MySQL:免费产品,内存存储引擎使用较少。
SQL Server:微软的商业化产品,是为了适应大数据等业务产品新添加的存储引擎,微软SQL语句兼容性好,商业化成熟度高。
数蚕内存数据库:数蚕科技针对中小型企业的内存数据库,目前成熟度较弱,c++接口特性良好,SQL特性较弱,只支持基本的SQL语句 *** 作,不支持事务。
Oracle 内存数据库:基于内存计算的关系数据库, 提供了响应时间极 短且吞吐量极高的应用程序。
非关系型内存数据库主要有FastDB、Memcached和Redis等主流内存数据库。结构简单,支持数据结构多以基础数据结构为主,一般应用于缓存等非关键数据存储,其优点是数据查询速度快,对下层编程接口良好。
内存数据库数据结构分析
按照目前内存芯片密度每年2倍的增长速度,在未来10年中,配置1 G或更大的内存将是很平常的事。内存容量的快速增长对数据库管理系统有着深刻的影响。在某些场合,将整个数据库放进内存是可能的,正常的查询处理可以完全脱离硬盘。另外,和传统的数据库应用相比,有大量的新兴应用,目前的内存大小已经足够了。
在数据库系统中,有2种方法来使用大量的内存。
(1)增大缓冲池 将一个事务所涉及的数据都放在缓冲池中。当采取这种方法的时候,算法优化的目标仍然是最小化磁盘访问。
(2)常驻内存数据库 将整个数据库放进内存中。 这种方法需要重新设计一种数据库管理系统,需要对查询处理、并发控制与恢复的算法和数据结构进行重新设计,以更有效地使用CPU周期和内存。
1 磁盘和内存
内存数据库的索引结构和基于磁盘系统的索引结构不同,面向磁盘的索引结构的目标是最小化磁盘访问次数和空间占用,而面向内存的索引结构全部放在内存中,因此没有磁盘访问次数的最小化。这样,内存索引的目标是减少整体的计算时间同时尽可能少地占用内存。由于关系常驻内存,在索引中没有必要存储真实的属性值,而存储指向元组的指针,当需要的时候通过这些指针能够得到属性值。这样做有4个优点:
(1)单一元组指针便能访问元组的属性和元组本身,这就减少了索引的大小。
(2)避免了处理在索引中的长字段、可变长字段以及压缩技术。
(3)当更新索引 *** 作时,移动指针将比移动属性值更廉价。
(4)由于单个元组指针提供访问这个元组中的任何字段,采用一种特殊的机制多属性索引的需要将减少。
2 物理组织方法
内存数据库的总体设计目标是使内存和CPU的利用率尽可能高,而内存数据库的物理组织是实现该目标的基础,其存储结构、索引结构、中间数据存储结构都必须考虑内存的直接存取这一特征,这里介绍几种适合于内存数据库的物理组织方法。
21 区-段式
区-段式组织是基于关系数据模型的。他将存储空间逻辑划分为“分区”,每一个分区存储一个关系。由若干“段”组成,一个段是内存中固定长度的连续区域,相当于“页”,但比页大,是内外存I/O的单位,也是内存空间分配以及内存数据库恢复的单位
一个段中的一个数据记录就是一个关系元组。每个记录有一个惟一的标识符RID(Record Identifier),他是一个三元组<P,S,L>,其中P,S,L分别为分区号、段号、段内的记录槽号,记录槽(RecordSlots)包含了对应记录的长度和记录的首地址。这样由RID经分区表和相对应的段表找到相对应的记录槽,按槽中的地址和长度便可直接存取所要的记录。其实,对于内存数据库,存取方法返回的不必是所需的记录数据的副本,只需将其槽中的地址返回即可。
2.2 影子内存式
按影子内存式组织的内存数据库空间可以划分为2部分:一部分是MMDB的主拷贝;另一部分为“影子拷贝”。
在事务的正常 *** 作期间,每次查询都产生一个分别对于影子内存SM(ShadowMemory)和主拷贝PDB(Primary DataBase)的双地址,且总是先对SM试探,若不成功,再对PDB *** 作。所有的更新 *** 作都在SM中进行,且都记录在活动日志中(Active Log)。每当一个事务提交时,由他所产生的在SM中的“后映像”拷贝到PDB中。使用影子内存的优点是:
(1)减少了日志缓冲区,因为其后映像区和用户区合二为一。
(2)省去因事务失败或系统故障时的UNDO *** 作,只清除相应的影子内存即可。
(3)减少对MMDB(PDB)存取,各事务可并行对各SM区 *** 作。
(4)缩短恢复过程,这是因为一方面如(2)所述,省去UNDO型 *** 作,只需做REDO型 *** 作;另一方面还可以就当前事务对SM做“部分恢复”以后,就先启动正常事务处理,然后按需要逐步恢复PDB。
影子内存式和区-段式可以组合使用
以上就是关于什么是内存数据库全部的内容,包括:什么是内存数据库、内存数据库主流的有哪些,并给出各自特点!、谁可以告诉我一些关于内存数据库的情况等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)