CN103246498A - 一种支持关系数据并行处理的内存存储结构及实现方法 - Google Patents
一种支持关系数据并行处理的内存存储结构及实现方法 Download PDFInfo
- Publication number
- CN103246498A CN103246498A CN2013101742470A CN201310174247A CN103246498A CN 103246498 A CN103246498 A CN 103246498A CN 2013101742470 A CN2013101742470 A CN 2013101742470A CN 201310174247 A CN201310174247 A CN 201310174247A CN 103246498 A CN103246498 A CN 103246498A
- Authority
- CN
- China
- Prior art keywords
- data
- row
- parallel processing
- storage organization
- supporting
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及内存存储结构技术领域,特别涉及一种支持关系数据并行处理的内存存储结构及实现方法。其存储结构采用列存储方式,一个存储结构由多个列组成,每个存储结构中包含一列隐含列,数据类型为32位整数,记录所在行的数据版本,用于乐观并发控制。本发明的一种支持关系数据并行处理的内存存储结构及实现方法,在数据加载、读写访问、排序、投影、联接等数据操作上具有良好的性能,尤其适用于在多处理器或多核计算机上进行并行计算。
Description
技术领域
本发明涉及内存存储结构技术领域,特别涉及一种支持关系数据并行处理的内存存储结构及实现方法。
背景技术
随着制造工艺的快速发展,微处理器频率不断提升。但到了2005年,当主频接近4GHz时,英特尔公司和AMD(超微半导体公司)发现,速度也会遇到自己的极限:那就是单纯的主频提升,已经无法明显提升***整体性能。主频提升造成功率增大,散热问题也越来越成为一个无法逾越的障碍。
于是微处理器开始向多核方面发展,即在一枚处理器中集成多个完整的计算内核。如今,采用多核微处理的电脑随处可见,很多手机也都采用双核甚至四核。
随之也推动了并行计算技术的发展,以充分利用多核资源提高处理速度。很多编程语言都增加了对并行计算的支持,对原有的简单数据结构进行了增强。但对于关系型结构,通常支持不好,导致很多问题:
1、存储结构并没有针对并行处理设计;
2、数据加载没有采用并行,数据操作性能不够理想;
3、修改数据时加排他锁,导致并发性能问题。
本发明针对以上问题提出了一种有效的解决办法。
发明内容
为了解决现有技术的问题,本发明提供了一种支持关系数据并行处理的内存存储结构及实现方法,在数据加载、读写访问、排序、投影、联接等数据操作上具有良好的性能,尤其适用于在多处理器或多核计算机上进行并行计算。
本发明所采用的技术方案如下:
一种支持关系数据并行处理的内存存储结构,其结构采用列存储方式,一个存储结构由多个列组成,每个存储结构中包含一列隐含列,数据类型为32位整数,记录所在行的数据版本,用于乐观并发控制。
本发明从以下三个方面对本存储结构进行说明:
1、结构组成。
本存储采用列存储方式,数据存储在列(Column)中。一个存储结构由多个列组成,也称为表(Table)。每个存储结构中均包含一列名称为Version的隐含列,数据类型为32位整数,记录所在行的数据版本,用于乐观并发控制。
对于关系型数据,同一列中的数据具有相同的数据类型,采用数组方式存放。相对于传统的将数据存储在行上的方式,列存储在修改存储结构,如增加、删除列时非常容易快速。基于列的众多操作,如联接和投影,也具有良好的性能。在此基础上,优选的使用泛型列来支持各种数据类型。众所周知,值类型和引用类型之间的相互转换经常会出现装箱拆箱的性能问题。使用泛型列,列在初始化时进行数据类型指定,每个列的数据类型是固定的,对于列的所有操作都不会产生装箱拆箱的性能问题。
本存储结构也包含行(Row)的概念,使用并行辅助线程技术预先准备数据,为每个列增加一个行号索引列,以加快行遍历速度。消除列访问数据的劣势,达到类似行数据访问的效果。
因此,开发人员可通过行获取和修改数据。开发人员获取的行数据是一份快照,操作后可调用行的Save方法将修改保存至列存储结构。
2、访问接口。
本存储结构对外提供以下访问接口:
数据加载:从数据源加载数据;
表结构修改:增加列、删除列;
数据读写:按行读写、按列读写。
3、并行支持。
本发明中的列存储结构在多个操作中采用了并行处理以提高性能。
首先,数据加载时,列存储结构会自动为每个列开启一个线程,一个线程只负责一个列的数据加载。从数据源加载的数据通常是行数据,还需要开启一个线程将行数据按列拆分,拆分后的数据交给列数据加载线程异步载入各列。数据源加载数据、行数据拆分及列数据加载是流水并行的,能最大程度减少数据加载时间。由于多线程并行执行,能有效减少数据加载时间,尤其是大数据量加载时。数据加载时间缩短,也减少了对各种数据库、线程、内存等资源的长时间占用,可有效提高整体性能
其次,对于关系型数据,按行访问比较普遍。因此列存储结构需要从各列取数,组合成行,供外部使用。这通常会增加操作耗时,对整表遍历这种操作影响较大。在按行遍历时,存储结构自动开启一个线程,预先将后续的数据组合成行,这样可以有效的提高效率。
再次,本存储结构采用乐观锁的方式处理并发,保证并行修改时的数据一致性。开发人员获取的行快照数据,包含了隐藏列Version的值,即当前数据的版本号。开发人员调用行的GetItem和SetItem获取和修改行快照中的数据,完成后调用Save方法保存。列存储结构会判断行快照中Version列值是否与结构中同一行的Version是否相等,如果相等,将将快照中修改的数据合并至列存储结构,并将该行Version列值加1;若不同,则认为已被其它线程修改,将抛出StaleDataException。客户程序捕获此异常后,应重新读取数据再次处理。使用乐观锁代替代悲观锁,能有效解决性能、死锁等问题。
综上所述,本发明的存储结构采用列存储方式,内部封装了并行算法,提供了乐观锁并发处理机制,同时对外提供简单易用的访问接口。
本发明的一种支持关系数据并行处理的内存存储结构及实现方法,其数据存储在列上,而不是存储在行上,这种方式在修改表结构时具有先天的优势,操作非常快速:增加列和移除列不涉及对数据的修改,假设数据存储在行上,增加一个列,行上的每条数据需要以此进行修改。另外,对于整列数据的读取,只需读取出整个列存储的数组数据即可,完全避免了行存储逐行读取数据的问题。同时,基于列存储的众多操作,如联接和投影,也具有良好的性能。
使用泛型列来支持各种数据类型。众所周知,值类型和引用类型之间的相互转换经常会出现装箱拆箱的性能问题。使用泛型列,列在初始化时进行数据类型指定,每个列的数据类型是固定的,对于列的所有操作都不会产生装箱拆箱的性能问题。
规避了.NET DataTable只能按行遍历、无法并发操作的弊端,在设计数据的加载、计算、关联、排序、投影、分组等常用操作的算法时,采用并行计算的设计思路,充分发挥硬件的多核优势和性能。另外,在内部将数据和并行操作封装在一起,既符合面向对象的开发要求,又达到了高内聚低耦合目的。
使用并行辅助线程技术预先准备数据,为每个列增加一个行号索引列,以加快行遍历速度。考虑到基于行的访问数据方式,对列存储结构来讲是一种劣势,因此使用并行辅助线程预先准备好数据,增加一个行索引列来标识各列,以期将这种劣势消除,达到类似行数据访问的效果。
使用基于整形数据版本列(Version列)的乐观锁处理机制,即:每一行的数据都存在一个整形的版本,数据访问时基于拿到的当前版本进行处理,这种方式有效避免了数据操作时施加的排他锁造成的并发问题。
本发明提供的技术方案带来的有益效果是:
关系型数据以数组的形式存储在列上,整张表由多个列组成;内部使用泛型列来支持各种数据类型,以减少装箱拆箱带来的性能消耗;规避了.NET DataTable只能按行遍历、无法并发操作的弊端。在本数据结构内部,对数据的加载、计算、关联、排序、投影、分组等操作,在算法上基于并行计算方式,以期获得最佳的性能; 使用并行辅助线程技术预先准备行数据,以加快按行遍历的速度;基于乐观锁机制处理并发访问冲突,保证数据一致性。
附图说明
图1为本发明的一种支持关系数据并行处理的内存存储结构及实现方法的UML类图;
图2为本发明的一种支持关系数据并行处理的内存存储结构及实现方法的实施例1的员工数据列存储示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例一
如附图1所示,一种支持关系数据并行处理的内存存储结构,其结构采用列存储方式,一个存储结构由多个列组成,每个存储结构中包含一列隐含列,数据类型为32位整数,记录所在行的数据版本,用于乐观并发控制。
本实施例中,使用泛型列来支持各种数据类型。
本实施例中,存储结构也包含行的概念,使用并行辅助线程技术预先准备数据,为每个列增加一个行号索引列。
本实施例的存储结构对外提供以下访问接口:
数据加载:用于从数据源加载数据;
表结构修改:用于增加列、删除列;
数据读写:用于按行读写、按列读写。
如附图2所示,使用本发明中的关系存储结构作为载体,一个典型的应用如下:
开发人编写代码执行数据查询,获取到员工表Employee的DbDataReader,开发人员将此DbDataReader传给本关系存储结构的实例的Load方法。调用代码如下:
var table = new DsmTable();
table.AddColumn(“ID”,typeof(string));
table.AddColumn(“Name”,typeof(string));
table.AddColumn(“Sex”,typeof(int));
table.AddColumn(“age”,typeof(int));
table.AddColumn(“Department”,typeof(string));
using(var reader = db.ExcuteReader(“select * from employee”))
table.Load(reader);
在数据加载前,整张表的各个列确定好各自的数据类型,即表中的每个列的数据类型是固定的。在Load方法内部使用.NET中提供的并行计算特性,并行加载各列数据;这样一来,可以有效减少数据加载时间,降低数据装箱拆箱带来的性能消耗。加载后的数据存储如图2所示。
开发人员编写代码逐行读取员工信息,存储结构实例内部自动启动线程预先将列数据合并为行,有效消除了列存储方式按行访问的缺点,提高了执行速度。遍历访问示例代码如下:
foreach(var row in table.Rows){
//…
}
开发人员A和开发人员B从同一存储结构中获取了第一行数据, Version列值为1。A 修改City列值为NewYork,B修改City列值为Tokyo 。A调用行的Save保存数据,存储结构检查A持有的行中的Version值与存储结构中第一行的Version相同,存储结构将A的修改合并至存储结构第一行,并将存储结构第一行数据Version值修改为2,保存成功。随后B调用Save保存修改,存储结构检查发现Version值不同,抛出StaleDataException异常。B捕获到此异常,知道数据已被修改,需要获取数据重新处理。通过这种乐观锁的方式,能有效处理并发,同时避免了在外部加锁带来的种种问题。并发处理使用代码如下:
try{
row[“City”] = “Tokyo”;
//…
row.Save();
}
catch(StaleDataException){
// 在UI上弹出提示窗口,告知用户数据已被修改 …
}
最后,通过以上的描述可见,本存储结构使用列存储结构,可以快速的进行数据加载,有效的降低数据装箱拆箱带来的性能消耗;其内部的并行处理,可以有效的提高关系数据的操作性能;数据操作时采用的乐观锁机制,很大程度上避免了外部加锁带来的并发问题;同时,对外提供的简单接口也降低了对开发人员对技术的要求。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种支持关系数据并行处理的内存存储结构,其结构采用列存储方式,一个存储结构由多个列组成,每个存储结构中包含一列隐含列,数据类型为32位整数,记录所在行的数据版本,用于乐观并发控制。
2.根据权利要求1所述的一种支持关系数据并行处理的内存存储结构,其特征在于,使用泛型列来支持各种数据类型。
3.根据权利要求2所述的一种支持关系数据并行处理的内存存储结构,其特征在于,所述的存储结构也包含行的概念,使用并行辅助线程技术预先准备数据,为每个列增加一个行号索引列。
4.根据权利要求1-3中任意一项所述的一种支持关系数据并行处理的内存存储结构,其特征在于,所述的存储结构对外提供以下访问接口:
数据加载:用于从数据源加载数据;
表结构修改:用于增加列、删除列;
数据读写:用于按行读写、按列读写。
5.一种支持关系数据并行处理的内存存储结构的实现方法,包括以下步骤:
数据加载时,列存储结构会自动为每个列开启一个线程,一个线程只负责一个列的数据加载,如果从数据源加载的数据是行数据,还需要开启一个线程将行数据按列拆分,拆分后的数据交给列数据加载线程异步载入各列。
6.根据权利要求5所述的一种支持关系数据并行处理的内存存储结构的实现方法,其特征在于,对于关系型数据,在按行遍历时,存储结构自动开启一个线程,预先将后续的数据组合成行。
7.根据权利要求5所述的一种支持关系数据并行处理的内存存储结构的实现方法,其特征在于,所述存储结构采用乐观锁的方式处理并发,保证并行修改时的数据一致性。
8.根据权利要求7所述的一种支持关系数据并行处理的内存存储结构的实现方法,其特征在于,所述采用乐观锁的方式处理并发具体包括以下步骤:
A、获取行快照数据,所述的行快照数据包含了隐藏列的值,即当前数据的版本号;
B、调用行的GetItem和SetItem获取和修改行快照中的数据,完成后调用Save方法保存;
C、列存储结构判断行快照中隐藏列的值是否与结构中同一行的隐藏列的值相等,如果相等,将快照中修改的数据合并至列存储结构,并将该行隐藏列的值加1;若不同,则认为已被其它线程修改,将抛出StaleDataException,客户程序捕获此异常后,重新读取数据再次处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013101742470A CN103246498A (zh) | 2013-05-13 | 2013-05-13 | 一种支持关系数据并行处理的内存存储结构及实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013101742470A CN103246498A (zh) | 2013-05-13 | 2013-05-13 | 一种支持关系数据并行处理的内存存储结构及实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103246498A true CN103246498A (zh) | 2013-08-14 |
Family
ID=48926033
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013101742470A Pending CN103246498A (zh) | 2013-05-13 | 2013-05-13 | 一种支持关系数据并行处理的内存存储结构及实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103246498A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104573833A (zh) * | 2014-12-31 | 2015-04-29 | 普天新能源有限责任公司 | 一种充电预约方法 |
CN106294683A (zh) * | 2016-08-05 | 2017-01-04 | 中国银行股份有限公司 | 一种文件拆分方法及装置 |
CN108182599A (zh) * | 2017-12-27 | 2018-06-19 | 五八有限公司 | 一种签到奖励方法、设备及计算机可读存储介质 |
CN104750727B (zh) * | 2013-12-30 | 2019-03-26 | 沈阳亿阳计算机技术有限责任公司 | 一种列式内存存储查询装置及列式内存存储查询方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05108431A (ja) * | 1991-10-11 | 1993-04-30 | Hitachi Ltd | 階層構造を持つリレーシヨナル・データベースの高速アクセス方法 |
CN102129458A (zh) * | 2011-03-09 | 2011-07-20 | 胡劲松 | 关系型数据库的存储方法及装置 |
CN102156714A (zh) * | 2011-03-22 | 2011-08-17 | 清华大学 | 实现自适应垂直划分的关系型数据库的方法及*** |
-
2013
- 2013-05-13 CN CN2013101742470A patent/CN103246498A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05108431A (ja) * | 1991-10-11 | 1993-04-30 | Hitachi Ltd | 階層構造を持つリレーシヨナル・データベースの高速アクセス方法 |
CN102129458A (zh) * | 2011-03-09 | 2011-07-20 | 胡劲松 | 关系型数据库的存储方法及装置 |
CN102156714A (zh) * | 2011-03-22 | 2011-08-17 | 清华大学 | 实现自适应垂直划分的关系型数据库的方法及*** |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104750727B (zh) * | 2013-12-30 | 2019-03-26 | 沈阳亿阳计算机技术有限责任公司 | 一种列式内存存储查询装置及列式内存存储查询方法 |
CN104573833A (zh) * | 2014-12-31 | 2015-04-29 | 普天新能源有限责任公司 | 一种充电预约方法 |
CN106294683A (zh) * | 2016-08-05 | 2017-01-04 | 中国银行股份有限公司 | 一种文件拆分方法及装置 |
CN108182599A (zh) * | 2017-12-27 | 2018-06-19 | 五八有限公司 | 一种签到奖励方法、设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5006382B2 (ja) | 軽量スレッドの並行処理制御のための宣言型モデル | |
US10885015B2 (en) | Database system transaction management | |
CN112534401B (zh) | 用于数据流图优化的***和方法 | |
US10942915B2 (en) | Method and apparatus for database | |
Gu et al. | Biscuit: A framework for near-data processing of big data workloads | |
Alexandrov et al. | The stratosphere platform for big data analytics | |
KR102549994B1 (ko) | 가변 레벨 병렬화를 사용하여 데이터 처리 동작을 수행하기 위한 시스템 및 방법 | |
US20110185359A1 (en) | Determining A Conflict in Accessing Shared Resources Using a Reduced Number of Cycles | |
Wang et al. | Towards efficient solutions of bitruss decomposition for large-scale bipartite graphs | |
Cheung et al. | New directions in cloud programming | |
CN101980213A (zh) | 一种基于j2ee的数据持久化方法及*** | |
CN103246498A (zh) | 一种支持关系数据并行处理的内存存储结构及实现方法 | |
CN113569508B (zh) | 基于id进行数据索引与访问的数据库模型构建方法及设备 | |
WO2023082644A1 (zh) | 网络模型处理方法、装置、设备、存储介质及计算机程序产品 | |
CN110399089B (zh) | 数据存储方法、装置、设备和介质 | |
Dann et al. | Non-relational databases on FPGAs: Survey, design decisions, challenges | |
CN109344296A (zh) | 实现Redis的HASH键的域生命周期控制方法、***、服务器及存储介质 | |
Vrgoč et al. | MillenniumDB: An open-source graph database system | |
Perera et al. | A fast, scalable, universal approach for distributed data aggregations | |
CN109753533A (zh) | 一种多源关系型数据库客户端开发方法及装置 | |
Watkins et al. | Automatic and transparent I/O optimization with storage integrated application runtime support | |
US20140136471A1 (en) | Rapid Provisioning of Information for Business Analytics | |
Gao et al. | Exploiting sharing join opportunities in big data multiquery optimization with Flink | |
Lang et al. | Interfaces for coordinated access in the file system | |
Orensa | A design framework for efficient distributed analytics on structured big data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130814 |
|
WD01 | Invention patent application deemed withdrawn after publication |