内存数据库的实现.docx
《内存数据库的实现.docx》由会员分享,可在线阅读,更多相关《内存数据库的实现.docx(8页珍藏版)》请在三一办公上搜索。
1、内存数据库的实现一、内存数据库的概念:传统的磁盘数据库DRDB,其主要的工作版本保存在非易失性的存储设备磁盘上,因此DRDB系统在 进行数据操作和管理时,经常需要对磁盘进行访问,将数据从磁盘读到内存,然后在内存上对数据进 行处理,处理完后再将内存中的数据写回磁盘。由于磁盘数据库的诸多操作都涉及磁盘的I/O,而磁 盘由于机械设备的特性,磁盘的I/O操作速度较慢,且随机和连续的I/O顺序也对其速度影响很大。 因此磁盘数据库的I/O是其性能的瓶颈所在。磁盘数据库系统的算法设计也是针对提高I/O效率来进 行设计的。然而经过几十年的发展,磁盘数据库的算法几经改进,然而始终绕不过磁盘I/O这道坎, 磁盘I
2、/O成为阻碍磁盘数据库性能提高的关键。减少甚至不使用I/O操作成为数据库系统性能改进的 研究方向,于是使用大内存的策略内存数据库(MMDB)成为了研究的热点。数据库系统中使用大内存,经历过两种主要途径。一是在内存中创建很大的缓冲池,使得数据库将磁 盘数据库的一部分内存放在内存缓冲池中,使近期正在进行操作的事务所需数据的大部分甚至全部都 保存在内存缓冲池中,以减少磁盘的I/O,这种方法还是未能跳出传统磁盘数据库的框架,只是增大 了传统的磁盘数据库缓冲区大小而己,数据库的“主版本”或“工作版本”仍然保存在磁盘上。另一 种主要途径是让数据库常驻内存,数据库的“主版本”或“工作版本”常驻内存,而磁盘版
3、只做后备, 针对数据库的所有事物操作都在内存上进行。内存数据库的这个特性,使得传统磁盘数据库的算法设 计对内存数据库已经不在适用,关于内存数据库的查询处理、并发控制和恢复等的算法与数据结构都 必须重设计与重构造,设计的原则以CPU和内存的高效使用为目标。关于内存数据库的具体定义, 典型的有下面几种不同的观点:1, 整个数据库全部常驻内存,存取数据时没有必要I/O操作,这就要求内存足够大,以容纳数据库 的所有数据。2, 内存不必足够大到容纳整个数据库,但数据被存取时,先进入内存,数据库的存取在内存进行。3, 数据库常驻磁盘,在事务执行前将所需要的数据集调入内存,提交时所有对数据库的修改必须写回
4、磁盘。4, 数据库常驻磁盘,但内存有很大的缓冲区或高速缓存,因而使数据库的大部分乃至全部可在内存, 通过适当的缓冲区的处理以减少内外存I/O操作。二、内存数据库的特点:内存系统和磁盘系统具有不同的特性,这是引起内存数据库和磁盘数据库之间差别的根本所在。主要 表现在以下几方面:1, 内存和磁盘在存取时间上有数量级的差别。内存数据可以和CPU直接打交道;而磁盘数据库有个IO 过程,先读入内存再被CPU处理,因此内存数据库在存取时间上远低于磁盘数据库。简单说,就是 内存数据库更快,效率高。2, 内存的易失性决定了内存数据库也是易失的,它的存在是为了更好的效率和并发性。它是磁盘数据 库在内存中的一个临
5、时版本,所有更改最终只有反映到磁盘中才能被永久储存。断电后,内存数据库 的数据会完全消失。3, 数据的储存组织方法对性能的影响不同。不同的组织方式对磁盘数据库的性能影响远大于内存数据 库。比如顺序存取与随机存取的时间对内存没有什么变化,而对磁盘则几乎有数量级的差别。4, 存取方式不同。内存可由CPU直接存取,磁盘则不能,但内存比磁盘更易受到来自程序错误的直接 数据破坏。三、实时内存数据库的数据装入策略:从某种角度看,内存数据库是一种Cache机制,是磁盘数据库的Cacha,通过对内存中的数据直接操 作,减少了到磁盘间的IO交互。实际操作时,往往因为内存容量的限制,无法将磁盘数据库所有的 数据都
6、读入内存,所以在初始化数据装入时必须要有一定的规则来保证装入的数据必须是最重要的。在内存没有足够大以容纳全部外存数据库的条件下,首先给出如下的内存数据库定义:设有数据库系统DBS,DB为DBS中的数据库,DBM(t)为在时刻t DB在内存的数据集,DBM(t)属于 DB。TS为DBS中所有可能的事务的集合,AT(t)为在时刻t处于活动状态的事务集,AT(t)属于TS。 Dt(T)为事务T在时刻t所操作的数据集,Dt(T)属于DB。若在任一时刻t,均有:V TAT(t),Dt(T) 属于DBM(t)成立,则称DBS为一个内存数据库系统,简写为MMDBS; DB为一个内存数据库,简 写为MMDB。
7、除了内存不必足够的大就可以容纳全部的外存数据库外,ERTDBMS的架构在整体上和国际上传统的 内存数据库是相似的。为了提高交换的效率,内存和外存被划分成固定的大小,并且内存的段的大小 等于外存的块。为了更好地满足实时事务的定时限制,实时数据库把可以预定义的实时事务和对系统影响比较夫的非 实时事务进行静态的预分析,进行知识提取,为数据装入提供下列必需的信息:(1) 事务类型:硬实时事务,软实时事务,非实时事务。(2) 事务的开始时间,包括绝对开始时间和相对开始时间。(3) 事务的截止期,包括静态截止期和相对截止期。(4) 事务的存取过程集,也就是事务对数据的约束条件。如果约束条件中包含动态执行时
8、才能获得的信 息,则静态预分析不提取对应的约束条件。所以按照静态预分析的存取过程集取得的数据要大于等于 事务实际需要的数据。(5) 数据的有效期,是指数据库中的数据反应的外部环境与真实的现实世界是否一致。当事务存取了超 过数据有效期的数据,就不能保证事务的正确性。(6) “超存取过程集”,由于实时数据库宁可要不完整但及时的数据,不要完整但过时的数据,因此如 果一个静态预分析的实时事务被接纳的时候,其数据集不在内存。启动的是由其“超存取过程集”组 成的“超事务”,可以使原事务在有一部分数据集进入内存后就可以启动。(7) 事务数据装入时间的静态估计。通过判断一个事务所存取的全部关系在外存有多少块的
9、记录和系统 1,0 一次所花费的时间,静态估计装入一个事务的数据需要多长时间。事务的数据还是个未知数,事务类型、开始时问、结束时问等标准的相互冲突,都给事务的选择带来 了难度。在静态预分析的基础上,我们把全部分析好的事务排成一个队列。内存数据库初始化的时候 从队列的第一个事务开始装入,无论内存有多大,装入的数据都是最应该装入的数据。队列的形成策 略如下:(1) 队列的开始是随机发生的硬实时事务。由于硬实时事务如果超过了截止期会给系统带来毁灭性 的后果,因此随机发生的硬实时事务的数据应该最先被调入内存。(2) 其次是周期事务的数据。由于实时数据库的周期事务频繁地执行,如果不能保证数据在内存, 就
10、会发生“抖动”,严重影响系统的效率,因此周期事务的数据也应该被调入内存。(3) 然后是内存数据库初始化时就应该把数据调入内存,否则会超过截止期的硬实时事务。设一个 硬实时事务的开始时间Ts与当前Tn的差为N,事务数据装入时间的最坏静态估计为M(最坏情况下 所有涉及到的关系的外存块数和读取一块的平均时间),如果NX*M,则此事务的数据现在町以不在 内存X是一个很夫II数,用来保证N远远人1 M( l rMMDB巾X的初始值为10)如果N和M不满 足此条件则该硬实时事务的数在内存数据库初始化的时候就应该装入内存(4) 如果在装入以上3事务的数据的过程中,内存耗尽,则内存数据库初始化失败(5) 接下
11、来同(3),判断内存数据库初始化时就应该装入的软实时事务。(6) 然后装入随机发生的软实时事务的数据。(7) 如果在以上两类事务的装入过程中,内存耗尽,则内存数据库虽然初始化成功,但是性能堪忧。(8) 接下来为所有内存数据库初始化时,数据不在内存的实时事务设置定时器,在开始时间Ts前 Y*M的时间Ti启动该事务的数据装入事务,Y是一个比较大的正数,以保证该事务的数据可以换入(在 ERTMMDB中Y的初始化值为3)。把设置了定时器的实时事务按照Ti和非实时事务的开始时间按照时间顺序排列,随机发生的非实时事务排在最后。如果事务的开始时间相同,则截止期和数据有效期 最早的最优先如果在装入此类事务的过
12、程中,内存耗尽或者内存足够大把全部队列的事务都装入完 毕,都宣布内存数据库初始化成功完成。以上的装入顺序保证了无论内存有多大,装入的数据从事务类型、事务的开始时间和截止期,以及数 据的有效期来看都是最应该装入的数据。而且也给后来的数据换出及如何方便地换出最应该换的数据 打下了基础。四、内存数据库的关键技术:1.数据组织结构:目前较通用的数据组织结构有基于关系表的区段式的组织结构和基于对象的组织结构。 区段式数据组织结构目前绝大多数数据库都是数据基于关系表的关系数据库,在关系数据库中往往使用二维的关系表来保 存数据。二维表在磁盘数据库中已被广泛使用,使用二维表保存数据主要是维护两方面信息,即描述
13、 信息和记录信息。所谓描述信息即指表名,个字段名及类型信息,索引,主键等用于描述关系表的信 息;而记录信息则是保存在关系表中的每一条记录的数据内容。在关系数据库往往使用区段式的数据 组织结构,区段式数据组织结构,将共享内存划分为若干个“分区”,每个分区存储关系数据库的一个 关系。每个分区又是由若干固定长度的“段”(也称作“页”)组成,一个段往往是共享内存动态分配 的一个单位。而数据库具体的数据记录则保存在段中分配的一个记录块中。区段式数据组织结构的示 意图如图所示:由上述可知,在采用区段式的数据组织结构的数据库中,一个记录的地址信息由一个三元组 标志,其中P是分区号,一般对应于一个关系表名,S
14、是段号,标志组成这个分区的具体的段,L是 段内记录槽号,主要保存了记录在段内的偏移和长度,用来在段内进行寻址。从而通过这个三元组可 以唯一的定位一个记录的具体位置。当前基于关系表的内存数据库一般都采用区段式的数据组织方式, 较典型的代表有SQLite。 基于对象的数据组织结构除了区段式的数据组织形式外,随着面向对象技术在内存数据库的应用和对象数据库的兴起很多数据 库采用了基于对象的组织结构。当采用基于对象的数据组织结构时,数据库的记录,记录的索引都用 对象来实现,以对象为单位进行内存的分配,记录对象之间和索引对象之间的联系由对象自身来维持。 基于对象的数据组织结构示意图如图所示:Object
15、-Tji bits ParlAbk。硕IjibLe ObjecETjible Objecl:F-Retard Ptr-Lmlei Pti/Beroid Objec tRecord ObjectTIM 1Fm 2HM iiTim 点;impPrePn-Truki Objec-c-JLitdeiN ode Pcilb由图可知在使用基于对象的数据组织结构时往往使用指针来维持对象之间的联系,较典型的基于对象 的内存数据库如fastDB则采用了这种数据组织方式。2.索引的结构:内存数据库由于其工作的主版本保存在内存中,所以内存数据库的索引选择应结合存储介质的特点, 从而通过索引的建立来保证内存数据库查寻
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 内存 数据库 实现
链接地址:https://www.31ppt.com/p-5040361.html