一种用于内存数据库的数据处理方法及系统与流程

文档序号:18267127发布日期:2019-07-27 09:16阅读:198来源:国知局
本发明涉及内存数据库
技术领域
:,并且更具体地,涉及一种用于内存数据库的数据处理方法及系统。
背景技术
::随着国产软件的逐渐壮大,政府对国产软件进行了大力的支持,使得国产软件得到了迅速的发展。国产数据库是国产软件的代表之一。目前随着安全可靠市场一期二的建立,安全可靠替代工程逐步开展,系统的不断升级优化,各省的安全可靠数据越来越多,面临着大量的数据迁移工作。而且为了适应新的应用系统,需要对迁移过来的越来越多地数据进行大量地处理。迫切需要一种技术能广泛地适应多种数据库中数据类型,能高速地读写和处理大量数据,从而有效地缩短单项工程的实施周期,支持已有环境中异构数据的迁移,实现将海量数据从其他数据库迁移到国产数据库中。内存数据库技术恰恰满足了这一需求。无论是什么种类数据库都是遵循数据库原理设计,从数据库原理中我们可以知道索引技术对数据库读写速度的影响有多大,在相同硬件环境下,检索索引的速度决定了数据库的处理速度。现在绝大多数内存数据库由于是刚刚从传统数据库升级过来的,有些还采用旧的基于硬盘优化的索引技术,采用空间换时间策略,具有存储空间利用率低,执行指令冗长,执行效率低等缺点。传统的数据库引擎面临的问题包括:1.保护内存中的数据结构而采用的闩锁(latch)引起的热点(hotspots)问题;2.使用锁机制控制多版本并发带来的阻塞等问题;3.使用解释型(interpretation)语言的执行计划的执行效率问题。技术实现要素:本发明提出一种用于内存数据库的数据处理方法及系统,以解决如何一致、可靠以及高效地实现海量数据迁移的问题。为了解决上述问题,根据本发明的一个方面,提供了一种用于内存数据库的数据处理方法,其特征在于,所述方法包括:基于哈希hash索引技术将数据中的关键词直接映射为存储地址;根据事务所指示的数据操作请求创建新的版本行,并用时间戳标记事务和行版本实现无锁事务;其中,所述数据操作请求包括:增加、删除、修改和查询;根据预设的隔离级别对所述事务进行安全性验证;其中,所述预设的隔离级别包括:快照隔离级别、可重复读隔离级别或序列化隔离级别;当所述事务通过安全性验证时,进入提交处理阶段用于写日志,并将新的版本行数据对其它事务可见。优选地,其中所述方法还包括:当所述事务为对数据进行更新时,采用比较和更新cas实现无锁操作,通过比对物理地址的值与携带值是否匹配,匹配则可操作,不匹配则拒绝操作。优选地,其中所述方法还包括:当所述事务为对数据页进行增量更新时,在数据上生成一个新的增量地址作为数据页的访问入口,并采用cas完成映射表中物理新地址的映射,并对针对同一数据页可能出现的同时更新操作按照预设的选择机制进行仲裁,胜出者将进行更新,失败者操作则抛出错误信息。优选地,其中所述方法还包括:当由于更新链过长造成访问数据的时间复杂度提升时,利用查询器生成新的数据页,将物理地址指向新的数据页,并将老的数据页链表的内存释放。优选地,其中所述方法还包括:将利用优化器确定的物理执行计划转译为c语言代码后,通过编译器编译为dll机器代码。根据本发明的另一个方面,提供了一种用于内存数据库的数据处理系统,其特征在于,所述系统包括:数据转化单元,用于基于哈希hash索引技术将数据中的关键词直接映射为存储地址;事务操作处理单元,用于根据事务所指示的数据操作请求创建新的版本行,并用时间戳标记事务和行版本实现无锁事务;其中,所述数据操作请求包括:增加、删除、修改和查询;事务验证单元,用于根据预设的隔离级别对所述事务进行安全性验证;其中,所述预设的隔离级别包括:快照隔离级别、可重复读隔离级别或序列化隔离级别;事务提交单元,用于当所述事务通过安全性验证时,进入提交处理阶段用于写日志,并将新的版本行数据对其它事务可见。优选地,其中所述事务操作处理单元,还包括:当所述事务为对数据进行更新时,采用比较和更新cas实现无锁操作,通过比对物理地址的值与携带值是否匹配,匹配则可操作,不匹配则拒绝操作。优选地,其中所述事务操作处理单元,还包括:当所述事务为对数据页进行增量更新时,在数据上生成一个新的增量地址作为数据页的访问入口,并采用cas完成映射表中物理新地址的映射,并对针对同一数据页可能出现的同时更新操作按照预设的选择机制进行仲裁,胜出者将进行更新,失败者操作则抛出错误信息。优选地,其中所述事务操作处理单元,还包括:当由于更新链过长造成访问数据的时间复杂度提升时,利用查询器生成新的数据页,将物理地址指向新的数据页,并将老的数据页链表的内存释放。优选地,其中所述系统还包括:机器语言获取单元,用于将利用优化器确定的物理执行计划转译为c语言代码后,通过编译器编译为dll机器代码。本发明提供了一种用于内存数据库的数据处理方法及系统,包括:基于哈希hash索引技术将数据中的关键词直接映射为存储地址;根据事务所指示的数据操作请求创建新的版本行,并用时间戳标记事务和行版本实现无锁事务;根据预设的隔离级别对所述事务进行安全性验证;其中,所述预设的隔离级别包括:快照隔离级别、可重复读隔离级别或序列化隔离级别;当所述事务通过安全性验证时,进入提交处理阶段用于写日志,并将新的版本行数据对其它事务可见。本发明采用统一标准定义数据(元数据)来作为数据库定义基础,可扩展性强;在并发锁问题上采用乐观并发中的使用多版本时间戳数据行控制来实现无锁事务;采用hash预取算法索引方式来提升内存空间使用效率和cpu指令执行效率,比一般内存数据库的数据处理具有速度很快;在执行数据迁移过程中出现错误时,通过多线程来快速地准确定位错误原因,即保证了数据处理的高速快捷,又兼顾了出现错误时的准确方便;拥有统一标准化的接口,能方便适用于多种平台和工具上。附图说明通过参考下面的附图,可以更为完整地理解本发明的示例性实施方式:图1为根据本发明实施方式的用于内存数据库的数据处理方法100的流程图;图2为根据本发明实施方式的内存数据库系统架构图;图3为根据本发明实施方式的逻辑id与物理地址一一映射的示意图;图4为根据本发明实施方式的事务处理的示意图;图5为根据本发明实施方式的对数据进行更新的实例图;图6为根据本发明实施方式的对数据页进行更新的实例图;图7为根据本发明实施方式的利用查询器进行整理的示意图;图8为根据本发明实施方式的进行数据更新的实例图;图9为根据本发明实施方式的将解释性语言替换为机器语言的示意图;以及图10为根据本发明实施方式的用于内存数据库的数据处理系统1000的结构示意图。具体实施方式现在参考附图介绍本发明的示例性实施方式,然而,本发明可以用许多不同的形式来实施,并且不局限于此处描述的实施例,提供这些实施例是为了详尽地且完全地公开本发明,并且向所属
技术领域
:的技术人员充分传达本发明的范围。对于表示在附图中的示例性实施方式中的术语并不是对本发明的限定。在附图中,相同的单元/元件使用相同的附图标记。除非另有说明,此处使用的术语(包括科技术语)对所属
技术领域
:的技术人员具有通常的理解含义。另外,可以理解的是,以通常使用的词典限定的术语,应当被理解为与其相关领域的语境具有一致的含义,而不应该被理解为理想化的或过于正式的意义。图1为根据本发明实施方式的用于内存数据库的数据处理方法100的流程图。如图1所示,本发明的实施方式提供的用于内存数据库的数据处理方法,采用统一标准定义数据(元数据)来作为数据库定义基础,可扩展性强;在并发锁问题上采用乐观并发中的使用多版本时间戳数据行控制来实现无锁事务;采用hash预取算法索引方式来提升内存空间使用效率和cpu指令执行效率,比一般内存数据库的数据处理具有速度很快;在执行数据迁移过程中出现错误时,通过多线程来快速地准确定位错误原因,即保证了数据处理的高速快捷,又兼顾了出现错误时的准确方便;拥有统一标准化的接口,能方便适用于多种平台和工具上。本发明的实施方式提供的用于内存数据库的数据处理方法100从步骤101处开始,在步骤101基于哈希hash索引技术将数据中的关键词直接映射为存储地址。在本发明的实施方式中,基于hash索引技术,hash就是把关键词直接映射为存储地址,达到快速寻址的目的,即addr=h(key),其中key为关键词;h为哈希函数。主要有以下几种常用的哈希函数:1)除留余数法(divisionmethod),h(key)=keymodp,p一般为质数;2)随机数法(randommethod),h(key)=random(key),random为随机函数;3)平方取中法(midsquaremethod)。hash索引结构不需要额外的存储空间,并且能够在时间复杂度下准确定位到所查找的数据,将数据库中的数据查找时间代价优化至最小。图2为根据本发明实施方式的内存数据库系统架构图。如图2所示,本发明实施方式中的内存数据库是一个基于内存优化的高性能的oltp数据库引擎,且数据是可持久化的,它完全集成于基于列存储引擎混合透明使用如图1-2,且是基于现代多核cpu架构设计的。在并发锁上采用乐观并发中使用多版本时间戳数据行控制来实现无锁事务,解释性语言执行效率采用重编译为机器代码(dll)提升cpu效率。内存中的数据页大小是弹性的,以便于增量更新deltaupdate,因为现有传统的updateinplace会使得现有的cpucache失效,在多核架构下会使得性能受限。数据页在内存中通过映射表管理,将每个数据页的逻辑id与物理地址一一映射,如图3所示。在步骤102,根据事务所指示的数据操作请求创建新的版本行,并用时间戳标记事务和行版本实现无锁事务;其中,所述数据操作请求包括:增加、删除、修改和查询。优选地,其中所述方法还包括:当所述事务为对数据进行更新时,采用比较和更新cas实现无锁操作,通过比对物理地址的值与携带值是否匹配,匹配则可操作,不匹配则拒绝操作。优选地,其中所述方法还包括:当所述事务为对数据页进行增量更新时,在数据上生成一个新的增量地址作为数据页的访问入口,并采用cas完成映射表中物理新地址的映射,并对针对同一数据页可能出现的同时更新操作按照预设的选择机制进行仲裁,胜出者将进行更新,失败者操作则抛出错误信息。优选地,其中所述方法还包括:当由于更新链过长造成访问数据的时间复杂度提升时,利用查询器生成新的数据页,将物理地址指向新的数据页,并将老的数据页链表的内存释放。在本发明的试试方式中,为了解决保护内存中的数据结构而采用的闩锁(latch)引起的热点(hotspots)问题;以及使用锁机制控制多版本并发带来的阻塞等问题,本发明在并发锁上采用乐观并发中使用多版本时间戳数据行控制来实现无锁事务。图4为根据本发明实施方式的事务处理的示意图。如图4所示,将一个事务分为三个阶段,正常事务处理步骤用于我们的数据操作dml则创建新的版本行。验证提交阶段验证这个事务是否可以安全提交(根据版本数据)。提交处理阶段用于写日志,并将新的版本行数据对其它事务可见。在对数据进行更新时采用compareandswap(cas)实现无锁(latchfree)操作cas,通过比对物理地址的值与携带值是否匹配,匹配则可操作,不匹配则拒绝操作。例如,如图5所示,某个进程在携带的地址m的值为20,匹配地址m的实际值,如果为20则可以修改,否则拒绝。图6为根据本发明实施方式的对数据页进行更新的实例图。如图6所示,在对数据页进行增量更新时每次操作均会在数据上生成一个新的增量地址作为数据页的访问入口,并采用cas完成映射表中(mappingtable)物理新地址的映射(deltaaddress),并对针对同一数据页可能出现的同时更新进行仲裁,此时胜出者将进行更新,失败操作则抛出错误信息,图7为根据本发明实施方式的利用查询器进行整理的示意图。如图7所示,由于在这样的操作方式下,当更新链过长时,访问数据会造成时间复杂度提升而影响性能,查询器会在合适的情形下进行整理,生成新的数据页,并将物理地址指向新的数据页,而老的数据页链表将会作为垃圾回收释放内存。由于数据页是弹性的,所以可能造成数据页过大或是过程。本产品系统会在其认为合适的情形下采取页分裂或是合并。在步骤103,根据预设的隔离级别对所述事务进行安全性验证;其中,所述预设的隔离级别包括:快照隔离级别、可重复读隔离级别或序列化隔离级别。从图4可以看出,并不是每个事务都可以安全提交的。在验证阶段,系统会根据用户设定的隔离级别进行验证。系统提供三种隔离级别的支持分别为快照隔离级别(snapshotisolation),可重复读隔离级别(repeatablereadsisolation)及序列化隔离级别(serializable),这与传统的关系型数据库类似,snapshot中是无需验证的,而可重复则需在提交前再次验证与事务开始时的数据是否一致,如一致则可提交,否则不可提交。提交就是写日志记录变化,并将数据行中事务id替换成获取的时间戳,对其他事务可见。在步骤104,当所述事务通过安全性验证时,进入提交处理阶段用于写日志,并将新的版本行数据对其它事务可见。图8为根据本发明实施方式的进行数据更新的实例图。如图8所示,事务过程采用timestamps(时间戳(全局时钟))标记事务和行版本,每个事务开始时赋予开始时间戳begin_ts,用于读取正确的行版本(数据行同样均具有时间戳),行版本数据结束时间戳end_ts一般为正无穷(+∞)。当进行数据更新时创建新的版本行,并将旧的版本行end_ts修改为事务idxb(此处非时间戳),新的版本行的begin_ts同样标记为事务id(xb);然后获取事务的end_ts(唯一),确认可提交后,提交事务,并将新旧版本的事务id(xb)替换成获取的end_ts.至此完成一次操作。该操作中未涉及任何锁,因此不存在闩锁阻塞的问题。优选地,其中所述方法还包括:将利用优化器确定的物理执行计划转译为c语言代码后,通过编译器编译为dll机器代码。针对cpu执行效率将执行计划由解释性语言(interpreted)替换为机器语言(native)。优化器可以说是关系型数据库最复杂的部分了,简单说下系统优化器处理过程:一般来说一条语句交给优化器会进行绑定解析,生成解析树,然后进行语义分析生成逻辑执行计划,最后优化器再为逻辑执行计划基于成本生成物理的执行计划。而系统中选择native方式执行(将所执行语句通过存储过殊编译),在生成逻辑执行计划之后将会根据不同的算法,成本预估生成不同的物理执行计划,然后将物理执行计划转译成c语言代码再通过编译器将其编译成dll即机器代码,如图9所示。本发明的实现基于多核多线程优化技术(simd指令技术),以加快数据处理的速度;采用hash预取算法索引方式来提升内存空间使用效率和cpu指令执行效率。对于simd指令技术,指令流多数据流(singleinstructionmultipledata,simd)是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。在微处理器中,单指令流多数据流技术则是一个控制器控制多个平行的处理微元,例如intel的mmx、sse、avx以及amd的3dnow!技术,本系统只用到intel的simd技术。hash预取算法面向的是键和哈希值都是32位的场景,特地对内存环境进行了优化。此算法使用乘法散列,这种方法十分普遍、计算高效,更重要的是适用于矢量,达到了一次计算多个哈希函数的目的。针对现代处理器的simd架构,将键值与哈希值共同放在一个指令当中,达到大大减少指令数的目的,令每次所需的数据长度恰好等于l2的cacheline,大大降低了性能代价,在内存环境中,大大提高了cache的性能。图10为根据本发明实施方式的用于内存数据库的数据处理系统1000的结构示意图。如图10所示,本发明的实施方式提供的用于内存数据库的数据处理系统1000,包括:数据转化单元1001、事务操作处理单元1002、事务验证单元1003和事务提交单元1004。优选地,所述数据转化单元1001,用于基于哈希hash索引技术将数据中的关键词直接映射为存储地址。优选地,所述事务操作处理单元1002,用于根据事务所指示的数据操作请求创建新的版本行,并用时间戳标记事务和行版本实现无锁事务;其中,所述数据操作请求包括:增加、删除、修改和查询。优选地,其中所述事务操作处理单元,还包括:当所述事务为对数据进行更新时,采用比较和更新cas实现无锁操作,通过比对物理地址的值与携带值是否匹配,匹配则可操作,不匹配则拒绝操作。优选地,其中所述事务操作处理单元,还包括:当所述事务为对数据页进行增量更新时,在数据上生成一个新的增量地址作为数据页的访问入口,并采用cas完成映射表中物理新地址的映射,并对针对同一数据页可能出现的同时更新操作按照预设的选择机制进行仲裁,胜出者将进行更新,失败者操作则抛出错误信息。优选地,其中所述事务操作处理单元,还包括:当由于更新链过长造成访问数据的时间复杂度提升时,利用查询器生成新的数据页,将物理地址指向新的数据页,并将老的数据页链表的内存释放。优选地,所述事务验证单元1003,用于根据预设的隔离级别对所述事务进行安全性验证;其中,所述预设的隔离级别包括:快照隔离级别、可重复读隔离级别或序列化隔离级别。优选地,所述事务提交单元1004,用于当所述事务通过安全性验证时,进入提交处理阶段用于写日志,并将新的版本行数据对其它事务可见。优选地,其中所述系统还包括:机器语言获取单元,用于将利用优化器确定的物理执行计划转译为c语言代码后,通过编译器编译为dll机器代码。本发明的实施例的用于内存数据库的数据处理系统1000与本发明的另一个实施例的用于内存数据库的数据处理方法100相对应,在此不再赘述。已经通过参考少量实施方式描述了本发明。然而,本领域技术人员所公知的,正如附带的专利权利要求所限定的,除了本发明以上公开的其他的实施例等同地落在本发明的范围内。通常地,在权利要求中使用的所有术语都根据他们在
技术领域
:的通常含义被解释,除非在其中被另外明确地定义。所有的参考“一个/所述/该[装置、组件等]”都被开放地解释为所述装置、组件等中的至少一个实例,除非另外明确地说明。这里公开的任何方法的步骤都没必要以公开的准确的顺序运行,除非明确地说明。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1