CN103902698B - 一种数据存储系统和存储方法 - Google Patents

一种数据存储系统和存储方法 Download PDF

Info

Publication number
CN103902698B
CN103902698B CN201410125753.5A CN201410125753A CN103902698B CN 103902698 B CN103902698 B CN 103902698B CN 201410125753 A CN201410125753 A CN 201410125753A CN 103902698 B CN103902698 B CN 103902698B
Authority
CN
China
Prior art keywords
data
index
storage
data entry
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
CN201410125753.5A
Other languages
English (en)
Other versions
CN103902698A (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 CN201410125753.5A priority Critical patent/CN103902698B/zh
Publication of CN103902698A publication Critical patent/CN103902698A/zh
Application granted granted Critical
Publication of CN103902698B publication Critical patent/CN103902698B/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/2228Indexing structures
    • 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

Landscapes

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

Abstract

本发明公开了一种数据存储系统和存储方法,属于数据库处理技术领域。该方法包括:根据对第一数据存储器中的数据条目的查询方式构造索引列表;根据当前时间戳生成数据版本号;在第二数据存储器中存储索引列表中的每个索引;从第一数据存储器中获取各个数据条目存储到第二数据存储器中;根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,获取与该索引相关联的数据条目标识列表;将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中;将当前活动的数据版本号更新为所生成的数据版本号。本发明能够提高对业务数据的查询效率,并能够基于时间定时更新数据,从而向应用服务器提供较新的数据。

Description

一种数据存储系统和存储方法
技术领域
本发明属于数据库处理技术领域,具体涉及一种数据存储系统和存储方法。
背景技术
传统的数据存储和访问的实现方式一般是基于关系型数据库或者是基于nosql数据库的分布式缓存。对于关系型数据库实现方式,数据存储在关系型数据库的磁盘中,应用程序通过sql语句访问数据库中的数据。由于sql语句的语法非常灵活,因此能够支持多种排序和多种分组条件下的复杂查询,即能够支持复杂的查询业务。但是,关系型数据库需要维护数据一致性,并维护大量关联关系,并且数据存储在硬盘上,导致数据查询速度慢,特别是在高并发访问情况下会严重影响查询效率。
对于nosql数据库实现方式,数据以键-值(key-value)对的方式存储在内存中。在这种实现方式下,由于数据存储在内存中,访问速度快,并且通过标准api(应用程序编程接口)获取数据简单易用。但这种实现方式无法很好的支持多种排序和多种组合条件的复杂查询,无法支持复杂的查询业务。
可见上述两种数据存储和访问的实现方式各有优劣。而如何在支持复杂的查询业务的前提下提高数据访问效率,就成为亟待解决的技术问题。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据存储系统和存储方法。
根据本发明的一个方面,提供了一种数据存储方法,适于将来自第一数据存储器的数据条目存储到第二数据存储器中,该方法包括:
根据对第一数据存储器中的数据条目的查询方式构造索引列表,索引列表中的每个索引对应一种查询方式;
根据当前时间戳生成数据版本号;
在第二数据存储器中存储该索引列表中的每个索引,其中每个索引包括标识该索引的索引名称,所述索引名称包括所生成的数据版本号;
从第一数据存储器中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中,其中在第二数据存储器中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容,所述数据条目的唯一标识包括所生成的数据版本号;
根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表;
将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中;以及
在对第二数据存储器的数据写入完成后,将当前活动的数据版本号更新为所生成的数据版本号。
可选地,所述根据对第一数据存储器中的数据条目的查询方式构造索引列表,包括:
根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表;
根据排序列表和分组列表进行笛卡尔乘积,构造所述索引列表。
可选地,所述索引名称还包括排序查询方式标识和分组查询方式标识;
在所述第二数据存储器中,每个数据条目的唯一标识为该数据条目在第一数据存储器中的唯一标识和所生成的数据版本号,以及数据内容为将数据条目的各个字段进行序列化后得到的内容。
可选地,所述索引名称还包括数据键值类型;
在所述第二数据存储器中,每个数据条目的唯一标识还包括数据键值类型,以及数据内容为将数据条目的与数据键值类型对应的各个字段进行序列化后得到的内容;
其中,所述数据键值类型用于标识键值信息,所述键值为数据条目的一个或多个字段名称。
可选地,所述方法还包括:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值,其中所述键值为数据条目的一个或多个字段名称;
获取当前活动的数据版本号,根据当前活动的数据版本号和查询方式确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器。
可选地,所述方法还包括:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值;
获取当前活动的数据版本号,根据当前活动的数据版本号、查询方式和键值确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器。
可选地,第一数据存储器中的数据条目以关系型数据库方式进行存储;以及
第二数据存储器中的索引以索引名称为键、以相关联的数据条目标识列表为值的键-值方式进行存储,以及数据条目以数据条目的唯一标识为键、以相关联的数据内容为值的键-值方式进行存储。
可选地,所述方法还包括:在数据的老化时间到达时,从第二数据存储器中删除相应版本的索引和数据条目。
根据本发明的另一方面,提供了一种数据存储系统,适于将来自第一数据存储器的数据条目存储到第二数据存储器中,该系统包括:
索引列表构造单元,适于根据对第一数据存储器中的数据条目的查询方式构造索引列表,索引列表中的每个索引对应一种查询方式;
版本号管理单元,适于根据当前时间戳生成数据版本号,并在对第二数据存储器的数据写入完成后,将当前活动的数据版本号更新为所生成的数据版本号;
索引存储单元,适于在第二数据存储器中存储该索引列表中的每个索引,其中每个索引包括标识该索引的索引名称,所述索引名称包括所生成的数据版本号;
数据条目存储单元,适于从第一数据存储器中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中,其中在第二数据存储器中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容,所述数据条目的唯一标识包括所生成的数据版本号;以及
关联单元,适于根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表;
其中,所述索引存储单元被配置成将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中。
可选地,所述索引列表构造单元被配置成:
根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表;
根据排序列表和分组列表进行笛卡尔乘积,构造所述索引列表。
可选地,所述索引名称还包括排序查询方式标识和分组查询方式标识;
在所述第二数据存储器中,每个数据条目的唯一标识为该数据条目在第一数据存储器中的唯一标识和所生成的数据版本号,以及数据内容为将数据条目的各个字段进行序列化后得到的内容。
可选地,所述索引名称还包括数据键值类型;
在所述第二数据存储器中,每个数据条目的唯一标识还包括数据键值类型,以及数据内容为将数据条目的与数据键值类型对应的各个字段进行序列化后得到的内容;
其中,所述数据键值类型用于标识键值信息,所述键值为数据条目的一个或多个字段名称。
可选地,所述第二数据存储器还包括查询接口,所述查询接口被配置成:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值,其中所述键值为数据条目的一个或多个字段名称;
获取当前活动的数据版本号,根据当前活动的数据版本号、查询方式确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器。
可选地,所述第二数据存储器还包括查询接口,所述查询接口被配置成:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值;
获取当前活动的数据版本号,根据当前活动的数据版本号、查询方式和键值确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器。
可选地,第一数据存储器中的数据条目以关系型数据库方式进行存储;以及
第二数据存储器中的索引以索引名称为键、以相关联的数据条目标识列表为值的键-值方式进行存储,以及数据条目以数据条目的唯一标识为键、以相关联的数据内容为值的键-值方式进行存储。
可选地,所述系统还包括老化单元,适于在数据的老化时间到达时,从第二数据存储器中删除相应版本的索引和数据条目。
根据本发明的又一方面,提供了一种数据查询系统,包括第一数据存储器、数据发布服务器和第二数据存储器,其中,所述数据发布服务器包括上述的数据存储系统。
根据本发明的上述一个或多个技术方案,通过采用离线计算代替同步计算,并整合传统关系型数据库和nosql数据库的优点,既满足了对业务数据进行复杂查询的功能要求,又解决了基于传统关系型数据库查询效率较低的问题,特别是提高了高并发环境下的数据查询效率;通过数据版本号管理,能够基于时间定时更新数据,从而向应用服务器提供较新的数据。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的数据查询系统的结构示意图;
图2示出了根据本发明一个实施例的数据存储系统的结构示意图;以及
图3示出了根据本发明一个实施例的数据存储方法的流程示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的数据查询系统的结构示意图。参照图1,本发明实施例的数据查询系统可以包括:第一数据存储器100、数据发布服务器20和第二数据存储器300,其中数据发布服务器20分别与第一数据存储器100和第二数据存储器300通信连接,且数据发布服务器20包括数据存储系统200,即数据存储系统200驻留在数据发布服务器20中。
数据存储系统200能够从第一数据存储器中100获取各个数据条目,将所获取的数据条目存储到第二数据存储器300中,其中在第二数据存储器300中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容,且所述数据条目的唯一标识包括数据版本号(version)。数据存储系统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和版本号管理单元250。
考虑到对业务数据的使用实际情况,在现实中使用的数据查询方式是有限的,因此,索引列表构造单元210可以根据对第一数据存储器100中的数据条目的各种查询方式构造索引列表,也就是说,索引列表中包括多个索引,每个索引对应一种查询方式。
对数据条目的查询方式一般包括排序查询方式(order by)和分组查询方式(group by),以及二者的组合。order by和group by的数量是有限的,而且大部分的orderby和group by是一起使用的,因此,索引列表构造单元210可以先根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表,然后,根据排序列表和分组列表进行笛卡尔乘积,来构造所述索引列表。当然,对数据条目的查询方式也可以是现有技术中的其他查询方式,甚至是将来有可能出现的其他查询方式,本发明实施例对此不做限制。
在将第一数据存储器100中的数据条目及索引存储到第二数据存储器300之前,版本号管理单元250可以根据当前时间戳生成数据版本号。
之后,索引存储单元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数据库,每个数据条目是以数据条目的唯一标识作为键,以相关联的数据内容作为值进行存储。
当所述索引名称包括数据版本号、排序查询方式标识和分组查询方式标识时,则在第二数据存储器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中。如此,就将第二数据存储器中存储的索引与该索引对应的数据条目集合关联起来了。
在对第二数据存储器300的数据写入完成后,版本号管理单元250还将当前活动的数据版本号更新为所生成的数据版本号。
通过数据版本号管理,能够基于时间定时更新数据,从而向应用服务器400提供较新的数据。并且,当更新数据失败时,还能够将当前活动的数据内容恢复到以前的版本。
根据本发明实施例的数据存储系统200,通过采用离线计算代替同步计算,有效的提高了数据的查询效率。例如,可以在所述第二数据存储器300中配置查询接口,应用服务器400不需要访问第一数据存储器100进行实时计算,而是直接从查询接口来获取与查询请求对应的数据条目,如此,避免了对第一数据存储器100中数据条目的复杂的查询运算,提高了查询速度。
如前所述,在一种实现方式中,第二数据存储器中300存储的索引名称包括数据版本号、排序查询方式标识和分组查询方式标识;在另一种实现方式中,所述索引名称包括数据键值类型、数据版本号、排序查询方式标识和分组查询方式标识。
对应于上述的两种实现方式,所述查询接口获取查询数据的方式也有两种。在一种实现方式中,查询接口获取数据的过程为:
获取来自应用服务器400的查询请求,所述查询请求包括查询方式和键值;
获取当前活动的数据版本号,根据当前活动的数据版本号和查询方式确定索引名称,从第二数据存储器300中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器300中获取相关联的数据内容;
对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器400。
其中,去序列化是序列化的逆过程,其具体实现过程本领域技术人员容易根据前述的序列化过程确定。
在另一种实现方式中,查询接口获取数据的过程为:
获取来自应用服务器400的查询请求,所述查询请求包括查询方式和键值;
获取当前活动的数据版本号,根据当前活动的数据版本号、查询方式和键值确定索引名称,从第二数据存储器300中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器300中获取相关联的数据内容;
对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器400。
两种实现方式的一个差别在于:在第一种实现方式中,去序列化后的内容是整个数据条目的内容,还需要从中获取与键值对应的内容后再返回给应用服务器;在第二种实现方式中,去序列化后的内容是数据条目中与键值对应的内容,可以直接返回给应用服务器。
可选地,所述数据存储系统中还包括老化单元(图未示),适于在数据的老化时间到达时,从第二数据存储器中删除相应版本的索引和数据条目。可以为每个版本设置一个老化时间(过期时间),例如,设置该老化时间为6天,并在当前版本生效后的预定时间(比如每40分钟一次)开始生成下一版本数据。
图3示出了根据本发明一个实施例的数据存储方法的流程示意图,该数据存储方法适于将来自第一数据存储器的数据条目存储到第二数据存储器中,其中第一数据存储器可以是关系型数据库,例如Oracle、DB2、Microsoft SQL Server和MySQL等,第二数据存储器可以是键-值方式的no sql数据库,例如redis数据库。
参照图3,所述数据存储器方法可以包括:
步骤S310,根据对第一数据存储器中的数据条目的查询方式构造索引列表,索引列表中的每个索引对应一种查询方式;
对数据条目的查询方式一般包括排序查询方式(order by)和分组查询方式(group by),以及二者的组合。order by和group by的数量是有限的,而且大部分的orderby和group by是一起使用的,因此,可以先根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表;然后,根据排序列表和分组列表进行笛卡尔乘积,构造所述索引列表。当然,对数据条目的查询方式也可以是现有技术中的其他查询方式,甚至是将来有可能出现的其他查询方式,本发明实施例对此不做限制。
步骤S320,根据当前时间戳生成数据版本号;
步骤S330,在第二数据存储器中存储该索引列表中的每个索引;
在第二数据存储器中,每个索引包括标识该索引的索引名称以及与该索引相关联的数据条目标识列表,所述索引名称包括所生成的数据版本号。在本步骤中,可以先将索引名称作为键(key)存储到第二存储器中,对应的值(vlaue)暂时为空。在后续的步骤中确定了索引名称对应的数据条目标识列表后,再将该数据条目标识列表作为值与对应的索引名称相关联的存储到第二存储器中。例如,对于redis数据库,对应的值的类型可以采用有序集(sorted set),即所存储的数据条目标识列表中的数据条目标识是有序的,其顺序由索引对应的查询方式所确定。
在一种实现方式中,所述索引名称包括数据版本号、排序查询方式标识(orderID)和分组查询方式标识(groupID)。在另一种实现方式中,所述索引名称包括数据键值类型、数据版本号、排序查询方式标识和分组查询方式标识。其中,所述数据键值类型用于标识键值信息,所述键值为数据条目的一个或多个字段名称。在具体实现时,所述数据键值类型可以直接采用所述键值,也可以是对键值进行编码后的值,且本发明实施例对具体的编码方式不做限制。
步骤S340,从第一数据存储器中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中;
在第二数据存储器中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容,且所述数据条目的唯一标识包括所生成的数据版本号。例如对于redis数据库,每个数据条目是以数据条目的唯一标识作为键,以相关联的数据内容作为值进行存储。
当所述索引名称包括数据版本号、排序查询方式标识和分组查询方式标识时,则在第二数据存储器中,每个数据条目的唯一标识为数据版本号和该数据条目在第一数据存储器中的唯一标识,相关联的数据内容为将数据条目的各个字段进行序列化后得到的内容。例如,当第一数据存储器为关系型数据库时,该唯一标识可以为数据条目的主键。
当所述索引名称包括数据键值类型、数据版本号、排序查询方式标识和分组查询方式标识时,则在第二数据存储器中,每个数据条目的唯一标识为数据版本号和该数据条目在第一数据存储器中的唯一标识,相关联的数据内容为将数据条目的与数据键值类型对应的各个字段进行序列化后得到的内容。例如,当第一数据存储器为关系型数据库时,该唯一标识可以为数据条目的主键。
步骤S350,根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表;
每个索引对应一种查询方式,对于每种查询方式,可以构造相应的查询语句来从第一数据存储器中获取相对应的数据条目。例如,当所述第一数据存储器为关系型数据库时,可以根据查询方式构造SQL语句,根据构造的SQL语句对所述第一数据存储器进行操作,从而获得与该查询方式对应的数据条目。
获取到与该索引相关联的一个或多个数据条目后,再进一步确定每个数据条目的唯一标识,例如为数据版本号和数据条目的主键,从而得到与该索引相关联的数据条目标识列表。
步骤S360,将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中,如此,就将第二数据存储器中存储的索引与该索引对应的数据条目集合关联起来了;
步骤S370,在对第二数据存储器的数据写入完成后,将所生成的数据版本号存储为当前活动的数据版本号。
根据本发明实施例的数据存储方法,通过采用离线计算代替同步计算,有效的提高了数据的查询效率。例如,可以在所述第二数据存储器中配置查询接口,应用服务器不需要访问第一数据存储器进行实时计算,而是直接从查询接口来获取与查询请求对应的数据条目,如此,避免了对第一数据存储器中数据条目的复杂的查询运算,提高了查询速度。
也就是说,本发明实施例的数据存储方法还可以包括如下步骤:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值,其中所述键值为数据条目的一个或多个字段名称;
获取当前活动的数据版本号,根据当前活动的数据版本号和查询方式确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器。
或者,本发明实施例的数据存储方法还可以包括如下步骤:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值;
获取当前活动的数据版本号,根据当前活动的数据版本号、查询方式和键值确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器。
可选地,所述数据存储方法还包括:在数据的老化时间到达时,从第二数据存储器中删除相应版本的索引和数据条目。可以为每个版本设置一个老化时间(过期时间),例如,设置该老化时间为6天,并在当前版本生效后的预定时间(比如每40分钟一次)开始生成下一版本数据。
通过数据版本号管理,能够基于时间定时更新数据,从而向应用服务器提供较新的数据。并且,当更新数据失败时,还能够将当前活动的数据内容恢复到以前的版本。
以下给出本发明的一个应用实例。
在该应用实例中,汽车经销商降价排行榜数据存储在传统的关系型数据库中,在该关系型数据库中存储的汽车数据条目包括如下字段名称:
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奥迪S5337982664710奥迪S5现车充足最高优惠9.46万元2013-12-3100:00:00.0002014-01-0500:00:00.0002013-12-3110:35:33.7236334007280001319512013-12-3110:55:002013-12-3110:55:00110000110100110105126713904070000641
数据条目2:1107712013款S64.0TFSI~/upload/2013/4/19/l_201304191833167634435.jpg2736奥迪S6337982665410奥迪S6现车充足最高优惠6.93万元2013-12-3100:00:00.0002014-01-0500:00:00.0002013-12-3110:37:12.510988700105800079712013-12-3110:55:002013-12-3110:55:001100001101001101051267142950100000991
数据条目3:1122032012款30FSI技术型~/upload/spec/12203/l_201207041848360214178.jpg18奥迪A6L33982664130奥迪A6L现车充足最高优惠11.13万元2013-12-3100:00:00.0002014-01-0500:00:00.0002013-12-3110:34:25.46738090043280012170052013-12-2418:55:002013-12-3110:55:00110000110100110105126713595050000391
对上述降价排行榜数据进行发布的过程如下:
(1)根据对该降价排行榜数据中数据条目的查询方式,构造排序列表(Order by)如下:
new string[]{"PriceOffPercent desc,LessPrice desc,DTime desc",
"OrdersLastMonth desc,Price desc,DTime desc",
"DTime desc,Price asc",
"Price desc,DTime desc",
"Price asc,DTime desc",
"OrdersLastQuarter desc,DTime desc",
"OrdersLastMonth desc,PriceOffPercent desc,LessPrice desc,DTimedesc",
"PriceOffPercent desc,OrdersLastMonth desc,Price asc,DTime desc"}
可以看出,在所构造的排序列表中,包括有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为:
"Dealer_I(635243523064539979)Promotion(PriceOffPercent desc,LessPricedesc,DTime desc|SpecId,PID)"
其中,635243523064539979为时间戳,即数据版本号。
对应排序查询条件:
"PriceOffPercent desc,LessPrice desc,DTime desc"
对应分组查询条件:
"SpecId,PID"
(3)在redis数据库中以key-value方式存储数据条目的key值和value值,示例如下:
Key:"Dealer_D(635243523064539979)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\",\"StartDat e\":\"\\/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,\"InventoryStat e\":1,\"PriceW\":10,\"PriceScope\":10,\"EquipCarId\":0,\"PackagePrice\":0,\"IsRecommend\":0,\"IsLastWeek\":1}"
其中,635243523064539979为时间戳,即数据版本号,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,性能获得大幅度的提升。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的数据存储系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
A1、一种数据存储方法,适于将来自第一数据存储器的数据条目存储到第二数据存储器中,该方法包括:
根据对第一数据存储器中的数据条目的查询方式构造索引列表,索引列表中的每个索引对应一种查询方式;
根据当前时间戳生成数据版本号;
在第二数据存储器中存储该索引列表中的每个索引,其中每个索引包括标识该索引的索引名称,所述索引名称包括所生成的数据版本号;
从第一数据存储器中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中,其中在第二数据存储器中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容,所述数据条目的唯一标识包括所生成的数据版本号;
根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表;
将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中;以及
在对第二数据存储器的数据写入完成后,将当前活动的数据版本号更新为所生成的数据版本号。
A2、如A1所述的数据存储方法,其中,所述根据对第一数据存储器中的数据条目的查询方式构造索引列表,包括:
根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表;
根据排序列表和分组列表进行笛卡尔乘积,构造所述索引列表。
A3、如A2所述的数据存储方法,其中,所述索引名称还包括排序查询方式标识和分组查询方式标识;
在所述第二数据存储器中,每个数据条目的唯一标识为该数据条目在第一数据存储器中的唯一标识和所生成的数据版本号,以及数据内容为将数据条目的各个字段进行序列化后得到的内容。
A4、如A3所述的数据存储方法,其中,所述索引名称还包括数据键值类型;
在所述第二数据存储器中,每个数据条目的唯一标识还包括数据键值类型,以及数据内容为将数据条目的与数据键值类型对应的各个字段进行序列化后得到的内容;
其中,所述数据键值类型用于标识键值信息,所述键值为数据条目的一个或多个字段名称。
A5、如A3所述的数据存储方法,其中,还包括:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值,其中所述键值为数据条目的一个或多个字段名称;
获取当前活动的数据版本号,根据当前活动的数据版本号和查询方式确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器。
A6、如A4所述的数据存储方法,其中,还包括:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值;
获取当前活动的数据版本号,根据当前活动的数据版本号、查询方式和键值确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器。
A7、如A1所述的数据存储方法,其中,第一数据存储器中的数据条目以关系型数据库方式进行存储;以及
第二数据存储器中的索引以索引名称为键、以相关联的数据条目标识列表为值的键-值方式进行存储,以及数据条目以数据条目的唯一标识为键、以相关联的数据内容为值的键-值方式进行存储。
A8、如A1所述的数据存储方法,其中,还包括:在数据的老化时间到达时,从第二数据存储器中删除相应版本的索引和数据条目。
B1、一种数据存储系统,适于将来自第一数据存储器的数据条目存储到第二数据存储器中,该系统包括:
索引列表构造单元,适于根据对第一数据存储器中的数据条目的查询方式构造索引列表,索引列表中的每个索引对应一种查询方式;
版本号管理单元,适于根据当前时间戳生成数据版本号,并在对第二数据存储器的数据写入完成后,将当前活动的数据版本号更新为所生成的数据版本号;
索引存储单元,适于在第二数据存储器中存储该索引列表中的每个索引,其中每个索引包括标识该索引的索引名称,所述索引名称包括所生成的数据版本号;
数据条目存储单元,适于从第一数据存储器中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中,其中在第二数据存储器中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容,所述数据条目的唯一标识包括所生成的数据版本号;以及
关联单元,适于根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表;
其中,所述索引存储单元被配置成将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中。
B2、如B1所述的数据存储系统,其中,所述索引列表构造单元被配置成:
根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表;
根据排序列表和分组列表进行笛卡尔乘积,构造所述索引列表。
B3、如权利要求B2所述的数据存储系统,其中,所述索引名称还包括排序查询方式标识和分组查询方式标识;
在所述第二数据存储器中,每个数据条目的唯一标识为该数据条目在第一数据存储器中的唯一标识和所生成的数据版本号,以及数据内容为将数据条目的各个字段进行序列化后得到的内容。
B4、如权利要求B3所述的数据存储系统,其中,所述索引名称还包括数据键值类型;
在所述第二数据存储器中,每个数据条目的唯一标识还包括数据键值类型,以及数据内容为将数据条目的与数据键值类型对应的各个字段进行序列化后得到的内容;
其中,所述数据键值类型用于标识键值信息,所述键值为数据条目的一个或多个字段名称。
B5、如权利要求B3所述的数据存储系统,其中,所述第二数据存储器还包括查询接口,所述查询接口被配置成:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值,其中所述键值为数据条目的一个或多个字段名称;
获取当前活动的数据版本号,根据当前活动的数据版本号和查询方式确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器。
B6、如B4所述的数据存储系统,其中,所述第二数据存储器还包括查询接口,所述查询接口被配置成:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值;
获取当前活动的数据版本号,根据当前活动的数据版本号、查询方式和键值确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器。
B7、如权利要求B1所述的数据存储系统,其中,第一数据存储器中的数据条目以关系型数据库方式进行存储;以及
第二数据存储器中的索引以索引名称为键、以相关联的数据条目标识列表为值的键-值方式进行存储,以及数据条目以数据条目的唯一标识为键、以相关联的数据内容为值的键-值方式进行存储。
B8、如权利要求B1所述的数据存储系统,其中,还包括老化单元,适于在数据的老化时间到达时,从第二数据存储器中删除相应版本的索引和数据条目。
C1、一种数据查询系统,包括第一数据存储器、数据发布服务器和第二数据存储器,其中,所述数据发布服务器包括如权利要求B1至B8中任一项所述的数据存储系统。

Claims (13)

1.一种数据存储方法,适于将来自第一数据存储器的数据条目存储到第二数据存储器中,所述第一数据存储器是关系型数据库,所述第二数据存储器是键-值式的no sql数据库,其包括查询接口,所述查询接口适于接收应用服务器发来的查询请求,获取与查询请求相对应的数据条目并返回给应用服务器,该方法包括:
根据对第一数据存储器中的数据条目的查询方式构造索引列表:根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表;根据排序列表和分组列表进行笛卡尔乘积,构造所述索引列表,索引列表中的每个索引对应一种查询方式;
根据当前时间戳生成数据版本号;
在第二数据存储器中存储该索引列表中的每个索引,其中每个索引包括标识该索引的索引名称,所述索引名称包括所生成的数据版本号,第二数据存储器中的索引以索引名称为键、以相关联的数据条目标识列表为值的键-值方式进行存储;
从第一数据存储器中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中,其中在第二数据存储器中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容,所述数据条目的唯一标识包括所生成的数据版本号,数据条目以数据条目的唯一标识为键、以相关联的数据内容为值的键-值方式进行存储;
根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表;
将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中;以及
在对第二数据存储器的数据写入完成后,将当前活动的数据版本号更新为所生成的数据版本号。
2.如权利要求1所述的数据存储方法,其中,所述索引名称还包括排序查询方式标识和分组查询方式标识;
在所述第二数据存储器中,每个数据条目的唯一标识为该数据条目在第一数据存储器中的唯一标识和所生成的数据版本号,以及数据内容为将数据条目的各个字段进行序列化后得到的内容。
3.如权利要求2所述的数据存储方法,其中,所述索引名称还包括数据键值类型;
在所述第二数据存储器中,每个数据条目的唯一标识还包括数据键值类型,以及数据内容为将数据条目的与数据键值类型对应的各个字段进行序列化后得到的内容;
其中,所述数据键值类型用于标识键值信息,所述键值为数据条目的一个或多个字段名称。
4.如权利要求2所述的数据存储方法,其中,还包括:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值,其中所述键值为数据条目的一个或多个字段名称;
获取当前活动的数据版本号,根据当前活动的数据版本号和查询方式确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器。
5.如权利要求3所述的数据存储方法,其中,还包括:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值;
获取当前活动的数据版本号,根据当前活动的数据版本号、查询方式和键值确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器。
6.如权利要求1所述的数据存储方法,其中,还包括:在数据的老化时间到达时,从第二数据存储器中删除相应版本的索引和数据条目。
7.一种数据存储系统,适于将来自第一数据存储器的数据条目存储到第二数据存储器中,所述第一数据存储器是关系型数据库,所述第二数据存储器是键-值式的no sql数据库,其包括查询接口,所述查询接口适于接收应用服务器发来的查询请求,获取与查询请求相对应的数据条目并返回给应用服务器,该系统包括:
索引列表构造单元,适于根据对第一数据存储器中的数据条目的查询方式构造索引列表:根据对数据条目的排序查询方式建立排序列表,并根据对数据条目的分组查询方式建立分组列表;根据排序列表和分组列表进行笛卡尔乘积,构造所述索引列表,索引列表中的每个索引对应一种查询方式;
版本号管理单元,适于根据当前时间戳生成数据版本号,并在对第二数据存储器的数据写入完成后,将当前活动的数据版本号更新为所生成的数据版本号;
索引存储单元,适于在第二数据存储器中存储该索引列表中的每个索引,其中每个索引包括标识该索引的索引名称,所述索引名称包括所生成的数据版本号,第二数据存储器中的索引以索引名称为键、以相关联的数据条目标识列表为值的键-值方式进行存储;
数据条目存储单元,适于从第一数据存储器中获取各个数据条目,将所获取的数据条目存储到第二数据存储器中,其中在第二数据存储器中,每个数据条目包括数据条目的唯一标识以及相关联的数据内容,所述数据条目的唯一标识包括所生成的数据版本号,数据条目以数据条目的唯一标识为键、以相关联的数据内容为值的键-值方式进行存储;以及
关联单元,适于根据与每个索引相对应的查询方式确定相关联的一个或者多个数据条目,并确定各数据条目在第二数据存储器中的唯一标识,获取与该索引相关联的数据条目标识列表;
其中,所述索引存储单元被配置成将与每个索引相关联的数据条目标识列表与每个索引的索引名称相关联地存储到第二数据存储器中。
8.如权利要求7所述的数据存储系统,其中,所述索引名称还包括排序查询方式标识和分组查询方式标识;
在所述第二数据存储器中,每个数据条目的唯一标识为该数据条目在第一数据存储器中的唯一标识和所生成的数据版本号,以及数据内容为将数据条目的各个字段进行序列化后得到的内容。
9.如权利要求8所述的数据存储系统,其中,所述索引名称还包括数据键值类型;
在所述第二数据存储器中,每个数据条目的唯一标识还包括数据键值类型,以及数据内容为将数据条目的与数据键值类型对应的各个字段进行序列化后得到的内容;
其中,所述数据键值类型用于标识键值信息,所述键值为数据条目的一个或多个字段名称。
10.如权利要求8所述的数据存储系统,其中,所述查询接口被配置成:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值,其中所述键值为数据条目的一个或多个字段名称;
获取当前活动的数据版本号,根据当前活动的数据版本号和查询方式确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,并从去序列化后的内容中获取与键值对应的内容返回给应用服务器。
11.如权利要求9所述的数据存储系统,其中,所述查询接口被配置成:
获取来自应用服务器的查询请求,所述查询请求包括查询方式和键值;
获取当前活动的数据版本号,根据当前活动的数据版本号、查询方式和键值确定索引名称,从第二数据存储器中查找与索引名称相关联的数据条目标识列表,并根据查找到的数据条目标识列表从第二数据存储器中获取相关联的数据内容;
对获取到的数据内容进行去序列化,将去序列化后的内容返回给应用服务器。
12.如权利要求7所述的数据存储系统,其中,还包括老化单元,适于在数据的老化时间到达时,从第二数据存储器中删除相应版本的索引和数据条目。
13.一种数据查询系统,包括第一数据存储器、数据发布服务器和第二数据存储器,其中,所述数据发布服务器包括如权利要求7-12中任一项所述的数据存储系统。
CN201410125753.5A 2014-03-31 2014-03-31 一种数据存储系统和存储方法 Active CN103902698B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410125753.5A CN103902698B (zh) 2014-03-31 2014-03-31 一种数据存储系统和存储方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410125753.5A CN103902698B (zh) 2014-03-31 2014-03-31 一种数据存储系统和存储方法

Publications (2)

Publication Number Publication Date
CN103902698A CN103902698A (zh) 2014-07-02
CN103902698B true CN103902698B (zh) 2018-04-13

Family

ID=50994020

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410125753.5A Active CN103902698B (zh) 2014-03-31 2014-03-31 一种数据存储系统和存储方法

Country Status (1)

Country Link
CN (1) CN103902698B (zh)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9927984B2 (en) * 2015-10-14 2018-03-27 Samsung Electronics Co., Ltd. Electronic system with interface control mechanism and method of operation thereof
CN106648569B (zh) * 2015-11-02 2021-04-20 腾讯科技(深圳)有限公司 目标序列化实现方法和装置
CN105956140B (zh) * 2016-05-12 2019-03-22 无锡威泰迅电力科技有限公司 基于混合模式移动应用的本地存储数据的方法
CN106657249B (zh) * 2016-10-25 2019-07-09 杭州迪普科技股份有限公司 更新缓存资源的方法及装置
CN106302829A (zh) * 2016-10-26 2017-01-04 腾讯音乐娱乐(深圳)有限公司 一种信息访问方法、装置及服务器
CN106599104B (zh) * 2016-11-29 2022-01-11 北京锐安科技有限公司 一种基于redis集群的海量数据关联方法
CN108628885B (zh) * 2017-03-20 2023-04-18 腾讯科技(深圳)有限公司 一种数据同步方法、装置及存储设备
CN107239568B (zh) * 2017-06-27 2020-04-14 石化盈科信息技术有限责任公司 分布式索引实现方法及装置
CN107656970A (zh) * 2017-08-31 2018-02-02 郑州云海信息技术有限公司 一种数据同步方法、装置及服务器
CN108769172A (zh) * 2018-05-21 2018-11-06 杭州有赞科技有限公司 一种数据同步方法及系统
CN109213758B (zh) * 2018-07-24 2021-03-30 中国联合网络通信集团有限公司 数据存取方法、装置、设备及计算机可读存储介质
CN109145004A (zh) * 2018-08-29 2019-01-04 智慧互通科技有限公司 一种创建数据库索引的方法及装置
CN109582666A (zh) * 2018-09-29 2019-04-05 阿里巴巴集团控股有限公司 数据主键生成方法、装置、电子设备及存储介质
CN109471906A (zh) * 2018-11-28 2019-03-15 立旃(上海)科技有限公司 基于区块链的说明书存入取出方法及装置
CN109684307B (zh) * 2018-12-26 2021-06-22 百度在线网络技术(北京)有限公司 一种数据存储方法、装置、设备及存储介质
CN109783508B (zh) * 2018-12-29 2021-04-09 亚信科技(南京)有限公司 数据查询方法、装置、计算机设备和存储介质
CN109815240B (zh) 2019-01-29 2022-02-25 北京百度网讯科技有限公司 用于管理索引的方法、装置、设备和存储介质
CN109902130A (zh) * 2019-01-31 2019-06-18 北京明略软件系统有限公司 一种数据存储方法、数据查询方法和装置、存储介质
CN110069452B (zh) * 2019-04-26 2020-04-03 北京字节跳动网络技术有限公司 数据存储方法、装置和计算机可读存储介质
CN110196851B (zh) * 2019-05-09 2024-05-10 腾讯科技(深圳)有限公司 一种数据存储方法、装置、设备及存储介质
CN110175176A (zh) * 2019-05-31 2019-08-27 杭州复杂美科技有限公司 一种kv数据库配置方法、查询方法、设备和存储介质
CN110609839B (zh) 2019-09-17 2021-05-25 北京海益同展信息科技有限公司 区块链数据处理的方法、装置、设备及可读存储介质
CN111309270B (zh) * 2020-03-13 2021-04-27 清华大学 一种持久性内存键值存储系统
WO2021226775A1 (en) * 2020-05-11 2021-11-18 Wenfei Fan Speeding up sql query over nosql architecture using keyed blocks

Citations (4)

* 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索引的方法和系统
CN103631907A (zh) * 2013-11-26 2014-03-12 中国科学院信息工程研究所 一种将关系型数据迁移至HBase的方法及系统

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5727197A (en) * 1995-11-01 1998-03-10 Filetek, Inc. Method and apparatus for segmenting a database
CN100485689C (zh) * 2007-01-30 2009-05-06 浪潮通信信息系统有限公司 基于文件系统缓存的数据加速查询方法
US9952893B2 (en) * 2010-11-03 2018-04-24 Microsoft Technology Licensing, Llc Spreadsheet model for distributed computations
CN102222099A (zh) * 2011-06-21 2011-10-19 中兴通讯股份有限公司 一种数据存储、查找方法及装置

Patent Citations (4)

* 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分布式存储系统缓存的方法
CN103631907A (zh) * 2013-11-26 2014-03-12 中国科学院信息工程研究所 一种将关系型数据迁移至HBase的方法及系统

Also Published As

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

Similar Documents

Publication Publication Date Title
CN103902698B (zh) 一种数据存储系统和存储方法
CN103902702B (zh) 一种数据存储系统和存储方法
CN103902701B (zh) 一种数据存储系统和存储方法
US20210357479A1 (en) Methods and apparatus for sorting data
US9558251B2 (en) Transformation functions for compression and decompression of data in computing environments and systems
CA2887931C (en) Profiling data with location information
US9547664B2 (en) Selecting candidate rows for deduplication
CN103810224B (zh) 信息持久化和查询方法及装置
CN109416694A (zh) 包括资源有效索引的键值存储系统
AU2015347304B2 (en) Testing insecure computing environments using random data sets generated from characterizations of real data sets
CN106202548A (zh) 数据存储方法、查找方法及装置
US9442949B2 (en) System and method for compressing data in a database
CN109062936B (zh) 一种数据查询方法、计算机可读存储介质及终端设备
JP7105982B2 (ja) 構造化レコード取得
US10496648B2 (en) Systems and methods for searching multiple related tables
EP2556446A1 (en) Columnar storage representations of records
CN104504008B (zh) 一种基于嵌套的SQL到HBase的数据迁移算法
US9953058B1 (en) Systems and methods for searching large data sets
CN104794130B (zh) 一种表间关联查询方法和装置
CN109815240A (zh) 用于管理索引的方法、装置、设备和存储介质
CN106503186A (zh) 一种数据管理方法、客户端及系统
CN108334563A (zh) 一种数据查询的方法及装置
CN111290714A (zh) 数据读取方法和装置
CN114579617A (zh) 数据查询方法、装置、计算机设备和存储介质
CN110309367B (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