一种支持关系数据并行处理的内存存储结构及实现方法

文档序号:6402996阅读:169来源:国知局
专利名称:一种支持关系数据并行处理的内存存储结构及实现方法
技术领域
本发明涉及内存存储结构技术领域,特别涉及一种支持关系数据并行处理的内存存储结构及实现方法。
背景技术
随着制造工艺的快速发展,微处理器频率不断提升。但到了 2005年,当主频接近4GHz时,英特尔公司和AMD (超微半导体公司)发现,速度也会遇到自己的极限:那就是单纯的主频提升,已经无法明显提升系统整体性能。主频提升造成功率增大,散热问题也越来越成为一个无法逾越的障碍。于是微处理器开始向多核方面发展,即在一枚处理器中集成多个完整的计算内核。如今,采用多核微处理的电脑随处可见,很多手机也都采用双核甚至四核。随之也推动了并行计算技术的发展,以充分利用多核资源提高处理速度。很多编程语言都增加了对并行计算的支持,对原有的简单数据结构进行了增强。但对于关系型结构,通常支持不好,导致很多问题:
1、存储结构并没有针对并 行处理设计;
2、数据加载没有采用并行,数据操作性能不够理想;
3、修改数据时加排他锁,导致并发性能问题。本发明针对以上问题提出了一种有效的解决办法。

发明内容
为了解决现有技术的问题,本发明提供了一种支持关系数据并行处理的内存存储结构及实现方法,在数据加载、读写访问、排序、投影、联接等数据操作上具有良好的性能,尤其适用于在多处理器或多核计算机上进行并行计算。本发明所采用的技术方案如下:
一种支持关系数据并行处理的内存存储结构,其结构采用列存储方式,一个存储结构由多个列组成,每个存储结构中包含一列隐含列,数据类型为32位整数,记录所在行的数据版本,用于乐观并发控制。本发明从以下三个方面对本存储结构进行说明:
1、结构组成。本存储采用列存储方式,数据存储在列(CoIumn )中。一个存储结构由多个列组成,也称为表(Table)。每个存储结构中均包含一列名称为Version的隐含列,数据类型为32位整数,记录所在行的数据版本,用于乐观并发控制。对于关系型数据,同一列中的数据具有相同的数据类型,采用数组方式存放。相对于传统的将数据存储在行上的方式,列存储在修改存储结构,如增加、删除列时非常容易快速。基于列的众多操作,如联接和投影,也具有良好的性能。在此基础上,优选的使用泛型列来支持各种数据类型。众所周知,值类型和引用类型之间的相互转换经常会出现装箱拆箱的性能问题。使用泛型列,列在初始化时进行数据类型指定,每个列的数据类型是固定的,对于列的所有操作都不会产生装箱拆箱的性能问题。本存储结构也包含行(Row)的概念,使用并行辅助线程技术预先准备数据,为每个列增加一个行号索引列,以加快行遍历速度。消除列访问数据的劣势,达到类似行数据访问的效果。因此,开发人员可通过行获取和修改数据。开发人员获取的行数据是一份快照,操作后可调用行的Save方法将修改保存至列存储结构。2、访问接口。本存储结构对外提供以下访问接口:
数据加载:从数据源加载数据;
表结构修改:增加列、删除列;
数据读写:按行读写、按列读写。3、并行支持。本发明中的列存储结构在多个操作中采用了并行处理以提高性能。首先,数据加载时,列存储结构会自动为每个列开启一个线程,一个线程只负责一个列的数据加载。从数据源加载的数据通常是行数据,还需要开启一个线程将行数据按列拆分,拆分后的数据交给列数据加载线程异步载入各列。数据源加载数据、行数据拆分及列数据加载是流水并行的,能最大程度减少数据加载时间。由于多线程并行执行,能有效减少数据加载时间,尤其是大数据量加载时。数据加载时间缩短,也减少了对各种数据库、线程、内存等资源的长时间占用,可有效提高整体性能
其次,对于关系型数据,按行访问比较普遍。因此列存储结构需要从各列取数,组合成行,供外部使用。这通常会增加操作耗时,对整表遍历这种操作影响较大。在按行遍历时,存储结构自动开启一个线程,预先将后续的数据组合成行,这样可以有效的提高效率。再次,本存储结构采用乐观锁的方式处理并发,保证并行修改时的数据一致性。开发人员获取的行快照数据,包含了隐藏列Version的值,即当前数据的版本号。开发人员调用行的GetItem和SetItem获取和修改行快照中的数据,完成后调用Save方法保存。列存储结构会判断行快照中Version列值是否与结构中同一行的Version是否相等,如果相等,将将快照中修改的数据合并至列存储结构,并将该行Version列值加I ;若不同,则认为已被其它线程修改,将抛出StaleDataException。客户程序捕获此异常后,应重新读取数据再次处理。使用乐观锁代替代悲观锁,能有效解决性能、死锁等问题。综上所述,本发明的存储结构采用列存储方式,内部封装了并行算法,提供了乐观锁并发处理机制,同时对外提供简单易用的访问接口。本发明的一种支持关系数据并行处理的内存存储结构及实现方法,其数据存储在列上,而不是存储在行上,这种方式在修改表结构时具有先天的优势,操作非常快速:增加列和移除列不涉及对数据的修改,假设数据存储在行上,增加一个列,行上的每条数据需要以此进行修改。另外,对于整列数据的读取,只需读取出整个列存储的数组数据即可,完全避免了行存储逐行读取数据的问题。同时,基于列存储的众多操作,如联接和投影,也具有良好的性能。使用泛 型列来支持各种数据类型。众所周知,值类型和引用类型之间的相互转换经常会出现装箱拆箱的性能问题。使用泛型列,列在初始化时进行数据类型指定,每个列的数据类型是固定的,对于列的所有操作都不会产生装箱拆箱的性能问题。规避了.NET DataTable只能按行遍历、无法并发操作的弊端,在设计数据的加载、计算、关联、排序、投影、分组等常用操作的算法时,采用并行计算的设计思路,充分发挥硬件的多核优势和性能。另外,在内部将数据和并行操作封装在一起,既符合面向对象的开发要求,又达到了高内聚低耦合目的。使用并行辅助线程技术预先准备数据,为每个列增加一个行号索引列,以加快行遍历速度。考虑到基于行的访问数据方式,对列存储结构来讲是一种劣势,因此使用并行辅助线程预先准备好数据,增加一个行索引列来标识各列,以期将这种劣势消除,达到类似行数据访问的效果。使用基于整形数据版本列(Version列)的乐观锁处理机制,即:每一行的数据都存在一个整形的版本,数据访问时基于拿到的当前版本进行处理,这种方式有效避免了数据操作时施加的排他锁造成的并发问题。本发明提供的技术方案带来的有益效果是:
关系型数据以数组的形式存储在列上,整张表由多个列组成;内部使用泛型列来支持各种数据类型,以减少装箱拆箱带来的性能消耗;规避了.NET DataTable只能按行遍历、无法并发操作的弊端。在本数据结构内部,对数据的加载、计算、关联、排序、投影、分组等操作,在算法上基于并行计算方式,以期获得最佳的性能;使用并行辅助线程技术预先准备行数据,以加快按行遍历的速度;基于乐观锁机制处理并发访问冲突,保证数据一致性。



图1为本发明的一种支持关系数据并行处理的内存存储结构及实现方法的UML类 图2为本发明的一种支持关系数据并行处理的内存存储结构及实现方法的实施例1的员工数据列存储示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例一
如附图1所示,一种支持关系数据并行处理的内存存储结构,其结构采用列存储方式,一个存储结构由多个列组成,每个存储结构中包含一列隐含列,数据类型为32位整数,记录所在行的数据版本,用于乐观并发控制。本实施例中,使用泛型列来支持各种数据类型。本实施例中,存储结构也包含行的概念,使用并行辅助线程技术预先准备数据,为每个列增加一个行号索引列。本实施例的存储结构对外提供以下访问接口:
数据加载:用于从数据源加载数据;表结构修改:用于增加列、删除列;
数据读写:用于按行读写、按列读写。如附图2所示,使用本发明中的关系存储结构作为载体,一个典型的应用如下: 开发人编写代码执行数据查询,获取到员工表Employee的DbDataReader,开发人员将 此DbDataReader传给本关系存储结构的实例的Load方法。调用代码如下:
权利要求
1.一种支持关系数据并行处理的内存存储结构,其结构采用列存储方式,一个存储结构由多个列组成,每个存储结构中包含一列隐含列,数据类型为32位整数,记录所在行的数据版本,用于乐观并发控制。
2.根据权利要求1所述的一种支持关系数据并行处理的内存存储结构,其特征在于,使用泛型列来支持各种数据类型。
3.根据权利要求2所述的一种支持关系数据并行处理的内存存储结构,其特征在于,所述的存储结构也包含行的概念,使用并行辅助线程技术预先准备数据,为每个列增加一个行号索引列。
4.根据权利要求1-3中任意一项所述的一种支持关系数据并行处理的内存存储结构,其特征在于,所述的存储结构对外提供以下访问接口: 数据加载:用于从数据源加载数据; 表结构修改:用于增加列、删除列; 数据读写:用于按行读写、按列读写。
5.一种支持关系数据并 行处理的内存存储结构的实现方法,包括以下步骤: 数据加载时,列存储结构会自动为每个列开启一个线程,一个线程只负责一个列的数据加载,如果从数据源加载的数据是行数据,还需要开启一个线程将行数据按列拆分,拆分后的数据交给列数据加载线程异步载入各列。
6.根据权利要求5所述的一种支持关系数据并行处理的内存存储结构的实现方法,其特征在于,对于关系型数据,在按行遍历时,存储结构自动开启一个线程,预先将后续的数据组合成行。
7.根据权利要求5所述的一种支持关系数据并行处理的内存存储结构的实现方法,其特征在于,所述存储结构采用乐观锁的方式处理并发,保证并行修改时的数据一致性。
8.根据权利要求7所述的一种支持关系数据并行处理的内存存储结构的实现方法,其特征在于,所述采用乐观锁的方式处理并发具体包括以下步骤: A、获取行快照数据,所述的行快照数据包含了隐藏列的值,即当前数据的版本号; B、调用行的GetItem和SetItem获取和修改行快照中的数据,完成后调用Save方法保存; C、列存储结构判断行快照中隐藏列的值是否与结构中同一行的隐藏列的值相等,如果相等,将快照中修改的数据合并至列存储结构,并将该行隐藏列的值加I ;若不同,则认为已被其它线程修改,将抛出StaleDataException,客户程序捕获此异常后,重新读取数据再次处理。
全文摘要
本发明涉及内存存储结构技术领域,特别涉及一种支持关系数据并行处理的内存存储结构及实现方法。其存储结构采用列存储方式,一个存储结构由多个列组成,每个存储结构中包含一列隐含列,数据类型为32位整数,记录所在行的数据版本,用于乐观并发控制。本发明的一种支持关系数据并行处理的内存存储结构及实现方法,在数据加载、读写访问、排序、投影、联接等数据操作上具有良好的性能,尤其适用于在多处理器或多核计算机上进行并行计算。
文档编号G06F9/38GK103246498SQ20131017424
公开日2013年8月14日 申请日期2013年5月13日 优先权日2013年5月13日
发明者陆大鹏, 孙立新 申请人:浪潮集团山东通用软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1