CN103902702B - 一种数据存储***和存储方法 - Google Patents

一种数据存储***和存储方法 Download PDF

Info

Publication number
CN103902702B
CN103902702B CN201410126243.XA CN201410126243A CN103902702B CN 103902702 B CN103902702 B CN 103902702B CN 201410126243 A CN201410126243 A CN 201410126243A CN 103902702 B CN103902702 B CN 103902702B
Authority
CN
China
Prior art keywords
data
index
data entry
storage
entry
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.)
Active
Application number
CN201410126243.XA
Other languages
English (en)
Other versions
CN103902702A (zh
Inventor
韩明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Pierre Blaney Software Co Ltd
Original Assignee
Beijing Pierre Blaney Software Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Pierre Blaney Software Co Ltd filed Critical Beijing Pierre Blaney Software Co Ltd
Priority to CN201410126243.XA priority Critical patent/CN103902702B/zh
Publication of CN103902702A publication Critical patent/CN103902702A/zh
Application granted granted Critical
Publication of CN103902702B publication Critical patent/CN103902702B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2272Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种数据存储***和存储方法,属于数据库处理技术领域。该方法包括:根据对第一数据存储器中的数据条目的查询方式构造索引列表;在第二数据存储器中存储该索引列表中的每个索引;将第一数据存储器划分为多个数据区,启动多个第一线程,每个第一线程负责从第一数据存储器的一个或多个数据区中获取各个数据条目存储到第二数据存储器中;根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,获取与索引相关联的数据条目标识列表;将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中。本发明能够提高对业务数据的查询效率,并提高了数据条目及索引数据写入到第二数据存储器的速度。

Description

一种数据存储***和存储方法
技术领域
本发明属于数据库处理技术领域,具体涉及一种数据存储***和存储方法。
背景技术
传统的数据存储和访问的实现方式一般是基于关系型数据库或者是基于nosql数据库的分布式缓存。对于关系型数据库实现方式,数据存储在关系型数据库的磁盘中,应用程序通过sql语句访问数据库中的数据。由于sql语句的语法非常灵活,因此能够支持多种排序和多种分组条件下的复杂查询,即能够支持复杂的查询业务。但是,关系型数据库需要维护数据一致性,并维护大量关联关系,并且数据存储在硬盘上,导致数据查询速度慢,特别是在高并发访问情况下会严重影响查询效率。
对于nosql数据库实现方式,数据以键-值(key-value)对的方式存储在内存中。在这种实现方式下,由于数据存储在内存中,访问速度快,并且通过标准api(应用程序编程接口)获取数据简单易用。但这种实现方式无法很好的支持多种排序和多种组合条件的复杂查询,无法支持复杂的查询业务。
可见上述两种数据存储和访问的实现方式各有优劣。而如何在支持复杂的查询业务的前提下提高数据访问效率,就成为亟待解决的技术问题。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据存储***和存储方法。
根据本发明的一个方面,提供了一种数据存储方法,适于将来自第一数据存储器的数据条目存储到第二数据存储器中,该方法包括:
根据对第一数据存储器中的数据条目的查询方式构造索引列表,索引列表中的每个索引对应一种查询方式;
在第二数据存储器中存储该索引列表中的每个索引,其中每个索引包括标识该索引的索引名称;
将第一数据存储器划分为多个数据区,启动多个第一线程,每个第一线程负责从第一数据存储器的一个或多个数据区中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中,其中在第二数据存储器中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容;
根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表;以及
将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中。
可选地,所述根据对第一数据存储器中的数据条目的查询方式构造索引列表,包括:
根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表;
根据排序列表和分组列表进行笛卡尔乘积,构造所述索引列表。
可选地,所述根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表,包括:
启动多个第二线程,每个第二线程负责排序列表中的一个或多个排序查询方式,从第一数据存储器中确定与所负责的排序查询方式对应的排序数据条目集合;
启动多个第三线程,每个第三线程负责索引列表中的一个或多个索引,从与所负责的索引对应的排序数据条目集合中确定与该索引相关联的一个或多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表。
可选地,所述从与所负责的索引对应的排序数据条目集合中确定与该索引相关联的一个或多个数据条目,包括:
将排序数据条目集合划分为多个数据块,启动多个第四线程,每个第四线程负责从一个或多个数据块中确定与该索引相关联的一个或多个数据条目。
可选地,所述索引名称包括排序查询方式标识和分组查询方式标识;
在所述第二数据存储器中,每个数据条目的唯一标识为该数据条目在第一数据存储器中的唯一标识,以及数据内容为将数据条目的各个字段进行序列化后得到的内容。
可选地,所述索引名称还包括数据键值类型;
在所述第二数据存储器中,每个数据条目的唯一标识还包括数据键值类型,以及数据内容为将数据条目的与数据键值类型对应的各个字段进行序列化后得到的内容;
其中,所述数据键值类型用于标识键值信息,所述键值为数据条目的一个或多个字段名称。
可选地,所述方法还包括:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值,其中所述键值为数据条目的一个或多个字段名称;
根据查询方式确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器。
可选地,所述方法还包括:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值;
根据查询方式和键值确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器。
可选地,第一数据存储器中的数据条目以关系型数据库方式进行存储;以及
第二数据存储器中的索引以索引名称为键、以相关联的数据条目标识列表为值的键-值方式进行存储,以及数据条目以数据条目的唯一标识为键、以相关联的数据内容为值的键-值方式进行存储。
根据本发明的另一方面,提供了一种数据存储***,适于将来自第一数据存储器的数据条目存储到第二数据存储器中,该***包括:
索引列表构造单元,适于根据对第一数据存储器中的数据条目的查询方式构造索引列表,索引列表中的每个索引对应一种查询方式;
索引存储单元,适于在第二数据存储器中存储该索引列表中的每个索引,其中每个索引包括标识该索引的索引名称;
数据条目存储单元,适于将第一数据存储器划分为多个数据区,启动多个第一线程,每个第一线程负责从第一数据存储器的一个或多个数据区中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中,其中在第二数据存储器中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容;以及
关联单元,适于根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表;
其中,所述索引存储单元被配置成将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中。
可选地,所述索引列表构造单元被配置成:
根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表;
根据排序列表和分组列表进行笛卡尔乘积,构造所述索引列表。
可选地,所述关联单元被配置成:
启动多个第二线程,每个第二线程负责排序列表中的一个或多个排序查询方式,从第一数据存储器中确定与所负责的排序查询方式对应的排序数据条目集合;
启动多个第三线程,每个第三线程负责索引列表中的一个或多个索引,从与所负责的索引对应的排序数据条目集合中确定与该索引相关联的一个或多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表。
可选地,所述关联单元被配置成:
将排序数据条目集合划分为多个数据块,启动多个第四线程,每个第四线程负责从一个或多个数据块中确定与该索引相关联的一个或多个数据条目。
可选地,所述索引名称包括排序查询方式标识和分组查询方式标识;
在所述第二数据存储器中,每个数据条目的唯一标识为该数据条目在第一数据存储器中的唯一标识,以及数据内容为将数据条目的各个字段进行序列化后得到的内容。
根据本发明的又一方面,提供了一种数据查询***,包括第一数据存储器、数据发布服务器和第二数据存储器,其中,所述数据发布服务器包括上述的数据存储***。
根据本发明的上述一个或多个技术方案,通过采用离线计算代替同步计算,并整合传统关系型数据库和nosql数据库的优点,既满足了对业务数据进行复杂查询的功能要求,又解决了基于传统关系型数据库查询效率较低的问题,特别是提高了高并发环境下的数据查询效率;在离线计算中还采用并行计算技术,通过并行的方式将第一数据存储器中的数据条目及相应的索引数据写入到第二数据存储器中,大幅度提高了数据的写入速度。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
图1示出了根据本发明一个实施例的数据查询***的结构示意图;
图2示出了根据本发明一个实施例的数据存储***的结构示意图;
图3示出了根据本发明一个实施例的数据存储方法的流程示意图;以及
图4示出了本发明实施例中数据和索引的分块并行计算示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的数据查询***的结构示意图。参照图1,本发明实施例的数据查询***可以包括:第一数据存储器100、数据发布服务器20和第二数据存储器300,其中数据发布服务器20分别与第一数据存储器100和第二数据存储器300通信连接,且数据发布服务器20包括数据存储***200,即数据存储***200驻留在数据发布服务器20中。
数据存储***200能够从第一数据存储器中100获取各个数据条目,将所获取的数据条目存储到第二数据存储器300中,其中在第二数据存储器300中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容。数据存储***200还能够根据对第一数据存储器100中的数据条目的各种查询方式构造索引列表(索引列表中的每个索引对应一种查询方式),并将该索引列表中的每个索引存储到第二数据存储器300中,其中在第二数据存储器300中,每个索引包括标识该索引的索引名称以及相关联的数据条目标识列表。
数据存储***200还可以采用并行计算技术将第一数据存储器100中的数据条目存储到第二数据存储器300中,和/或,采用并行计算技术将索引列表中的各索引存储到第二数据存储器300中,如此,提高了数据和索引写入到第二数据存储器时的写入速度。
根据数据存储***200的上述处理,相当于预先完成了在各种查询方式下对第一数据存储器100中数据条目的查询,并将查询结果存储在第二数据存储器300中,即采用离线计算代替了传统的同步计算。这样,当应用服务器400需要查询第一数据存储器100中的数据条目时,可以直接从第二数据存储器300提供的查询接口来获取查询结果,由于不需要根据具体的查询方式进行实时计算,因此提高了数据查询速度。具体地,所述查询接口接收到应用服务器400发来的查询请求时,先根据所述查询请求中携带的查询方式信息确定索引名称,然后根据索引名称从第二数据存储器200中获取对应的数据条目标识列表,最后根据获取到的数据条目标识列表从第二数据存储器200中获取对应的数据条目集合。
第一数据存储器100可以是关系型数据库,例如Oracle、DB2、Microsoft SQLServer和MySQL等;第二数据存储器200可以是键-值方式的no sql数据库,例如redis数据库。此种情况下,该数据查询***就整合了传统关系型数据库和nosql数据库的优点,既满足了对业务数据进行复杂查询的功能要求,又解决了基于传统关系型数据库查询效率较低的问题,特别是提高了高并发环境下的数据查询效率。其中,redis是一个key-value存储***,它支持存储的value类型包括string(字符串)、list(链表)、set(集合)、sorted set(有序集合)和hash(哈希)类型。这些数据类型都支持push/pop、add/remove及取交集、并集和差集及等操作,而且这些操作都是原子性的。
以下对上述数据查询***中的数据存储***200的具体构成和工作原理进行详细描述。
图2示出了根据本发明一个实施例的数据存储***的结构示意图。该数据存储***200可以驻留在数据发布服务器20中,所述数据发布服务器20分别与第一数据存储器100和第二数据存储器300通信连接,通过所述数据存储***200,能够将来自第一数据存储器100的数据条目存储到第二数据存储器300中,从而完成数据的发布。其中,第一数据存储器100可以是关系型数据库,例如Oracle、DB2、Microsoft SQL Server和MySQL等;第二数据存储器200可以是键-值方式的no sql数据库,例如redis数据库。
参照图2,本发明实施例的数据存储***200可以包括:索引列表构造单元210、索引存储单元220、数据条目存储单元230和关联单元240。
考虑到对业务数据的使用实际情况,在现实中使用的数据查询方式是有限的,因此,索引列表构造单元210可以根据对第一数据存储器100中的数据条目的各种查询方式构造索引列表,也就是说,索引列表中包括多个索引,每个索引对应一种查询方式。
对数据条目的查询方式一般包括排序查询方式(order by)和分组查询方式(group by),以及二者的组合。order by和group by的数量是有限的,而且大部分的orderby和group by是一起使用的,因此,索引列表构造单元210可以先根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表,然后,根据排序列表和分组列表进行笛卡尔乘积,来构造所述索引列表。当然,对数据条目的查询方式也可以是现有技术中的其他查询方式,甚至是将来有可能出现的其他查询方式,本发明实施例对此不做限制。
索引列表构造单元210构造完成索引列表后,索引存储单元220可以在第二数据存储器300中存储该索引列表中的每个索引,其中每个索引包括标识该索引的索引名称以及与该索引相关联的数据条目标识列表。在具体实现时,索引存储单元220可以先将索引名称作为键(key)存储到第二存储器300中,对应的值(vlaue)暂时为空。后续,通过关联单元240确定索引名称对应的数据条目标识列表后,再将该数据条目标识列表作为值与对应的索引名称相关联的存储到第二数据存储器300中。例如,对于redis数据库,对应的值的类型可以采用有序集(sorted set),即所存储的数据条目标识列表中的数据条目标识是有序的,其顺序由索引对应的查询方式所确定。
在一种实现方式中,所述索引名称包括排序查询方式标识(orderID)和分组查询方式标识(groupID)。在另一种实现方式中,所述索引名称包括数据键值类型、排序查询方式标识和分组查询方式标识。其中,所述数据键值类型用于标识键值信息,所述键值为数据条目的一个或多个字段名称。在具体实现时,所述数据键值类型可以直接采用所述键值,也可以是对键值进行编码后的值,且本发明实施例对具体的编码方式不做限制。
例如,假设数据条目有4个字段,字段名称分别为A、B、C、D,用户查询的键值为{A、C},则所述数据键值类型可以是{A、C},也可以是对{A、C}进行编码后的值例如2。
数据条目存储单元230适于从第一数据存储器100中获取各个数据条目,将所获取的数据条目存储到第二数据存储器300中,其中在第二数据存储器300中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容。例如对于redis数据库,每个数据条目是以数据条目的唯一标识作为键,以相关联的数据内容作为值进行存储。
为提高数据处理速度,数据条目存储单元230可以将第一数据存储器100划分为多个数据区,并启动多个第一线程,每个第一线程负责从第一数据存储器100的一个或多个数据区中获取各个数据条目,将所获取的数据条目存储到第二数据存储器300中,即多个第一线程并行地将第一数据存储器100中的数据条目写入到第二数据存储器300中。
在具体实现时,数据条目存储单元230可以先判断第一数据存储器100中存储的数据条目的数量是否大于阈值,然后根据判断结果决定是否执行多线程处理。当数据条目的数量大于阈值时,执行所述多线程处理,否则,可以不执行所述多线程处理。其中,所述阈值可以根据经验值和试验确定。
当所述索引名称包括排序查询方式标识和分组查询方式标识时,则在第二数据存储器300中,每个数据条目的唯一标识为该数据条目在第一数据存储器100中的唯一标识,相关联的数据内容为将数据条目的各个字段进行序列化后得到的内容。例如,当第一数据存储器100为关系型数据库时,该唯一标识可以为数据条目的主键。
其中,对数据条目的各个字段进行序列化是指:依次取出该数据条目的各个字段的值,将每个字段的值作为一个序列项来组合成一个序列,且各序列项之间用分隔符例如逗号进行分割;或者,依次取出该数据条目的各个字段的值,将每个字段的名称和字段的值作为一个序列项来组合成一个序列,且字段的名称和字段的值之间用分割符例如冒号分割,各序列项之间用分隔符例如逗号进行分割。
例如,假设数据条目有4个字段,字段名称分别为A、B、C、D,对应的字段值分别为a,b,c,d,则进行序列化后得到的内容为{a,b,c,d},或者为{A:a,B:b,C:c,D:d}。
当所述索引名称包括数据键值类型、排序查询方式标识和分组查询方式标识时,则在第二数据存储器300中,每个数据条目的唯一标识为该数据条目在第一数据存储器100中的唯一标识,相关联的数据内容为将数据条目的与数据键值类型对应的各个字段进行序列化后得到的内容。例如,当第一数据存储器100为关系型数据库时,该唯一标识可以为数据条目的主键。
例如,假设数据条目有4个字段,字段名称分别为A、B、C、D,对应的字段值分别为a,b,c,d,数据键值类型为{A、C},则进行序列化后得到的内容为{a,c},或者为{A:a,C:c}。
关联单元240适于根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器300中的唯一标识,获取与该索引相关联的数据条目标识列表。
每个索引对应一种查询方式,对于每种查询方式,关联单元240可以构造相应的查询语句来从第一数据存储器100中获取相对应的数据条目。例如,当所述第一数据存储器100为关系型数据库时,关联单元240可以根据查询方式构造SQL语句,根据构造的SQL语句对所述第一数据存储器100进行操作,从而获得与该查询方式对应的数据条目。SQL语句示例如下:
select*from表名sort by A group by B。
关联单元240获取到与该索引相关联的一个或多个数据条目后,确定每个数据条目的唯一标识,例如为数据条目的主键,从而得到与该索引相关联的数据条目标识列表,然后,索引存储单元220可以将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器300中。如此,就将第二数据存储器中存储的索引与该索引对应的数据条目集合关联起来了。
为提高数据处理速度,关联单元240可以启动多个第二线程,每个第二线程负责排序列表中的一个或多个排序查询方式,从第一数据存储器100中确定与所负责的排序查询方式对应的排序数据条目集合;并启动多个第三线程,每个第三线程负责索引列表中的一个或多个索引,从与所负责的索引对应的排序数据条目集合中确定与该索引相关联的一个或多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表。
为进一步提高数据处理速度,关联单元240还可以将排序数据条目集合划分为多个数据块,启动多个第四线程,每个第四线程负责从一个或多个数据块中确定与该索引相关联的一个或多个数据条目。在具体实现时,关联单元240可以先判断排序数据条目集合中的数据条目的数量是否大于阈值,然后根据判断结果决定是否执行多线程处理。当数据条目的数量大于阈值时,执行所述多线程处理,否则,可以不执行所述多线程处理。其中,所述阈值可以根据经验值和试验确定。
根据本发明实施例的数据存储***200,通过采用离线计算代替同步计算,有效的提高了数据的查询效率。例如,可以在所述第二数据存储器300中配置查询接口,应用服务器400不需要访问第一数据存储器100进行实时计算,而是直接从查询接口来获取与查询请求对应的数据条目,如此,避免了对第一数据存储器100中数据条目的复杂的查询运算,提高了查询速度。
如前所述,在一种实现方式中,第二数据存储器中300存储的索引名称包括排序查询方式标识和分组查询方式标识;在另一种实现方式中,所述索引名称包括数据键值类型、排序查询方式标识和分组查询方式标识。
对应于上述的两种实现方式,所述查询接口获取查询数据的方式也有两种。在一种实现方式中,查询接口获取数据的过程为:
获取来自应用服务器400的查询请求,所述查询请求包括查询方式和键值;
根据查询方式确定索引名称,从第二数据存储器300中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器300中获取相关联的数据内容;
对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器400。
其中,去序列化是序列化的逆过程,其具体实现过程本领域技术人员容易根据前述的序列化过程确定。
在另一种实现方式中,查询接口获取数据的过程为:
获取来自应用服务器400的查询请求,所述查询请求包括查询方式和键值;
根据查询方式和键值确定索引名称,从第二数据存储器300中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器300中获取相关联的数据内容;
对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器400。
两种实现方式的一个差别在于:在第一种实现方式中,去序列化后的内容是整个数据条目的内容,还需要从中获取与键值对应的内容后再返回给应用服务器;在第二种实现方式中,去序列化后的内容是数据条目中与键值对应的内容,可以直接返回给应用服务器。
图3示出了根据本发明一个实施例的数据存储方法的流程示意图,该数据存储方法适于将来自第一数据存储器的数据条目存储到第二数据存储器中,其中第一数据存储器可以是关系型数据库,例如Oracle、DB2、Microsoft SQL Server和MySQL等,第二数据存储器可以是键-值方式的no sql数据库,例如redis数据库。
参照图3,所述数据存储器方法可以包括:
步骤S310,根据对第一数据存储器中的数据条目的查询方式构造索引列表,索引列表中的每个索引对应一种查询方式;
对数据条目的查询方式一般包括排序查询方式(order by)和分组查询方式(group by),以及二者的组合。order by和group by的数量是有限的,而且大部分的orderby和group by是一起使用的,因此,可以先根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表;然后,根据排序列表和分组列表进行笛卡尔乘积,构造所述索引列表。当然,对数据条目的查询方式也可以是现有技术中的其他查询方式,甚至是将来有可能出现的其他查询方式,本发明实施例对此不做限制。
步骤S320,在第二数据存储器中存储该索引列表中的每个索引;
在第二数据存储器中,每个索引包括标识该索引的索引名称以及与该索引相关联的数据条目标识列表。在本步骤中,可以先将索引名称作为键(key)存储到第二存储器中,对应的值(vlaue)暂时为空。在后续的步骤中确定了索引名称对应的数据条目标识列表后,再将该数据条目标识列表作为值与对应的索引名称相关联的存储到第二存储器中。例如,对于redis数据库,对应的值的类型可以采用有序集(sorted set),即所存储的数据条目标识列表中的数据条目标识是有序的,其顺序由索引对应的查询方式所确定。
在一种实现方式中,所述索引名称包括排序查询方式标识(orderID)和分组查询方式标识(groupID)。在另一种实现方式中,所述索引名称包括数据键值类型、排序查询方式标识和分组查询方式标识。其中,所述数据键值类型用于标识键值信息,所述键值为数据条目的一个或多个字段名称。在具体实现时,所述数据键值类型可以直接采用所述键值,也可以是对键值进行编码后的值,且本发明实施例对具体的编码方式不做限制。
步骤S330,从第一数据存储器中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中;
在第二数据存储器中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容。例如对于redis数据库,每个数据条目是以数据条目的唯一标识作为键,以相关联的数据内容作为值进行存储。
为提高数据处理速度,可以将第一数据存储器划分为多个数据区,并启动多个第一线程,每个第一线程负责从第一数据存储器的一个或多个数据区中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中,即多个第一线程并行地将第一数据存储器中的数据条目写入到第二数据存储器中。
在具体实现时,可以先判断第一数据存储器中存储的数据条目的数量是否大于阈值,然后根据判断结果决定是否执行多线程处理。当数据条目的数量大于阈值时,执行所述多线程处理,否则,可以不执行所述多线程处理。其中,所述阈值可以根据经验值和试验确定。
当所述索引名称包括排序查询方式标识和分组查询方式标识时,则在第二数据存储器中,每个数据条目的唯一标识为该数据条目在第一数据存储器中的唯一标识,相关联的数据内容为将数据条目的各个字段进行序列化后得到的内容。例如,当第一数据存储器为关系型数据库时,该唯一标识可以为数据条目的主键。
当所述索引名称包括数据键值类型、排序查询方式标识和分组查询方式标识时,则在第二数据存储器中,每个数据条目的唯一标识为该数据条目在第一数据存储器中的唯一标识,相关联的数据内容为将数据条目的与数据键值类型对应的各个字段进行序列化后得到的内容。例如,当第一数据存储器为关系型数据库时,该唯一标识可以为数据条目的主键。
步骤S340,根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表;
每个索引对应一种查询方式,对于每种查询方式,可以构造相应的查询语句来从第一数据存储器中获取相对应的数据条目。例如,当所述第一数据存储器为关系型数据库时,可以根据查询方式构造SQL语句,根据构造的SQL语句对所述第一数据存储器进行操作,从而获得与该查询方式对应的数据条目。
获取到与该索引相关联的一个或多个数据条目后,再进一步确定每个数据条目的唯一标识,例如为数据条目的主键,从而得到与该索引相关联的数据条目标识列表。
为提高数据处理速度,可以启动多个第二线程,每个第二线程负责排序列表中的一个或多个排序查询方式,从第一数据存储器中确定与所负责的排序查询方式对应的排序数据条目集合;并启动多个第三线程,每个第三线程负责索引列表中的一个或多个索引,从与所负责的索引对应的排序数据条目集合中确定与该索引相关联的一个或多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表。
为进一步提高数据处理速度,还可以将排序数据条目集合划分为多个数据块,启动多个第四线程,每个第四线程负责从一个或多个数据块中确定与该索引相关联的一个或多个数据条目。在具体实现时,可以先判断排序数据条目集合中的数据条目的数量是否大于阈值,然后根据判断结果决定是否执行多线程处理。当数据条目的数量大于阈值时,执行所述多线程处理,否则,可以不执行所述多线程处理。其中,所述阈值可以根据经验值和试验确定。
步骤S350,将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中,如此,就将第二数据存储器中存储的索引与该索引对应的数据条目集合关联起来了。
根据本发明实施例的数据存储方法,通过采用离线计算代替同步计算,有效的提高了数据的查询效率。例如,可以在所述第二数据存储器中配置查询接口,应用服务器不需要访问第一数据存储器进行实时计算,而是直接从查询接口来获取与查询请求对应的数据条目,如此,避免了对第一数据存储器中数据条目的复杂的查询运算,提高了查询速度。
也就是说,本发明实施例的数据存储方法还可以包括如下步骤:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值,其中所述键值为数据条目的一个或多个字段名称;
根据查询方式确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器。
或者,本发明实施例的数据存储方法还可以包括如下步骤:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值;
根据查询方式和键值确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器。
以下给出本发明的一个应用实例。
在该应用实例中,汽车经销商降价排行榜数据存储在传统的关系型数据库中,在该关系型数据库中存储的汽车数据条目包括如下字段名称:
DealerId SpecId SpecName SpecImage SeriesId SeriesName BrandIdFactoryId NewsId NewsType NewsTitle StartDate EndDate DTime PriceOriginalPrice PriceOffPercent OrdersLastMonth OrdersLastQuarter CreateTimeModifyTime PID CID SID KindId NewsTemplateId serieslevel InventoryStatePriceScope EquipCarId PackageName PackagePrice IsRecommend PriceW IsLastWeek
以下列举该关系型数据库中的3个数据条目:
数据条目1:1104632012款S53.0T Sportback~/upload/2013/7/19/l_201307191945189324136.jpg2734奥迪S533 79 8266471 0奥迪S5现车充足最高优惠9.46万元2013-12-3100:00:00.0002014-01-0500:00:00.0002013-12-3110:35:33.723633400728000 13 1951 2013-12-31 10:55:00 2013-12-31 10:55:00110000 110100 110105 12671390 4 0 70 0 0 0 64 1
数据条目2:1 10771 2013款S64.0TFSI~/upload/2013/4/19/l_201304191833167634435.jpg2736奥迪S633 79 8266541 0奥迪S6现车充足最高优惠6.93万元2013-12-31 00:00:00.000 2014-01-0500:00:00.000 2013-12-31 10:37:12.510988700 1058000 7 97 12013-12-31 10:55:00 2013-12-31 10:55:00110000110100 110105 1 26714295 0 100 0 0 0 99 1
数据条目3:1122032012款30FSI技术型~/upload/spec/12203/l_201207041848360214178.jpg18奥迪A6L33 9 8266413 0奥迪A6L现车充足最高优惠11.13万元2013-12-31 00:00:00.000 2014-01-0500:00:00.000 2013-12-3110:34:25.467380900 432800 12 1700 5 2013-12-24 18:55:00 2013-12-3110:55:00 110000110100110105 1 2671359 5 0 50 0 0 0 39 1
对上述降价排行榜数据进行发布的过程如下:
(1)根据对该降价排行榜数据中数据条目的查询方式,构造排序列表(Order by)如下:
可以看出,在所构造的排序列表中,包括有8种排序查询方式。
构造分组列表(group by)如下
new string[]{"BrandId","SeriesId","SpecId","PID","CID","BrandId,PID","BrandId,CID","SeriesId,PID","SeriesId,CID","SpecId,PID","SeriesLevel"}
可以看出,在所构造的分组列表中,包括有11种分组查询方式。
然后,对二者进行笛卡尔乘积,得到多个组合,组合数量为8*11=88,即索引列表中包括88个索引,对应88种查询方式。
(2)将每种查询条件作为索引的key存储在redis数据库中,则key为:
"Promotion(PriceOffPercent desc,LessPrice desc,DTime desc|SpecId,PID)"
对应排序查询条件:
"PriceOffPercent desc,LessPrice desc,DTime desc"
对应分组查询条件:
"SpecId,PID"
(3)在redis数据库中以key-value方式存储数据条目的key值和value值,示例如下:
Key:"Promotion_urn:promotion:92540000014492"
Value:"{\"DealerId\":9254,\"SpecId\":14492,\"SpecName\":\"2013\xe6\xac\xbe1.6L\xe6\x89\x8b\xe5\x8a\xa8\xe8\x88\x92\xe9\x80\x82\xe7\x89\x88\",\"SpecImage\":\"~/upload/2013/5/15/l_201305151900310633686.jpg\",\"SeriesId\":145,\"SeriesName\":\"POLO\",\"SeriesLevel\":2,\"BrandId\":1,\"FactoryId\":58,\"NewsId\":8313674,\"NewsType\":0,\"NewsTitle\":\"POLO\xe5\xb0\x91\xe9\x87\x8f\xe7\x8e\xb0\xe8\xbd\xa6\xe6\x9c\x80\xe9\xab\x98\xe4\xbc\x98\xe6\x83\xa00.5\xe4\xb8\x87\xe5\x85\x83\",\"StartDate\":\"\\/Date(1388505600000+0800)\\/\",\"EndDate\":\"\\/Date(1391097600000+0800)\\/\",\"DTime\":\"\\/Date(1388643961877+0800)\\/\",\"Price\":94900,\"OriginalPrice\":99900,\"PriceOffPercent\":5,\"OrdersLastMonth\":1178,\"OrdersLastQuarter\":0,\"CreateTime\":\"\\/Date(1385864760000+0800)\\/\",\"ModifyTime\":\"\\/Date(1388645760000+0800)\\/\",\"PID\":210000,\"CID\":210300,\"SID\":210303,\"KindId\":1,\"NewsTemplateId\":2699366,\"InventoryState\":1,\"PriceW\":10,\"PriceScope\":10,\"EquipCarId\":0,\"PackagePrice\":0,\"IsRecommend\":0,\"IsLastWeek\":1}"
其中,value值是根据业务类型Promotion序列化生成,进行序列化的部分代码如下:
(4)根据(2)中生成的key获取对应的查询方式,根据获取到的查询方式,从关系型数据库中获取与该查询方式对应的数据条目,并确定这些数据条目在redis数据库中的key,得到key列表。
(5)将每个索引的key与对应的key列表相关联的存储到redis数据库中,实现索引与数据条目的关联,从而完成数据的发布。
之后,就可以向应用服务器提供用于数据查询的API接口,查询API接口的示例如下:
List<Promotion>list=Redis<Promotion>.Instance.GetData("PriceOffPercent desc,LessPrice desc,DTime desc","SpecId,PID0").ToList();
对应的GetData方法实现如下:
将上述数据存储***上线运行后,发现经销商降价排行榜数据查询接口的tps(Transactions Per Second,事务数/秒)从原有的6714提高到了1023088,性能获得大幅度的提升。
以下给出本发明实施例的数据存储***和数据存储方法对数据和索引进行分块并行计算的示例。
图4示出了本发明实施例中数据和索引的分块并行计算示意图。参照图4,数据和索引的分块并行计算过程如下:
(1)对于待从第一数据存储器写入到第二数据存储器的数据条目,判断这些数据条目的数量是否大于阈值,若是,则可以将第一数据存储器划分为多个数据区(例如i个),并启动多个第一线程(例如i个),每个第一线程对应一个数据计算子任务,每个数据计算子任务负责从第一数据存储器的一个数据区中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中。如果数据条目的数量不大于阈值,则可以不对第一数据存储器进行分区,仅利用一个线程来处理全部的数据条目。当然,每个第一线程也可以对应多个数据计算子任务。
(2)启动多个第二线程(例如为n个),每个第二线程对应一个排序索引计算子任务,每个排序索引计算子任务负责排序列表(例如有n个order by)中的一个排序查询方式,从第一数据存储器中确定与所负责的排序查询方式对应的排序数据条目集合。当然,每个第二线程也可以对应多个排序索引计算子任务。例如,有20个order by,则可以启动5个第二线程,每个第二线程处理4个order by。
(3)启动多个第三线程(例如为n*m个),每个第三线程对应一个排序*分组索引计算子任务(假设有m个group by),每个排序*分组索引计算子任务负责从对应的排序数据条目集合中确定与该索引(由所对应的排序与分组的组合确定)相关联的一个或多个数据条目。当然,每个第三线程也可以对应多个排序*分组索引计算子任务。
(4)对于每个第三线程,还可以判断其对应的排序数据条目集合中数据条目的数量是否大于阈值,若是,则可以将排序数据条目集合划分为多个数据块(例如为x个),并启动多个第四线程(例如为x个),每个第四线程负责从一个数据块中确定与该索引相关联的一个或多个数据条目。如果数据条目的数量不大于阈值,则可以不对排序数据条目集合进行分块,仅利用一个线程来处理全部的数据条目。当然,每个第四线程也可以负责多个数据块的处理。
根据上述的并行处理,大幅提高了数据和索引写入到第二数据存储器时的写入速度。
在此提供的算法和显示不与任何特定计算机、虚拟***或者其它设备固有相关。各种通用***也可以与基于在此的示教一起使用。根据上面的描述,构造这类***所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的数据存储***中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
A1、一种数据存储方法,适于将来自第一数据存储器的数据条目存储到第二数据存储器中,该方法包括:根据对第一数据存储器中的数据条目的查询方式构造索引列表,索引列表中的每个索引对应一种查询方式;在第二数据存储器中存储该索引列表中的每个索引,其中每个索引包括标识该索引的索引名称;将第一数据存储器划分为多个数据区,启动多个第一线程,每个第一线程负责从第一数据存储器的一个或多个数据区中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中,其中在第二数据存储器中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容;根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表;以及将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中。A2、如A1所述的数据存储方法,其中,所述根据对第一数据存储器中的数据条目的查询方式构造索引列表,包括:根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表;根据排序列表和分组列表进行笛卡尔乘积,构造所述索引列表。A3、如A2所述的数据存储方法,其中,所述根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表,包括:启动多个第二线程,每个第二线程负责排序列表中的一个或多个排序查询方式,从第一数据存储器中确定与所负责的排序查询方式对应的排序数据条目集合;启动多个第三线程,每个第三线程负责索引列表中的一个或多个索引,从与所负责的索引对应的排序数据条目集合中确定与该索引相关联的一个或多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表。A4、如A3所述的数据存储方法,其中,所述从与所负责的索引对应的排序数据条目集合中确定与该索引相关联的一个或多个数据条目,包括:将排序数据条目集合划分为多个数据块,启动多个第四线程,每个第四线程负责从一个或多个数据块中确定与该索引相关联的一个或多个数据条目。A5、如A2、A3或A4所述的数据存储方法,其中,所述索引名称包括排序查询方式标识和分组查询方式标识;在所述第二数据存储器中,每个数据条目的唯一标识为该数据条目在第一数据存储器中的唯一标识,以及数据内容为将数据条目的各个字段进行序列化后得到的内容。A6、如A5所述的数据存储方法,其中,所述索引名称还包括数据键值类型;在所述第二数据存储器中,每个数据条目的唯一标识还包括数据键值类型,以及数据内容为将数据条目的与数据键值类型对应的各个字段进行序列化后得到的内容;其中,所述数据键值类型用于标识键值信息,所述键值为数据条目的一个或多个字段名称。A7、如A5所述的数据存储方法,其中,还包括:获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值,其中所述键值为数据条目的一个或多个字段名称;根据查询方式确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器。A8、如A6所述的数据存储方法,其中,还包括:获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值;根据查询方式和键值确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器。
A9、如A1所述的数据存储方法,其中,第一数据存储器中的数据条目以关系型数据库方式进行存储;以及第二数据存储器中的索引以索引名称为键、以相关联的数据条目标识列表为值的键-值方式进行存储,以及数据条目以数据条目的唯一标识为键、以相关联的数据内容为值的键-值方式进行存储。B1、一种数据存储***,适于将来自第一数据存储器的数据条目存储到第二数据存储器中,该***包括:索引列表构造单元,适于根据对第一数据存储器中的数据条目的查询方式构造索引列表,索引列表中的每个索引对应一种查询方式;索引存储单元,适于在第二数据存储器中存储该索引列表中的每个索引,其中每个索引包括标识该索引的索引名称;数据条目存储单元,适于将第一数据存储器划分为多个数据区,启动多个第一线程,每个第一线程负责从第一数据存储器的一个或多个数据区中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中,其中在第二数据存储器中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容;以及关联单元,适于根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表;其中,所述索引存储单元被配置成将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中。B2、如B1所述的数据存储***,其中,所述索引列表构造单元被配置成:根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表;根据排序列表和分组列表进行笛卡尔乘积,构造所述索引列表。B3、如权利要求B2所述的数据存储***,其中,所述关联单元被配置成:启动多个第二线程,每个第二线程负责排序列表中的一个或多个排序查询方式,从第一数据存储器中确定与所负责的排序查询方式对应的排序数据条目集合;启动多个第三线程,每个第三线程负责索引列表中的一个或多个索引,从与所负责的索引对应的排序数据条目集合中确定与该索引相关联的一个或多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表。B4、如权利要求B3所述的数据存储***,其中,所述关联单元被配置成:将排序数据条目集合划分为多个数据块,启动多个第四线程,每个第四线程负责从一个或多个数据块中确定与该索引相关联的一个或多个数据条目。B5、如权利要求B2、B3或B4所述的数据存储***,其中,所述索引名称包括排序查询方式标识和分组查询方式标识;在所述第二数据存储器中,每个数据条目的唯一标识为该数据条目在第一数据存储器中的唯一标识,以及数据内容为将数据条目的各个字段进行序列化后得到的内容。B6、如权利要求B5所述的数据存储***,其中,所述索引名称还包括数据键值类型;在所述第二数据存储器中,每个数据条目的唯一标识还包括数据键值类型,以及数据内容为将数据条目的与数据键值类型对应的各个字段进行序列化后得到的内容;其中,所述数据键值类型用于标识键值信息,所述键值为数据条目的一个或多个字段名称。B7、如权利要求B5所述的数据存储***,其中,所述第二数据存储器还包括查询接口,所述查询接口被配置成:获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值,其中所述键值为数据条目的一个或多个字段名称;根据查询方式确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器。B8、如权利要求B6所述的数据存储***,其中,所述第二数据存储器还包括查询接口,所述查询接口被配置成:获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值;根据查询方式和键值确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器。B9、如权利要求B1所述的数据存储***,其中,第一数据存储器中的数据条目以关系型数据库方式进行存储;以及第二数据存储器中的索引以索引名称为键、以相关联的数据条目标识列表为值的键-值方式进行存储,以及数据条目以数据条目的唯一标识为键、以相关联的数据内容为值的键-值方式进行存储。C1、一种数据查询***,包括第一数据存储器、数据发布服务器和第二数据存储器,其中,所述数据发布服务器包括如B1至B9中任一项所述的数据存储***。

Claims (15)

1.一种数据存储方法,适于将来自第一数据存储器的数据条目存储到第二数据存储器中,所述第一数据存储器是关系型数据库,所述第二数据存储器是键-值式的no sql数据库,其包括查询接口,所述查询接口适于接收应用服务器发来的查询请求,获取与查询请求相对应的数据条目并返回给应用服务器,该方法包括:
根据对第一数据存储器中的数据条目的查询方式构造索引列表:根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表;根据排序列表和分组列表进行笛卡尔乘积,构造所述索引列表,索引列表中的每个索引对应一种查询方式;
在第二数据存储器中存储该索引列表中的每个索引,其中每个索引包括标识该索引的索引名称,第二数据存储器中的索引以索引名称为键、以相关联的数据条目标识列表为值的键-值方式进行存储;
将第一数据存储器划分为多个数据区,启动多个第一线程,每个第一线程负责从第一数据存储器的一个或多个数据区中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中,其中在第二数据存储器中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容,数据条目以数据条目的唯一标识为键、以相关联的数据内容为值的键-值方式进行存储;
根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表;以及
将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中。
2.如权利要求1所述的数据存储方法,其中,所述根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表,包括:
启动多个第二线程,每个第二线程负责排序列表中的一个或多个排序查询方式,从第一数据存储器中确定与所负责的排序查询方式对应的排序数据条目集合;
启动多个第三线程,每个第三线程负责索引列表中的一个或多个索引,从与所负责的索引对应的排序数据条目集合中确定与该索引相关联的一个或多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表。
3.如权利要求2所述的数据存储方法,其中,所述从与所负责的索引对应的排序数据条目集合中确定与该索引相关联的一个或多个数据条目,包括:
将排序数据条目集合划分为多个数据块,启动多个第四线程,每个第四线程负责从一个或多个数据块中确定与该索引相关联的一个或多个数据条目。
4.如权利要求1-3中任一项所述的数据存储方法,其中,所述索引名称包括排序查询方式标识和分组查询方式标识;
在所述第二数据存储器中,每个数据条目的唯一标识为该数据条目在第一数据存储器中的唯一标识,以及数据内容为将数据条目的各个字段进行序列化后得到的内容。
5.如权利要求4所述的数据存储方法,其中,所述索引名称还包括数据键值类型;
在所述第二数据存储器中,每个数据条目的唯一标识还包括数据键值类型,以及数据内容为将数据条目的与数据键值类型对应的各个字段进行序列化后得到的内容;
其中,所述数据键值类型用于标识键值信息,所述键值为数据条目的一个或多个字段名称。
6.如权利要求4所述的数据存储方法,其中,还包括:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值,其中所述键值为数据条目的一个或多个字段名称;
根据查询方式确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器。
7.如权利要求5所述的数据存储方法,其中,还包括:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值;
根据查询方式和键值确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器。
8.一种数据存储***,适于将来自第一数据存储器的数据条目存储到第二数据存储器中,所述第一数据存储器是关系型数据库,所述第二数据存储器是键-值式的no sql数据库,其包括查询接口,所述查询接口适于接收应用服务器发来的查询请求,获取与查询请求相对应的数据条目并返回给应用服务器,该***包括:
索引列表构造单元,适于根据对第一数据存储器中的数据条目的查询方式构造索引列表:根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表;根据排序列表和分组列表进行笛卡尔乘积,构造所述索引列表,索引列表中的每个索引对应一种查询方式;
索引存储单元,适于在第二数据存储器中存储该索引列表中的每个索引,其中每个索引包括标识该索引的索引名称,第二数据存储器中的索引以索引名称为键、以相关联的数据条目标识列表为值的键-值方式进行存储;
数据条目存储单元,适于将第一数据存储器划分为多个数据区,启动多个第一线程,每个第一线程负责从第一数据存储器的一个或多个数据区中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中,其中在第二数据存储器中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容,数据条目以数据条目的唯一标识为键、以相关联的数据内容为值的键-值方式进行存储;以及
关联单元,适于根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表;
其中,所述索引存储单元被配置成将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中。
9.如权利要求8所述的数据存储***,其中,所述关联单元被配置成:
启动多个第二线程,每个第二线程负责排序列表中的一个或多个排序查询方式,从第一数据存储器中确定与所负责的排序查询方式对应的排序数据条目集合;
启动多个第三线程,每个第三线程负责索引列表中的一个或多个索引,从与所负责的索引对应的排序数据条目集合中确定与该索引相关联的一个或多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表。
10.如权利要求9所述的数据存储***,其中,所述关联单元被配置成:
将排序数据条目集合划分为多个数据块,启动多个第四线程,每个第四线程负责从一个或多个数据块中确定与该索引相关联的一个或多个数据条目。
11.如权利要求8-10中任一项所述的数据存储***,其中,所述索引名称包括排序查询方式标识和分组查询方式标识;
在所述第二数据存储器中,每个数据条目的唯一标识为该数据条目在第一数据存储器中的唯一标识,以及数据内容为将数据条目的各个字段进行序列化后得到的内容。
12.如权利要求11所述的数据存储***,其中,所述索引名称还包括数据键值类型;
在所述第二数据存储器中,每个数据条目的唯一标识还包括数据键值类型,以及数据内容为将数据条目的与数据键值类型对应的各个字段进行序列化后得到的内容;
其中,所述数据键值类型用于标识键值信息,所述键值为数据条目的一个或多个字段名称。
13.如权利要求11所述的数据存储***,其中,所述查询接口被配置成:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值,其中所述键值为数据条目的一个或多个字段名称;
根据查询方式确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器。
14.如权利要求12所述的数据存储***,其中,所述查询接口被配置成:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值;
根据查询方式和键值确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器。
15.一种数据查询***,包括第一数据存储器、数据发布服务器和第二数据存储器,其中,所述数据发布服务器包括如权利要求8-14中任一项所述的数据存储***。
CN201410126243.XA 2014-03-31 2014-03-31 一种数据存储***和存储方法 Active CN103902702B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410126243.XA CN103902702B (zh) 2014-03-31 2014-03-31 一种数据存储***和存储方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410126243.XA CN103902702B (zh) 2014-03-31 2014-03-31 一种数据存储***和存储方法

Publications (2)

Publication Number Publication Date
CN103902702A CN103902702A (zh) 2014-07-02
CN103902702B true CN103902702B (zh) 2017-11-28

Family

ID=50994024

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410126243.XA Active CN103902702B (zh) 2014-03-31 2014-03-31 一种数据存储***和存储方法

Country Status (1)

Country Link
CN (1) CN103902702B (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105653528B (zh) * 2014-11-11 2020-04-07 金蝶软件(中国)有限公司 一种业务字段多态展示的方法及装置
CN105069017A (zh) * 2015-07-13 2015-11-18 深圳市永兴元科技有限公司 报表***中的报表存储方法及报表***
US10108637B2 (en) * 2016-03-08 2018-10-23 International Business Machines Corporation Spatial-temporal storage system, method, and recording medium
CN107817946B (zh) * 2016-09-13 2021-06-04 阿里巴巴集团控股有限公司 用于混合存储设备读写数据的方法以及装置
CN106446201A (zh) * 2016-09-30 2017-02-22 福建中金在线信息科技有限公司 一种社交圈数据的处理方法及装置
CN108268515B (zh) * 2016-12-30 2020-07-31 北京国双科技有限公司 聚合表维度的选择方法和装置
CN107656968B (zh) * 2017-08-31 2021-04-23 武汉斗鱼网络科技有限公司 大批量业务数据导出方法及***
CN108536798B (zh) * 2018-04-02 2020-12-01 携程旅游网络技术(上海)有限公司 订单级别的数据库数据的恢复方法及***
CN108776678B (zh) * 2018-05-29 2020-07-03 阿里巴巴集团控股有限公司 基于移动端NoSQL数据库的索引创建方法及装置
CN109145004A (zh) * 2018-08-29 2019-01-04 智慧互通科技有限公司 一种创建数据库索引的方法及装置
CN110149529B (zh) * 2018-11-01 2021-05-28 腾讯科技(深圳)有限公司 媒体信息的处理方法、服务器及存储介质
CN111143232B (zh) * 2018-11-02 2023-08-18 伊姆西Ip控股有限责任公司 用于存储元数据的方法、设备和计算机可读介质
CN109828987A (zh) * 2019-01-21 2019-05-31 深圳乐信软件技术有限公司 一种千万级数据计算方法、装置、电子设备和介质
CN113127659A (zh) * 2019-12-31 2021-07-16 深圳云天励飞技术有限公司 图像数据录入方法、装置、电子设备及存储介质
CN111752947B (zh) * 2020-06-24 2023-08-18 中国银行股份有限公司 整合***的方法及装置、存储介质及电子设备
CN117519839B (zh) * 2024-01-05 2024-04-16 恒生电子股份有限公司 数据加载方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102375853A (zh) * 2010-08-24 2012-03-14 ***通信集团公司 分布式数据库***、在其中建立索引的方法和查询方法
CN102867070A (zh) * 2012-09-29 2013-01-09 瑞庭网络技术(上海)有限公司 更新key-value分布式存储***缓存的方法
CN103177027A (zh) * 2011-12-23 2013-06-26 北京新媒传信科技有限公司 获取动态Feed索引的方法和***

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130093999A (ko) * 2012-02-15 2013-08-23 주식회사 시공미디어 클라우드 기반 데이터베이스와 관계형 데이터베이스 관리 시스템이 연동된 위치기반서비스를 이용한 개인 여행정보 공유 서비스 시스템

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102375853A (zh) * 2010-08-24 2012-03-14 ***通信集团公司 分布式数据库***、在其中建立索引的方法和查询方法
CN103177027A (zh) * 2011-12-23 2013-06-26 北京新媒传信科技有限公司 获取动态Feed索引的方法和***
CN102867070A (zh) * 2012-09-29 2013-01-09 瑞庭网络技术(上海)有限公司 更新key-value分布式存储***缓存的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"Redis数据库在视频推荐服务***中的应用";曹丹丹等;《计算机与现代化》;20131114(第10期);全文 *

Also Published As

Publication number Publication date
CN103902702A (zh) 2014-07-02

Similar Documents

Publication Publication Date Title
CN103902702B (zh) 一种数据存储***和存储方法
CN103902698B (zh) 一种数据存储***和存储方法
CN103902701B (zh) 一种数据存储***和存储方法
US11651036B2 (en) Integrated index blocks and searching in blockchain systems
Wang et al. Crowder: Crowdsourcing entity resolution
CN103810224B (zh) 信息持久化和查询方法及装置
CN109416694A (zh) 包括资源有效索引的键值存储***
CN104090962B (zh) 面向海量分布式数据库的嵌套查询方法
CN106202548A (zh) 数据存储方法、查找方法及装置
EP2608074A2 (en) Systems and methods for merging source records in accordance with survivorship rules
CN104765745B (zh) 对数据库中的加载数据进行逻辑验证的方法和***
CN106055621A (zh) 一种日志检索方法及装置
CN106295250A (zh) 二代测序短序列快速比对分析方法及装置
CN105426375B (zh) 一种关系网络的计算方法及装置
CN108897761A (zh) 一种聚簇存储方法及装置
CN110033206A (zh) 物料清单自动校核方法及装置
CN104281664B (zh) 分布式图计算***数据切分方法和***
CN109062936B (zh) 一种数据查询方法、计算机可读存储介质及终端设备
CN105117442B (zh) 一种基于概率的大数据查询方法
CN108776678B (zh) 基于移动端NoSQL数据库的索引创建方法及装置
CN104794130B (zh) 一种表间关联查询方法和装置
CN102169491A (zh) 一种多数据集中重复记录动态检测方法
CN104102694B (zh) 树形节点排序方法和树形节点排序装置
CN114240177A (zh) 一种政务数据质量评估方法及***
CN106503186A (zh) 一种数据管理方法、客户端及***

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C53 Correction of patent for invention or patent application
CB02 Change of applicant information

Address after: 100080 Beijing city Haidian District Danleng Street No. 3 floor 11 block B room 1109

Applicant after: BEIJING PIERRE BLANEY SOFTWARE CO., LTD.

Address before: 100080 Beijing city Haidian District Danleng Street No. 3 floor 11 block B room 1109

Applicant before: BEIJING CHESHANGHUI SOFTWARE CO., LTD.

COR Change of bibliographic data

Free format text: CORRECT: APPLICANT; FROM: BEIJING CHESHANGHUI SOFTWARE CO., LTD. TO: BEIJING PIER BULAINI SOFTWARE CO., LTD.

GR01 Patent grant
GR01 Patent grant