著录项信息
专利名称 | 一种支持关系模型和键-值结构的混合数据存储方法 |
申请号 | CN201510138130.6 | 申请日期 | 2015-03-26 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2015-07-01 | 公开/公告号 | CN104750809A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 中国科学院软件研究所 | 申请人地址 | 北京市海淀区中关村南四街4号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 中国科学院软件研究所 | 当前权利人 | 中国科学院软件研究所 |
发明人 | 张鹏;王宏安;邓昌智;吴云坤 |
代理机构 | 北京君尚知识产权代理事务所(普通合伙) | 代理人 | 司立彬 |
摘要
本发明公开了一种支持关系模型和键‑值结构的混合数据存储方法。本方法为:1)根据待处理数据中的实体类别,在关系数据库与键‑值数据库中分别建立多个实体表;2)按照实体数据的属性将该待处理数据分为稳态属性数据和非稳态属性数据;3)将稳态属性数据存储到关系数据库中,将非稳态属性数据存储到键‑值数据库中;键‑值数据库中的实体表根据时序数据属性分为普通键‑值实体表和时序键‑值实体表,普通键‑值实体表的内容列族存储非稳态数据,关系列族记录关联实体间关联关系;时序键‑值实体表包括内容列族,记录同一时序索引下的非稳态数据。本发明适用于具有关联性的时序数据的管理、存储,大大提高了数据进行分布式计算的读取速度。
1.一种支持关系模型和键-值结构的混合数据存储方法,其步骤为:
1)根据待处理数据中的实体类别,在关系数据库与键-值数据库中分别建立多个实体表;
2)按照实体数据的属性将该待处理数据分为稳态属性数据和非稳态属性数据;
3)将稳态属性数据存储到关系数据库中;其中,实体类别i的稳态属性数据存储到关系数据库中该实体类别i对应的实体表i中;
4)将非稳态属性数据存储到键-值数据库中;其中,实体类别j的非稳态属性数据存储到键-值数据库中该实体类别j对应的实体表j中,所述键-值数据库中的实体表根据时序数据属性分为普通键-值实体表和时序键-值实体表,所述普通键-值实体表包括“内容”与“关系”两个列族,“内容”列族存储非稳态数据,“关系”列族记录关联不同实体间关联关系;所述时序键-值实体表包括“内容”列族,用于记录同一时序索引下的非稳态数据。
2.如权利要求1所述的方法,其特征在于,所述关系数据库中实体表的主键与所述键-值数据库中实体表的行键共享同一值。
3.如权利要求1或2所述的方法,其特征在于,所述时序键-值实体表中的行键为时序索引,与所述关系数据库实体表中的一字段对应;具有时序数据属性的实体通过时序索引关联不同数据库的数据。
4.如权利要求1或2所述的方法,其特征在于,所述键-值数据库中“关系”列族存储不同实体关系数据库中实体表的主键。
5.如权利要求1所述的方法,其特征在于,当收到新的待处理数据时,将其存储到关系数据库与键-值数据库中的方法为:
51)从该数据中提取具有稳态属性的实体数据并建立不同实体之间的对应关系;然后选取一实体类型,将提取的该实体类型的实体数据查找并插入到所述关系数据库中对应的实体表,然后获得该实体表的主键;然后将该实体类型的非稳态数据更新到所述键-值数据库中的对应实体表中,并通过该主键对该实体类型的稳态数据和非稳态数据进行关联;
52)根据步骤51)的主键,将提取的其他实体类型的稳态属性数据插入到所述关系数据库中对应的实体表中,将同一实体类型的非稳态属性数据插入到所述键-值数据库中对应的实体表中;同一实体类型的稳态属性数据与非稳态属性数据,通过共享一设定主键进行关联;其中,对于时序实体类型的非稳态属性数据,根据该时序实体类型的稳态属性数据中的时序数据索引,将非稳态属性数据插入到所述键-值数据库的对应实体表中;
53)将步骤51)、52)中用于关联的主键插入到所述键-值数据库的“关系”列族中。
6.如权利要求1或2所述的方法,其特征在于,所述稳态属性数据包括实体主键、稳态数据和需要被索引的结构化数据。
7.如权利要求2所述的方法,其特征在于,所述待处理数据为具有关联性的时序数据。
一种支持关系模型和键-值结构的混合数据存储方法\n技术领域\n[0001] 本发明属于数据库领域,涉及一种支持关系模型和键-值结构的混合数据存储方法,本发明结合关系数据库和键-值数据库的优点,对混合数据模型进行管理。\n背景技术\n[0002] 现实世界中,数据的属性,根据是否经常改变,可以分为稳态数据与非稳态数据;\n根据属性的类型,可以分为结构化数据与非结构化数据;根据属性是否与时间相关,可以分为时序数据与非时序数据。采用单一数据库形式存储具有多种不同的属性的数据,随着数据量增长,需要考虑较大的写入、读取速度,最大存储上线等问题。本发明提出一种支持关系模型和键-值结构的混合数据存储方法,解决这一问题。\n[0003] 关系模型:用二维表的形式表示实体和实体间联系的数据模型。关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数据概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。MySQL是一种开放源代码的关系型数据库管理系统,由于性能高、成本低、可靠性好,已经成为最流行的开源关系型数据库。\n[0004] 键-值结构是Key-Value的简称。Key-Value就是每次存储一个数据时,是根据Key进行索引存储的。键-值数据库是指基于键-值结构的数据,是最近新型的NoSQL数据库的一种类型。NoSQL(Not Only SQL),泛指非关系型的数据库。NoSQL数据库适合数据模型简单、需要更强灵活性的IT系统、并且不需要高度的数据一致性。键-值数据库,主要使用哈希结构,表中通过特定的键值指向多个列。这些列是由列家族(列族)来安排的。HBase是Apache的Hadoop项目中的子项目,是一个分布式开源键-值数据库,在工业界和学术界都有了较好的应用效果。\n[0005] 交易数据,是指资金交易明细、银行卡号、开户人信息等交易数据,还包括网上银行交易数据等其他交易的数据内容。交易数据,可以从不同银行、金融机构等数据源获取,具有数据格式不一致、数据类型繁杂、非结构化数据较多等特点,并且还隐藏着较多的关联关系。单独采用关系型数据库,不能有效解决大量的非结构化数据的存储和数据的并行计算问题;单独采用列存储数据库,不能有效处理实体间的关联关系。\n发明内容\n[0006] 针对上述问题,本发明采用关系型模型和键-值结构结合的方法,提出了一种支持关系模型和键-值结构的混合数据存储方法,适用于具有关联性的时序数据,本发明不仅适用于数据的管理、存储,还提高了数据进行分布式计算的读取速度。本发明不仅可以单独作为完整数据库使用,还可以扩展为大型系统中部分的核心部分,提高数据管理质量。\n[0007] 本发明采用的技术方案如下:\n[0008] 一种支持关系模型和键-值结构的混合数据存储方法,其步骤为:\n[0009] 1)根据待处理数据中的实体类别,在关系数据库与键-值数据库中分别建立多个实体表;\n[0010] 2)按照实体数据的属性将该待处理数据分为稳态属性数据和非稳态属性数据;\n[0011] 3)将稳态属性数据存储到关系数据库中;其中,实体类别i的稳态属性数据存储到关系数据库中该实体类别i对应的实体表i中;\n[0012] 4)将非稳态属性数据存储到键-值数据库中;其中,实体类别j的非稳态属性数据存储到键-值数据库中该实体类别j对应的实体表j中,所述键-值数据库中的实体表根据时序数据属性分为普通键-值实体表和时序键-值实体表,所述普通键-值实体表包括“内容”与“关系”两个列族,“内容”列族存储非稳态数据,“关系”列族记录关联不同实体间关联关系;所述时序键-值实体表包括“内容”列族,用于记录同一时序索引下的非稳态数据。\n[0013] 进一步的,所述关系数据库中实体表的主键与所述键-值数据库中实体表的行键共享同一值。\n[0014] 进一步的,所述时序键-值实体表中的行键为时序索引,与所述关系数据库实体表中的一字段对应;具有时序数据属性的实体通过时序索引关联不同数据库的数据。\n[0015] 进一步的,所述键-值数据库中“关系”列族存储不同实体关系数据库中实体表的主键。\n[0016] 进一步的,当收到新的待处理数据时,将其存储到关系数据库与键-值数据库中的方法为:\n[0017] 51)从该数据中提取具有稳态属性的实体数据并建立不同实体之间的对应关系;\n然后选取一实体类型,将提取的该实体类型的实体数据查找并插入到所述关系数据库中对应的实体表,然后获得该实体表的主键;然后将该实体类型的非稳态数据更新到所述键-值数据库中的对应实体表中,并通过该主键对该实体类型的稳态数据和非稳态数据进行关联;\n[0018] 52)根据步骤51)的主键,将提取的其他实体类型的稳态属性数据插入到所述关系数据库中对应的实体表中,将同一实体类型的非稳态属性数据插入到所述键-值数据库中对应的实体表中;同一实体类型的稳态属性数据与非稳态属性数据,通过共享一设定主键进行关联;其中,对于时序实体类型的非稳态属性数据,根据该时序实体类型的稳态属性数据中的时序数据索引,将非稳态属性数据插入到所述键-值数据库的对应实体表中;\n[0019] 53)将步骤51)、52)中用于关联的主键插入到所述键-值数据库的“关系”列族中。\n进一步的,所述稳态属性数据包括实体主键、稳态数据和需要被索引的结构化数据。进一步的,所述待处理数据为具有关联性的时序数据。\n[0020] 本发明以交易数据举例进行介绍,其步骤为:\n[0021] 1)采用关系模型和键-值结构,把交易数据按照实体类型区别。交易数据分为人员、账户、交易明细三个实体。实体按照是否有时序数据属性,分普通实体与时序实体,人员与银行账户属于普通实体,交易明细属于时序实体。\n[0022] 2)按照不同实体类别,在关系数据库与键-值数据库中对交易数据表进行不同方式管理。关系数据库与键-值数据库各存人员、银行账户、交易明细三张实体表。在键-值数据库中,人员与银行账户的表属于普通键-值实体表,交易明细的表属于时序键-值实体表。\n[0023] 3)实体属性数据按照不同类型,存储于关系数据库与键-值数据库的不同表中。实体属性数据按照是否经常根据数据采集改变,分为稳态数据与非稳态数据;稳态属性数据存储于关系数据库中,非稳态属性数据存储于键-值数据库中。关系数据库中的表存储实体主键、稳态数据、需要被索引的结构化数据等属性数据。键-值数据库普通键-值实体表分为“内容”与“关系”两个列族,“内容”列族存储非稳态数据,“关系”列族记录关联不同实体间关联关系。键-值数据时序键-值实体表有“内容”列族,记录同一时序索引下的非稳态数据。\n[0024] 4)实体间通过主键、时序索引确定唯一性与关联关系。不同实体通过对应关系数据库的实体表的主键确定唯一性。普通实体通过关系数据库的实体表的主键关联不同数据库的数据,关系数据库实体表的主键与键-值数据库的行键共享同一值。时序索引是时序键-值实体表中的行键,对应关系数据库实体表中的一个字段,时序实体通过时序索引关联不同数据库的数据。不同实体间的关联,在关系数据库中通过外键或时序索引关联;在键-值数据库中由“关系”列族存储主键得到不同实体间的关联关系。\n[0025] 在上述数据库存储方案的基础上,一种采用上述存储方案的配套导入方法,其步骤包括:\n[0026] 1)从客户端选择导入单个或多个文件上传后,发送到应用服务器中进行解析。并且根据内容,交互确定导入数据模板。解析同时,在分布式键-值数据库中对源文件进行存储。\n[0027] 2)根据交互确定的数据类别与不同实体在两个数据库表中的列名进行匹配并根据匹配结果对源数据进行对应整理,将数据插入到对应字段中。把源文件存转为文本格式,存储到分布式环境的文件系统中,在分布式环境中不同核心分布执行步骤3与步骤5。\n[0028] 3)从源数据中提取人员、账户两个实体,并且建立好人员与账户的对应关系。通过人员与身份证号查找更新关系数据库的人员表,把包括人员与身份证号在内的稳态数据插入到关系数据库的人员表中,并且获得人员表主键。把包括人员与卡号关联关系在内非稳态数据更新到键-值数据库的人员表中。人员稳态数据与非稳态数据,通过共享人员表主键进行关联。\n[0029] 4)根据返回的人员表主键,把账户稳态数据插入到关系数据库账户表中,把账户联系方式在内的非稳态数据插入到键-值数据库账户表中。账户稳态数据与非稳态数据,通过共享银行表主键进行关联。\n[0030] 5)从源数据中获取金额等交易明细稳态数据,之后插入到关系型数据库的交易表中,获得交易的主键。同时生成时序数据索引,根据明细的时序索引把交易的非稳态数据插入到键-值数据库的交易表中。\n[0031] 6)在步骤3和步骤4、5都完成后,把交易的主键,插入到键-值数据库账户表的关系列族中,保证键-值数据库银行表与关系数据库交易表的关联关系。\n[0032] 采用该方法的数据导入过程,其特征包括:\n[0033] 1)按照导入源文件格式、内容形式和字段文字含义,自动匹配、清洗数据,并分发到分布式计算环境。\n[0034] 2)数据导入过程,在分布式环境中再按照主逻辑的情况下,可以大规模并行导入,同时有效保证了数据一致性。\n[0035] 采用该方法的数据读取过程,其特征包括:\n[0036] 1)支持稳态数据从关系型数据库中单独读取,支持非稳态数据从键-值数据库中单独读取;\n[0037] 2)支持从不同数据库中混合读取所需数据。\n[0038] 与现有技术相比,本发明具有的有益效果如下:\n[0039] 1)数据库管理方法基于分布式环境,存储上线扩容简单。\n[0040] 2)有效存储包括原始数据、清洗后数据、分析数据在内的多种不同结构、不同业务数据。\n[0041] 3)分布式环境下存储,更易于进行交易数据的分布式分析。\n[0042] 4)支持多文件与较大文件的资金交易数据自动提取、数据清洗与导入。\n附图说明\n[0043] 图1本专利数据据库设计的的核心关联关系图;\n[0044] 图2基于该设计的数据导入流程图。\n具体实施方式\n[0045] 为了使本技术领域的人员更好的理解本发明,以下结合实例和附图进一步地详细描述本发明,但不构成对发明的限制。\n[0046] 图1为本发明基于关系型数据库和列存储数据库的交易数据,数据库设计核心关联关系图。图中,没有对每个表中的字段、数据类型进行详细展开。对于符合对应格式的数据都能进行有效存储。左侧表示关系型数据库的数据库设计,可以采用Mysql、Oracle、Sqlserver等主流关系型数据库实现;右侧表示键-值数据库的数据库设计,可以采用基于Hadoop平台的HBase实现。关系数据库有人员表(ECID_PERSON)、账户表(ECID_ACCOUNT)、交易表(ECID_TRANSACTION)三张表组成,用来存储主键、索引数据、稳态数据等。键-值数据库中也有同样的对应的三张表,键-值人员表(H_ECID_PERSON)、键-值账户表(H_ECID_ACCOUNT)、键-值交易表(H_ECID_TRANSACTION),用来存储非稳态数据。\n[0047] 专利设计中,采用3个关系数据库表中的主键和1个键-值数据库表中的行键确定数据的唯一性与关联关系,3个主键分别是:ECID_PERSON中的SID,用来记录人员的唯一ID;\nEICD_ACCOUNT中的AID,用来记录银行账户的唯一ID;ECID_TRANSACTION中的TID,用来记录交易明细的唯一ID。1个行键是:H_ECID_TRANSACTION中的H_TID,用来记录同一交易时间段内同一交易明细集合的唯一ID。在确定主键唯一性的情况下,SID、AID、TID可以通过单纯数字、字母加数字等多种方式表示;H_TID可以通过时间段开始时间、时间段结束时间、时间段加字母或符号等多种方式表示。\n[0048] 人员信息存在ECID_PERSON与H_ECID_PERSON中,通过EICD_PERSON中的SID关联起来。EICD_PERSON中除存储主键外,还存储姓名等需要被索引数据以及出生日期等稳态数据。EICD_PERSON还可以用来存储,性别、民族、籍贯等数据。H_ECID_PERSON中分为两个列族,分别为info和relation。info用来记录人员相关非稳态数据,relation用来记录人员和银行账号的关联关系、也可以更宽泛的记录人员与手机、人员与网上交易账户等一对多关系。info中以cell为单位,可以存储包括非结构化数据、JSON数据的内容,包括但不限于家庭住址等。relation通过count记录人员所对应实体数量,再通过同一列族中的其他cell记录所对应实体ID。\n[0049] 银行账户信息存在ECID_ACCOUNT与H_ECID_ACCOUNT中,通过ECID_ACCOUNT中的AID关联起来。EICD_ACCOUNT中除存储主键外,还存储银行账户号、账户人ID等索引数据或稳态数据。ECID_ACCOUNT还常用来存储,开户行、开户行地址、开户时间等内容。H_ECID_ACCOUNT分为两个列族,分别为info和relation。info用来记录银行账号相关的非稳态数据,realation用来记录银行账号与交易明细的关联关系。info的cell中通过文本、数组、JSON等结构存储,联系人电话、联系人邮箱等非稳态数据。relation通过count记录银行账户对应交易明细数量,再通过其他cell记录对应交易明细ID(TID)。\n[0050] 交易明细信息存储在ECID_TRANSACTION与H_ECID_TRANSACTION中。ECID_TRANSCATION中以每条明细作为单独实体存储;根据交易明细的时序属性,H_ECID_TRANSACTION中的交易明细按照时间段分组,存储在同一列族的不同cell中。EICD_TRANSCATION中除了用来存储TID与H_TID外,还存储账交易金额、交易时间等稳态数据。H_ECID_TRANSCATION的每个cell中采用Json结构(也可更换为其他语义表示规则),记录每条交易明细的全部内容,例如交易余额、ATM机号等内容。\n[0051] 本发明在数据管理方法的基础上,详细设计了交易数据的导入方法,详细导入的流程图如图2所示。\n[0052] 步骤1:应用服务器首先获得上传文件,对原始文件进行存储,并且按照所选择模板、对应列名自动匹配。再与用户交互中所输入的其他数据结合,获得完整的csv格式的交易明细,并且分发到分布式文件系统HDFS中。\n[0053] 步骤2:分布式计算框架对HDFS中的文件进行读取,按照需求进行数据整理,包括但不限于交易日期转换、交易时间合并、交易金方向转换等。从整理数据中,提取人员、银行账户、交易明细三个实体。再并行执行步骤3与步骤5。\n[0054] 步骤3:从整理后数据中获得人员实体,并且把人员相关数据分为稳态数据与非稳态数据。先在ECID_PERSON中更新稳态数据,获得人员SID。再把SID人员非稳态数据整合后,插入H_ECID_PERSON中。\n[0055] 步骤4:在步骤3获得导入数据的SID后,整合到银行账户实体中。使每个账户与人员实体相对应。再与银行卡稳态数据一起更新到ECID_ACCOUNT中。\n[0056] 步骤5:通过交易明细实体,更新ECID_TRANSACTION中的稳态数据。获得每条交易明细的TID。在H_ECID_ACCOUNT中生成交易明细数据索引,把交易明细中非稳态数据转换为Json结构,最后在H_ECID_TRANSACTION,批量插入新导入的交易明细。\n[0057] 步骤6:与步骤4中银行卡实体合并,把账户与交易明细对应关系在内的非稳态数据插入到H_ECID_ACCOUNT中。\n[0058] 以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求所述为准。
法律信息
- 2018-05-18
- 2015-07-29
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201510138130.6
申请日: 2015.03.26
- 2015-07-01
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2013-12-11
|
2013-07-15
| | |
2
| |
2012-09-12
|
2012-04-10
| | |
3
| |
2012-09-19
|
2012-05-08
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |