热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

嵌入式内存数据库引擎的设计

欢迎进入IT技术社区论坛,与200万技术人员互动交流进入1嵌入式内存数据库技术发展的现状数据库理论与技术的发展极其迅速,其应用日益广泛,在当今的信息社会中,它几乎无所不在。以关系型为代表的三大经典(层次、网状、关系)型数据库在传统的(商务和管

欢迎进入IT技术社区论坛,与200万技术人员互动交流 >>进入 1 嵌入式内存数据库技术发展的现状 数据库理论与技术的发展极其迅速,其应用日益广泛,在当今的信息社会中,它几乎无所不在。以关系型为代表的三大经典(层次、网状、关系)型数据库在传统的(商务和管

欢迎进入IT技术社区论坛,与200万技术人员互动交流 >>进入

  1 嵌入式内存数据库技术发展的现状

  数据库理论与技术的发展极其迅速,其应用日益广泛,在当今的信息社会中,它几乎无所不在。以关系型为代表的三大经典(层次、网状、关系)型数据库在传统的(商务和管理的事务型)应用领域获得了极大成功,然而它们在现代的(非传统)工程和时间关键型应用面前却显得软弱无力,面临着新的严峻的挑战,由此而导致了嵌入式实时数据库的产生和发展。在实时应用中,事务在运行前的操作逻辑(操作类型、顺序等)、数据集及其结构、行为以及时间的相关性等都是可预分析的。然而,对磁盘数据库而言,数据的I/O 是造成事务执行时间不确定、预报不准确的关键因素。为此,要求以大内存作为实时数据库的主要存储介质,使一个事务在活动期间没有I/O,以达到较准确的预报,从而满足实时事务的定时限制。但这要解决两个问题,就是适当的数据安置和适时的内外存交换。随着内存技术的高速发展,内存数据库技术日益成熟,在非实时系统中也得到了广泛的应用。

  内存数据库(MMDB)把数据库的主拷贝(即“工作版本”)常驻在内存,使系统性能得到了极大的提高。但是,由于所有操作直接作用于内存中的数据库主拷贝上,数据库极易受到操作系统和应用软件错误造成的破坏,而且,数据库恢复所包含的I/O 操作(如做日志、备份等)在事务运行不需要I/O 操作的内存数据库系统中也显得极为突出。因此,内存数据库的恢复机制对系统性能有重要的影响作用,内存数据库的恢复较之传统的磁盘数据库的恢复要复杂得多,也关键得多。数据恢复是内存数据库可靠、实用的关键,恢复技术的研究已成为MMDB 研究领域最热门的课题。

  2 内存数据库的定义

  内存数据库的定义不应涉及内存的大小、存取数据所需I/O 的多少、数据何时进入及怎样才能留驻内存等这些具体的实现技术,而只包含数据库常驻内存(而不是磁盘)、事务(不是系统)的数据存取只涉及内存的意思。其本质特征是其“主拷贝”或“工作版本”常驻内存,即活动事务只与实时内存数据库的内存拷贝打交道。显然,它要求较大的内存量,但并不要求任何时刻整个数据库都能存放在内存,即内存数据库系统还是要处理I/O。传统的磁盘数据库即使缓冲区足够大,以致可以容纳所有数据也不能算是一个MMDB。因为它是针对磁盘特性、在数据库常驻磁盘的假定下设计的。例如,索引结构还是针对磁盘存取的,数据的存取仍必须经过缓冲区管理等。内存数据库的组织与管理要求新的适于内存特点的数据结构和算法,对于数据的组织与安置、数据库存取、内外存数据交换、查询处理及优化、并发控制及数据库恢复都需要研究新的策略与机制。

  内存数据库是一个较新的研究领域,结合各方面参考,现给出如下定义:

  定义:设有数据库DB,DBM(t)是t 时刻DB 在内存中的数据集,DBM(t)真包含于DB; T S 为所有事务的集合,A T(t)是t 时刻的活动事务集,A T(t)真包含于T S;D t(T)为T 在t 时刻的操作数据集,D t(T)真包含于DB;若在任一时刻t,均有:

  对任一事务有T∈A T(t),D t(T)真包含于DBM(t)成立,则称DB 为一个内存数据库,简记为MMDB 。

  按此定义,MMDB 的“工作版本”(当然也可以是整个数据库)常驻内存,任何一个事务在执行过程中没有内外存间的数据I/O。显然,它需要一定的内存容量,但并不要求整个数据库都必须常驻在内存。

  3 内存数据库的特点

  3.1 内存数据库数据存储的组织和管理一个MMDB的逻辑整体主要由两个部分构成,即内存版本与外存版本。主存储器是易失内存,它存放MMDB的“工作版本”。它在逻辑上被划分为若干分区,一

  个分区用来存放一个关系的数据。每个分区又物理地由若干相互链接的块组成。一块是一个固定长度的连续区域,它是内外存I/O的单位,也是内存分配、回收以及对MMDB进行恢复的单位。索引与数据记录分离存放。

  NV-RAM(NO Vola tile RAM)兼有内存读写速度快和在后备电池维护的情况下非易失的特点,但价格昂贵,不便插拔,广泛用于嵌入式系统,并可与Flash-RAM配合使用,充当Flash-RAM 写缓冲区。NV-RAM是主存储器的拓延,目前可用UPS、固态磁盘或磁盘Cache等实现。主存数据与NV-RAM数据一起统称为MMDB的“内存版本”。

  磁盘存储器用来存放未在内存的那一部分数据库数据,同时也用作数据库恢复的备份,我们称之为“外存版本”。为便于实现内外存间的数据交换,可将磁盘数据在逻辑上划分为与内存块同样长度的定长块,建立相同类型的索引。

  3.2 事务处理

  当内存数据库用于非实时系统时,除了日志和系统恢复的具体方式跟传统数据库差异比较大以外,事务处理过程与传统数据库的事务处理相似;然而,当内存数据库用于实时系统时,既实时内存数据库中,事务处理由于受到了时间上的限制,传统数据库的事务处理已经不再适用。传统的“ACID” 的事务概念及模型对实时事务不适合。实时事务表现出了许多不同的特征,如实时性和相关性。虽然实时事务的正确性与传统事务一样,也包括数据库状态正确性和事务执行正确性两个方面,但其含义与内容有很大的不同。在实时事务中,数据库状态正确性包含内部一致性和时间一致性,事务执行正确性则包含其结果正确性、行为正确性、结构正确性和时间正确性等。事务调度也要采取相关的实时调度算法。本文中讨论的内存数据库引擎针对非实时系统。

  3. 3 系统恢复

  数据库的备份是数据库的副本以及一些控制信息,在出现故障的情况下,可以随时用它进行恢复。数据库备份最小化了数据丢失,能够让您使用恢复过程,从备份副本中重新构造失败的数据库。有多种类型的失败导致需要恢复数据库。其中包括语句失败、用户错误、进程失败、数据库实例失败、媒介失败等。但不是所有类型的失败都需要进行人工交互。但是,在内存数据库系统中,由于所有操作都直接作用于内存中的数据库主拷贝上,数据库极易受到操作系统和应用软件错误造成的破坏,因此MMDB的恢复技术如备份、检验点(Checkpoint)和重启动(restart)等都较常规的磁盘数据库(DRDB)复杂。人们从体系结构、事务提交、日志系统到备份、检验点算法等各个方面进行了大量的研究和探索。日志管理是内存数据库恢复机制中至关重要的一环。由于内存有易失性,日志最好保存于另一稳妥的介质上(如磁盘、非易失内存等),而对日志的I/O操作又将在某种程度上影响MMDB的性能,可能成为瓶颈影响系统的事务吞吐量。为此,人们研究了各种各样的解决办法,比如构造非易失内存用于保存部分日志;采用“成组提交”的技术,使用影子内存技术等来解决日志瓶颈问题。在检验点方面,为了提高系统效率,通常力图使检验点操作和事务处理同时进行。为了提高速度指标和综合性能,MMDB系统往往利用附加的硬件设备如非易失内存、专用的日志处理器、检验点处理器等来支持高效、快速的数据恢复。

  4.1 3G平台中数据库子系统整体架构

  4.1.1 数据库系统各功能模块在3G平台系统中的位置 3G软件平台包括图1所示的除OS和BSP外的6大软件子系统。

  DataBase 子系统负责管理平台的物理资源和平台实现的信令、协议的配置信息,同时向其它子系统提供数据库访问接口。它工作于操作系统之上。承载子系统向业务子系统、信令子系统、OAM和网管子系统提供ATM、IP、等方面的承载服务。它工作于操作系统和DataBase 子系统之上。 信令子系统实现窄带No.7 信令、宽带No.7 信令、IP信令、网关控制信令,向业务处理子系统提供服务。它工作于操作系统、DataBase子系统和承载子系统之上。系统控制子系统负责对整个系统的监控、启动、版本下载等。它工作于操作系统和DataBase 子系统之上。

  OAM 和网管子系统提供平台与网管后台的统一接口,负责对平台的协议、信令进行配置和管理,以及提供必要的统计数据。它工作于操作系统、承载子系统、DataBase子系统之上。

  业务处理子系统实现系统提供的各种业务。它工作于操作系统、承载子系统、信令子系统、DataBase子系统之上。

  数据库子系统分布在3G 平台各处理器上。从结构上看数据库子系统属于分布式数据库系统;主要为平台各个子系统提供数据支持,并为将来其上的扩展业务提供支持易扩充机制的数据库模型。

  4.1.2 数据库子系统内部模块划分

  数据库子系统内部划分五大功能模块,支持数据来源为RAM、FLASH、硬盘特定格式以及商用数据库等多种介质。五大功能模块分别是:输入输出模块、对象管理模块、业务处理模块、维护管理模块及平台系统工具包。

  输入输出模块(I/O模块)负责完成整个平台所有与硬件介质相关的数据、装载、转储、存储空间管理等等相关功能。

  对象管理模块是整个平台的核心模块(DBCORE),完成主体功能,即对内存数据、表、索引、锁等等系列对象的核心组织功能,对整个系统的性能高低有决定性的影响。提供简易的内部并发控制手段。

  业务处理模块是针对数据库平台的用户提供的使用接口层,完成对内存数据库的访问服务。可以支持API 方式及类SQL 访问方式。支持分布式数据访问方式。 维护管理模块完成对整个平台系统的监控及管理,包括探针、告警、日志、实时业务跟

  踪、远程网络访问等等系列功能的实施。 平台系统工具包针对各模块均有完善的工具支持,具体如下:介质层工具:各类特定介质的数据存储文件检索、修改、生成。 对象管理模块工具:根据对象属性区别性选择生成主体程序框架,若无特殊要求,生成

  的代码可直接用于对象管理。 I/O 模块工具:根据内存数据库分布模型,生成数据装载、转储及内存数据存储空间

  管理等框架代码;业务处理子系统工具,常规API 代码生成。 维护管理模块工具:接口跟踪、日志等输出文件的检索、管理工具。其他:各类对象(表、索引……)设计及相关说明文档生成。

  4. 2 系统对象设计原理和处理流程本子系统是按照面对对象的方法进行设计的,因此在叙述系统处理流程时以子系统的各个对象为主线,而同步流程和监控流程设计上有其自身特点,对它们的叙述以过程为主线。

  本子系统的数据分为数据表、索引、队列、同步实例、监控实例、单向资源队列六大类。其中数据表为数据库组织的核心,然后为数据定位的方便建立索引,为资源管理的方便建立了队列,出于数据同步的需要建立了同步实例,出于资源监控的需要,建立了监控实例,而单向资源队列作为辅助数据表和同步实例的内存管理之用。

  以上除单向资源队列外每一类数据都定义为系统的数据对象类,系统对于同一对象类的数据统一定义,统一管理。一个具体的数据对象称为某一数据对象类的数据实例。系统为表、索引、队列、同步、监控的所有数据实例统一分配唯一一个32 位整数加以标识,称为数据实例句柄。对数据实例的存取都是通过数据实例句柄进行的。采用这种方式的一个优点是数据管理的稳定性不随着数据实例的增加而变化,有利于系统的稳定。另一个优点是便于数据对象类的扩充,由于不同数据对象类别分别管理,数据对象类之间的独立性确保在扩充数据对象类后,不破坏原有数据的安全性。

  单向资源队列作为在表对象和同步对象内部使用的对象。没有统一分配句柄,相关的表通过保存单向资源队列对象的指针实现操作。

  5 小结:

  本文作者创新点是本文首先介绍了嵌入式内存数据库技术现状,然后简单介绍了内存数据库技术的特点等并提出了一个适用于3G平台的嵌入式内存数据库引擎,随着计算机技术的高速发展和人们对信息处理速度不断增长的需求,大容量的内存数据库和经过精简的嵌入式内存数据库将会有越来越大的应用空间。目前,还没有比较好的通用的嵌入式内存数据库产品,进行这方面的开发和实现将会有很大的市场潜力和空间。


推荐阅读
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 无线认证设置故障排除方法及注意事项
    本文介绍了解决无线认证设置故障的方法和注意事项,包括检查无线路由器工作状态、关闭手机休眠状态下的网络设置、重启路由器、更改认证类型、恢复出厂设置和手机网络设置等。通过这些方法,可以解决无线认证设置可能出现的问题,确保无线网络正常连接和上网。同时,还提供了一些注意事项,以便用户在进行无线认证设置时能够正确操作。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文详细介绍了相机防抖的设置方法和使用技巧,包括索尼防抖设置、VR和Stabilizer档位的选择、机身菜单设置等。同时解释了相机防抖的原理,包括电子防抖和光学防抖的区别,以及它们对画质细节的影响。此外,还提到了一些运动相机的防抖方法,如大疆的Osmo Action的Rock Steady技术。通过本文,你将更好地理解相机防抖的重要性和使用技巧,提高拍摄体验。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 数字账号安全与数据资产问题的研究及解决方案
    本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
author-avatar
jxxpoo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有