CN110019292B - 一种数据的查询方法及装置 - Google Patents

一种数据的查询方法及装置 Download PDF

Info

Publication number
CN110019292B
CN110019292B CN201710796412.4A CN201710796412A CN110019292B CN 110019292 B CN110019292 B CN 110019292B CN 201710796412 A CN201710796412 A CN 201710796412A CN 110019292 B CN110019292 B CN 110019292B
Authority
CN
China
Prior art keywords
index
field
cache
identifier
primary key
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
CN201710796412.4A
Other languages
English (en)
Other versions
CN110019292A (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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201710796412.4A priority Critical patent/CN110019292B/zh
Publication of CN110019292A publication Critical patent/CN110019292A/zh
Application granted granted Critical
Publication of CN110019292B publication Critical patent/CN110019292B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • G06F16/244Grouping and aggregation
    • 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
    • G06F16/2455Query execution
    • G06F16/24552Database cache management

Abstract

本申请实施例公开了一种数据的查询方法及装置,涉及计算机技术领域,解决了由于在Redis缓存系统中增加复杂条件的索引键以及与该索引键对应的对象记录导致数据量倍增的问题。具体方案为:数据的查询装置获取查询请求,并根据该查询请求中的对象标识符、字段标识符,以及预存的第一对应关系,获取M个索引字段中每个索引字段的索引类型,且在M个索引字段中存在索引字段的索引类型为非唯一索引的情况下,数据的查询装置根据每个索引字段的索引键和缓存中存储的索引,获取与每个索引键对应的主键值集合,并根据与每个索引键对应的主键值集合和缓存中存储的主键值以及与主键值对应的对象记录,获取目标记录集合。本申请实施例用于查询数据的过程中。

Description

一种数据的查询方法及装置
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种数据的查询方法及装置。
背景技术
在客户关系管理(customer relationship management,CRM)系统频繁访问数据库(oracle)的情况下,会由于数据库中存储的数据量较大、需要经常访问硬盘文件使得查询性能下降。为了提升查询性能,考虑到缓存通过内存进行高速数据交换,因此可以将频繁访问的数据存储在缓存中,以便可以从缓存中快速查询到数据。
Redis是一种具有索引键(key)和索引值(value)结构,且支持基于索引键查询的缓存系统,例如,索引键为对象的主键,用于唯一标识一条对象记录,索引值为该主键对应的对象记录。这样,在Redis缓存系统中便可以基于主键查询到对象记录。但是,在实际的查询场景中,通常除了基于主键的查询外,还会存在基于复杂条件的查询,如基于非主键的查询、多条件的查询、非等值的查询等。此时,对于复杂条件的查询,便无法在Redis缓存系统中查询到对象记录,只能通过访问数据库来查询满足复杂条件的对象记录,这样会导致查询性能下降。
在现有技术中,可以在Redis缓存系统中增加基于复杂条件的索引键以及与该索引键对应的对象记录来支持复杂条件的查询,但是这样会由于复杂条件的组合较多导致数据量倍增。例如,假设有10个对象,在基于主键查询的情况下,缓存中仅需有10条记录,但是在基于两个字段查询的情况下,每个字段各有10个值,那么将这两个字段的字段值合并后作为索引键便会有100种组合,即Redis缓存系统中会有100条记录。
发明内容
本申请实施例提供一种数据的查询方法及装置,解决了由于在Redis缓存系统中增加复杂条件的索引键以及与该索引键对应的对象记录导致数据量倍增的问题。
为达到上述目的,本申请采用如下技术方案:
第一方面,本申请提供一种数据的查询方法,该方法包括:数据的查询装置获取包括有对象标识符、N个字段中每个字段的字段标识符和字段值的查询请求,并根据该查询请求中的对象标识符、N个字段中每个字段的字段标识符,以及预存的第一对应关系,获取N个字段包括的M个索引字段中每个索引字段的索引类型。且数据的查询装置在判断出M个索引字段中存在索引字段的索引类型为非唯一索引的情况下,根据每个索引字段的索引键和缓存中存储的索引,获取与每个索引键对应的主键值集合,并根据与每个索引键对应的主键值集合和缓存中存储的主键值以及与主键值对应的对象记录,获取目标记录集合。其中,N为大于0的整数,M为小于或等于N的正整数,第一对应关系中可以包括对象标识符、字段标识符以及索引类型,该对象标识符可以对应至少一个字段标识符,字段标识符与索引类型一一对应,索引类型包括唯一索引和非唯一索引。索引字段的索引键包括对象标识符、该索引字段的字段标识符和字段值,索引包括索引键以及与索引键对应的主键值集合。
本申请提供的数据的查询方法,在数据的查询装置获取到查询请求,并获取到N个字段包括的M个索引字段中每个索引字段的索引类型之后,可以在判断出M个索引字段中存在索引字段的索引类型为非唯一索引的情况下,根据每个索引字段的索引键和缓存中存储的索引,获取与每个索引键对应的主键值集合,并根据每个主键值集合和缓存中存储的主键值以及与主键值对应的对象记录,获取目标记录集合。这样,在基于复杂条件查询缓存中的对象记录,且复杂条件中包含非主键的场景中,本申请中通过先分别获取每个索引字段的主键值集合,再获取目标记录集合,来支持复杂条件的查询,仅需在缓存中增加每个索引字段与主键值集合的对应关系,由于每个索引字段与主键值集合的对应关系是确定的,即不会存在多种组合,因此解决了由于在Redis缓存系统中增加复杂条件的索引键以及与该索引键对应的对象记录导致数据量倍增的问题。
结合第一方面,在一种可能的实现方式中,索引可以包括唯一索引和非唯一索引。此时,数据的查询装置根据每个索引字段的索引键和缓存中存储的索引,获取与每个索引键对应的主键值集合,具体的可以包括:数据的查询装置在确定索引字段的索引类型为唯一索引时,根据该索引字段的索引键和唯一索引,获取与该索引键对应的主键值集合;数据的查询装置在确定索引字段的索引类型为非唯一索引时,根据该索引字段的索引键和非唯一索引,获取与该索引键对应的主键值集合。这样,通过根据索引字段的索引类型分别查询两类索引,提升了查询性能。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,第一对应关系还可以包括与字段标识符一一对应的字段类型,此时索引字段的索引键还可以包括该索引字段的字段类型,该字段类型用于指示索引字段的数据存储类型,可以包括字符串、数值、日期等类型。此时,数据的查询装置根据每个索引字段的索引键和缓存中存储的索引,获取与每个索引键对应的主键值集合,具体的可以包括:数据的查询装置根据每个索引字段的索引键中包括的字段类型,和缓存中存储的相应字段类型的索引,获取与该索引键对应的主键值集合。这样,通过根据索引字段的索引键中包括的字段类型在每类相同字段类型的索引中进行查询,不仅提升了查询性能,而且在字段值相同字段类型不同的情况下,能够降低出错的可能性。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,数据的查询装置获取的查询请求中还可以包括:每个索引字段的字段标识符和字段值之间的关系。此时,数据的查询装置根据每个索引字段的索引键和缓存中存储的索引,获取与每个索引键对应的主键值集合,具体的可以包括:数据的查询装置在确定索引字段的字段标识符等于字段值时,根据该索引字段的索引键和缓存中存储的索引,获取与该索引键对应的主键值集合;数据的查询装置在确定索引字段的字段标识符不等于字段值时,根据该索引字段的索引键和缓存中存储的索引,获取该索引键的、且满足该索引字段的字段值要求的主键值集合。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,为了确定是否可以在缓存中进行数据的查询,在数据的查询装置获取N个字段包括的M个索引字段中每个索引字段的索引类型之前,还可以包括:数据的查询装置先根据对象标识符和模型层次结构,获取根对象标识符,然后再根据对象标识符、该查询请求中每个索引字段的字段标识符和字段值,以及数据库存储的索引,获取主键值,并根据根对象标识符、对象标识符和获取的该主键值,以及数据库存储的第二对应关系,获取根对象主键值,最后数据的查询装置可以确定缓存中包含获取到的根对象标识符和根对象主键值。其中,模型层次结构包括对象标识符以及与对象标识符关联的根对象标识符,第二对应关系可以包括根对象标识符、对象标识符,与对象标识符对应的主键值以及与根对象标识符对应的根对象主键值,缓存中还预先存储有根对象标识符和根对象主键值。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,查询请求中还可以包括由N个字段组成的序列中每两个相邻的字段之间的逻辑运算符。此时,数据的查询装置根据与每个索引键对应的主键值集合和缓存中存储的主键值以及与主键值对应的对象记录,获取目标记录集合,具体的可以包括:数据的查询装置确定未处理的查询请求中包括的逻辑运算符,并获取逻辑运算符中优先级最高的逻辑运算符,若该优先级最高的逻辑运算符在由N个字段组成的序列中的相邻字段均为索引字段,则数据的查询装置对索引字段的主键值集合进行该优先级最高的逻辑运算符指示的运算;若该优先级最高的逻辑运算符在由N个字段组成的序列中的相邻字段为索引字段和非索引字段,则数据的查询装置获取与该索引字段对应的对象记录集合,并从该对象记录集合中筛选满足该非索引字段的字段值要求的对象记录。重复执行以上步骤,直到进行由N个字段组成的序列中的最后一个逻辑运算符指示的运算,得到目标记录集合。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,如果该优先级最高的逻辑运算符为and,那么数据的查询装置对索引字段的主键值集合进行该优先级最高的逻辑运算符指示的运算,具体的可以包括:数据的查询装置将每个主键值集合中均包括的主键值确定为目标主键值。如果该优先级最高的逻辑运算符为or,那么数据的查询装置对索引字段的主键值集合进行该优先级最高的逻辑运算符指示的运算,具体的可以包括:数据的查询装置将两个主键值集合的每个主键值集合中包括的所有主键值确定为目标主键值。
第二方面,本申请提供一种数据的存储方法,该方法包括:数据的查询装置获取用于请求存储对象记录的业务请求,并根据该业务请求,获取至少两个对象标识符和与至少两个对象标识符中的每个对象标识符对应的对象主键值,这样数据的查询装置可以根据至少两个对象标识符和模型层次结构,从至少两个对象标识符中确定根对象标识符以及与根对象标识符关联的所有对象标识符,并根据与根对象标识符关联的所有对象标识符中的任意一个对象标识符,以及与该对象标识符对应的对象主键值,获取至少一条对象记录,且数据的查询装置根据该对象标识符和第一对应关系,获取至少一个字段包括的索引字段中每个索引字段的字段类型和索引类型,并根据该至少一条对象记录的每条对象记录中的每个索引字段,获取至少一条索引并存储在缓存中。其中,对象记录包括至少一个字段中每个字段的字段标识符和字段值,该至少一个字段为该对象包括的所有字段,索引键包括对象标识符、一个索引字段的字段标识符、字段类型和字段值。
本申请提供的数据的存储方法,在数据的查询装置获取到业务请求,并从获取到的至少两个对象标识符中确定出根对象标识符以及与根对象标识符关联的所有对象标识符之后,可以根据所有对象标识符中的任意一个对象标识符获取至少一条对象记录,并根据该对象标识符和第一对应关系,获取对象记录的至少一个字段包括的索引字段中每个索引字段的索引类型,且数据的查询装置根据至少一条对象记录的每条对象记录中的每个索引字段,获取至少一条索引并存储在缓存中。这样,在基于复杂条件查询缓存中的对象记录,且复杂条件中包含非主键的场景中,由于缓存中存储有索引,即每个索引字段与主键值集合的对应关系,因此便可以通过先分别获取每个索引字段的主键值集合,再获取目标记录集合,来支持复杂条件的查询,这样由于每个索引字段与主键值集合的对应关系是确定的,即不会存在多种组合,因此解决了由于在Redis缓存系统中增加复杂条件的索引键以及与该索引键对应的对象记录导致数据量倍增的问题。
结合第二方面,在一种可能的实现方式中,数据的查询装置根据至少一条对象记录的每条对象记录中的每个索引字段,获取至少一条索引并存储在缓存中,具体的可以包括:数据的查询装置在确定索引字段的索引类型为唯一索引时,生成该索引字段的唯一索引并保存在缓存中;数据的查询装置在确定索引字段的索引类型为非唯一索引时,生成该索引字段的非唯一索引,并在确定缓存中未包含该索引字段的索引键时,在缓存中保存该索引字段的非唯一索引;数据的查询装置在确定索引字段的索引类型为非唯一索引时,生成该索引字段的非唯一索引,并在确定缓存中包含该索引字段的索引键时,将生成的该索引字段的非唯一索引中的主键值保存在缓存中与该索引字段的索引键对应的主键值集合中。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,数据的查询装置根据至少一条对象记录的每条对象记录中的每个索引字段,获取至少一条索引并存储在缓存中,具体的可以包括:数据的查询装置根据至少一条对象记录的每条对象记录中的主键值、每个索引字段的字段标识符和索引类型,以及数据库存储的唯一索引和非唯一索引,获取至少一条索引并存储在缓存中。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,还可以包括:数据的查询装置可以将唯一索引和非唯一索引分别保存在缓存中,并将唯一索引按照字符串、日期和数值三种字段类型分别保存在缓存中,以及将非唯一索引按照字符串、日期和数值三种字段类型分别保存在缓存中;且,对于字段类型是日期和数值的索引,唯一索引和非唯一索引是数据的查询装置根据排序规则排序后保存在缓存中的。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,在数据的查询装置获取至少一条索引并存储在缓存中之后,还可以包括:数据的查询装置在缓存中保存获取的根对象标识符和与根对象标识符对应的根对象主键值。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,还可以包括:数据的查询装置将至少一条对象记录的每条对象记录,以主键值和与该主键值对应的对象记录保存在缓存中。
第三方面,本申请提供一种数据的查询装置,该数据的查询装置可以包括能够实现上述第一方面及其各实施方式,以及第二方面及其各实施方式中的方法的模块。
第四方面,本申请提供一种计算机,该计算机包括:至少一个处理器、存储器、通信接口和通信总线。至少一个处理器与存储器、通信接口通过通信总线连接,存储器用于存储计算机执行指令,当数据的查询装置运行时,处理器执行存储器存储的计算机执行指令,以使数据的查询装置执行如第一方面或第一方面的可能的实现方式中任意一项的数据的查询方法,如第二方面或第二方面的可能的实现方式中任意一项的数据的存储方法。
第五方面,本申请提供一种计算机存储介质,其上存储有计算机软件指令,当计算机软件指令被处理器执行时,实现如第一方面或第一方面的可能的实现方式中任意一项的数据的查询方法,如第二方面或第二方面的可能的实现方式中任意一项的数据的存储方法。
第六方面,本申请还提供了一种计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面或第二方面所述的方法。
第七方面,本申请还提供了一种通信芯片,其中存储有计算机软件指令,当其在计算机上运行时,使得计算机执行上述第一方面或第二方面所述的方法。
可以理解地,上述提供的任一种装置或计算机存储介质或计算机程序产品均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考对应的方法中的有益效果,此处不再赘述。
附图说明
图1为本申请实施例提供的一种可以应用本申请实施例的系统架构的简化示意图;
图2为本申请实施例提供的一种缓存服务器的组成示意图;
图3为本申请实施例提供的一种数据的存储方法的流程图;
图4为本申请实施例提供的一种数据的查询方法的流程图;
图5为本申请实施例提供的一种数据的查询装置的组成示意图;
图6为本申请实施例提供的另一种数据的查询装置的组成示意图;
图7为本申请实施例提供的另一种数据的查询装置的组成示意图。
具体实施方式
为了便于本领域技术人员的理解,本申请实施例在此对本申请实施例中涉及到的术语进行说明。
(1)对象记录:指的是用户办理业务时在应用系统上创建的该业务的相关记录。例如,如表1所示为用户购买的商品实例(OfferInst)的记录,商品实例即为对象。
表1
Figure BDA0001400427170000051
(2)对象标识符:是与对象相关联的用于标识对象的唯一的值。例如,商品实例的标识符为OfferInst。
(3)字段标识符:字段是对象的属性,字段标识符用于唯一标识该对象的每个字段。由于一个对象可以包括多个字段,但是若将该对象的每个字段都配置为索引字段以用于生成索引,则会占用缓存中大量的存储空间,因此通常会根据用户的需求将多个字段中的某些字段配置为索引字段,剩余的则为非索引字段,且可以在数据的查询装置包括的元数据定义模块中预先存储该对象的元数据,即第一对应关系,该第一对应关系可以包括对象标识符,以及与该对象标识符对应的多个索引字段的字段标识符。例如,如表1所示,商品实例包括字段标识符为商品实例编号(OfferInstID)、订购者编号(SubscriberID)、商品编号(OfferID)、商品类型(OfferType)、组织(Org)和失效日期(ExpDate)的字段。且假设在元数据定义模块中预先存储的商品实例的第一对应关系如表2所示,表2的第一列为商品实例的对象标识符,表2的第二列为与该对象标识符对应的至少一个索引字段的字段标识符,因此,可以得到的是,商品实例中包括的索引字段是字段标识符为OfferInstID、SubscriberID和ExpDate的字段,非索引字段是字段标识符为OfferID、OfferType和Org的字段。
表2
对象标识符 字段标识符 字段类型 索引类型
OfferInst OfferInstID 字符串 唯一索引
OfferInst SubscriberID 字符串 非唯一索引
OfferInst ExpDate 日期 非唯一索引
(4)字段值:指的是对象的属性值,每个字段标识符可以对应一个字段值。例如,如表1所示,与OfferInstID对应的值11表示字段标识符为OfferInstID的字段的字段值为11。且如果与字段标识符对应的索引类型为唯一索引,则表明该字段的字段值为主键值。例如,如表2所示,与字段标识符OfferInstID对应的索引类型为唯一索引,表明字段标识符为OfferInstID的索引字段的字段值为主键值。
(5)字段类型:用于指示索引字段的数据存储类型,其可以包括字符串、数值、日期等类型,第一对应关系还可以包括与每个索引字段的字段标识符一一对应的字段类型。例如,如表2所示,表2的第三列为与字段标识符一一对应的字段类型,字段标识符为ExpDate的字段的字段值在缓存中以日期的形式存储,字段标识符为OfferInstID的字段的字段值在缓存中以字符串的形式存储。
(6)索引:用于快速访问特定数据的信息,可以包括索引键和索引值。例如,假设索引键为字段类型、对象标识符、字段标识符和字段值,索引键为主键值,如表3所示,该索引用于根据索引键获取主键值,假设索引键为主键值,索引值为对象记录,如表4所示,该索引用于根据主键值获取对象记录。
表3
Figure BDA0001400427170000061
表4
Figure BDA0001400427170000062
(7)索引类型:用于表示索引的类型,在本申请实施例中,第一对应关系中还可以包括索引类型,该索引类型与字段标识符一一对应,表示根据该索引字段生成的索引的类型。索引类型可以包括唯一索引和非唯一索引。其中,唯一索引中索引字段的字段值可以唯一标识一条对象记录,非唯一索引中索引字段的字段值不能唯一标识一条对象记录,即不同的对象记录中该索引字段的字段值会相同。例如,如表1所示,假设与字段标识符OfferInstID对应的索引类型为唯一索引,则每条对象记录中字段标识符为OfferInstID的字段的字段值均不相同,与字段标识符为SubscriberID对应的索引类型为非唯一索引,则会存在不同的对象记录中字段标识符为SubscriberID的字段的字段值相同,即表1中两条对象记录中该字段的字段值均为2。且每个对象中仅有一条唯一索引,可以有多条非唯一索引。
下面将结合附图对本申请实施例的实施方式进行详细描述。
图1为本申请实施例提供的一种可以应用本申请实施例的系统架构的简化示意图,如图1所示,该系统架构可以包括:应用服务器11、缓存服务器12和数据库服务器13。
其中,为了快速查询到需查询的数据,应用服务器11可以在接收到用户的输入操作之后生成查询请求,并向缓存服务器12发送该查询请求。这样,缓存服务器12可以在确定自身缓存中存储有该查询请求中的对象的所有对象记录时,根据该查询请求获取目标记录集合,并向应用服务器11返回目标记录集合。如果缓存服务器12确定自身缓存中存储的该对象的对象记录不全,那么缓存服务器12便会向应用服务器11发送无法查询的消息,此时,应用服务器11可以向数据库服务器13发送查询请求,以便数据库服务器13向应用服务器11返回目标记录集合。
应用服务器11,用于为用户提供应用的查询界面,并根据用户在查询界面的输入操作生成查询请求,还用于向缓存服务器12发送该查询请求,或者在接收到缓存服务器12的无法查询的消息后向数据库服务器13发送该查询请求。应用服务器11,还用于接收并显示用户需要查询的数据。
缓存服务器12可以根据接收到的查询请求进行数据的查询和数据的存储,并向应用服务器11返回查询到的数据。
数据库服务器13中包括数据库,用于存储和管理所有的数据,可以根据查询请求向应用服务器11返回需查询的数据。
需要说明的是,本申请实施例中提供的数据的查询装置可以为图1中的缓存服务器12,缓存服务器12仅为数据的查询装置的一种示例,且在本申请实施例中以数据的查询装置为缓存服务器12为例进行说明。下面结合图2对缓存服务器的各个构成部件进行具体的介绍:
图2为本申请实施例提供的一种缓存服务器的组成示意图。如图2所示,缓存服务器可以包括:至少一个处理器21、存储器22、通信接口23和通信总线24。
处理器21是缓存服务器的控制中心,可以是一个处理器,也可以是多个处理元件的统称。例如,处理器21是一个中央处理器(central processing unit,CPU),也可以是特定集成电路(application specific integrated circuit,ASIC),或者是被配置成实施本申请实施例的一个或多个集成电路,例如:一个或多个微处理器(digital signalprocessor,DSP),或,一个或者多个现场可编程门阵列(field programmable gate array,FPGA)。
在具体的实现中,作为一种实施例,处理器21可以包括一个或多个CPU,例如图2中所示的CPU0和CPU1。且,作为一种实施例,缓存服务器可以包括多个处理器,例如图2中所示的处理器21和处理器25。这些处理器中的每一个可以是一个单核处理器(single-CPU),也可以是一个多核处理器(multi-CPU)。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
在具体的实现中,处理器21可以通过运行或执行存储在存储器22内的软件程序,以及调用存储在存储器22内的数据,执行缓存服务器的各种功能。例如,处理器21可以运行存储器22中保存的计算机程序代码,以执行本申请提供的数据的查询方法,从缓存中查询待查询数据,或者执行本申请提供的数据的存储方法,将待存储数据保存至缓存中。
存储器22可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasable programmable read-only memory,EEPROM)、只读光盘(compact disc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器22可以是独立存在,通过通信总线24与处理器21相连接。存储器22也可以和处理器21集成在一起。
在具体的实现中,存储器22,可以用于存储本申请中的数据,例如,存储器22可以用于存储本申请实施例中的对象记录和索引。且本申请所述的缓存可以保存在存储器22中。存储器22,还可以用于存储执行本申请的软件程序。例如,存储器22可以用于存储本申请实施例提供的数据的查询方法或者数据的存储方法所对应的计算机程序代码,即该计算机程序代码可以为执行数据的查询方法或数据的存储方法的模块。具体的,存储器22中可以包括缓存操作模块221、元数据定义模块222、索引生成模块223和缓存模块224。
其中,缓存操作模块221,用于获取查询请求,还用于向元数据定义模块222发送查询请求中包括的对象标识符和每个字段的字段标识符,还用于在M个索引字段中存在索引字段的索引类型为非唯一索引的情况下,根据每个索引字段的索引键和缓存模块中存储的索引,获取与每个索引键对应的主键值集合,还用于根据与每个索引键对应的主键值集合和数据缓存模块2241中存储的主键值以及与主键值对应的对象记录,获取目标记录集合。缓存操作模块221,还用于根据对象标识符、查询请求中每个索引字段的字段标识符和字段值,从数据库服务器的数据库存储的索引中获取主键值,还用于根据根对象标识符、对象标识符和主键值,查询数据库存储的第二对应关系来获取根对象主键值。
且缓存操作模块221可以包括记录合并模块2211和记录过滤模块2212。其中,记录合并模块2211,用于在接收到缓存操作模块221的指示后,对与索引键对应的主键值集合进行逻辑操作。记录过滤模块2212,用于在接收到缓存操作模块221的指示后,从对象记录集合中筛选满足非索引字段的字段值要求的对象记录。
元数据定义模块222,用于根据存储的第一对应关系,以及缓存操作模块221发送的对象标识符和每个字段的字段标识符,获取N个字段包括的M个索引字段中每个索引字段的索引类型和字段类型,并向缓存操作模块221发送每个索引字段的索引类型和字段类型。元数据定义模块222,还用于根据存储的模型层次结构,和缓存操作模块221发送的对象标识符,获取根对象标识符。
索引生成模块223,用于根据每条对象记录中的每个索引字段,生成索引。
缓存模块224可以包括数据缓存模块2241、唯一索引缓存模块2242、非唯一索引缓存模块2243、缓存标记模块2244和缓存排序模块2245。其中,数据缓存模块2241,用于存储主键值以及与主键值对应的对象记录,唯一索引缓存模块2242,用于存储唯一索引,非唯一索引缓存模块2243,用于存储非唯一索引,缓存标记模块2244,用于存储根对象标识符和根对象主键值,来表明与该根对象关联的所有对象的对象记录已存储在缓存中。缓存排序模块2245,用于分别对唯一索引缓存模块2242中字段类型为日期和数值的索引进行排序,并分别对非唯一索引缓存模块2243中字段类型为日期和数值的索引进行排序。
通信接口23,使用任何收发器一类的装置,用于与其他设备或通信网络通信,如应用服务器、无线接入网(radio access network,RAN),无线局域网(wireless local areanetworks,WLAN)等。通信接口23可以包括接收单元实现接收功能,以及发送单元实现发送功能。
通信总线24,可以是工业标准体系结构(industry standard architecture,ISA)总线、外部设备互连(peripheral component interconnect,PCI)总线或扩展工业标准体系结构(extended industry standard architecture,EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图2中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
图3为本申请实施例提供的一种数据的存储方法的流程图,如图3所示,该方法可以包括:
301、数据的查询装置获取业务请求。
其中,业务请求用于请求存储对象记录。示例性的,在用户办理业务的情况下,营业员可以通过操作业务系统,如CRM系统来创建该用户的业务的对象记录,并进行存储操作,此时,应用服务器便可以根据用户的存储操作获取业务请求,并向数据的查询装置发送该业务请求,这样,数据的查询装置便可以获取该业务请求。
302、数据的查询装置根据业务请求,获取至少两个对象标识符和与至少两个对象标识符中的每个对象标识符对应的对象主键值。
其中,在数据的查询装置获取到业务请求之后,可以根据该业务请求从正在办理的业务中获取至少两个对象标识符和与至少两个对象标识符中的每个对象标识符对应的对象主键值。
303、数据的查询装置根据至少两个对象标识符和模型层次结构,从至少两个对象标识符中确定根对象标识符以及与根对象标识符关联的所有对象标识符。
其中,在缓存操作模块获取到至少两个对象标识符之后,缓存操作模块可以向元数据定义模块发送至少两个对象标识符,以便元数据定义模块根据存储的模型层次结构,确定至少两个对象标识符中哪个是根对象标识符,哪些是与该根对象关联的对象标识符,并向缓存操作模块返回根对象标识符和与根对象关联的对象标识符的层次化结构信息。
示例性的,假设缓存操作模块获取到的两个对象标识符为:OfferInst和Subscriber,且元数据定义模块确定出Subscriber为根对象标识符,OfferInst为与根对象关联的对象标识符,那么元数据定义模块向缓存操作模块返回的层次化结构信息为:Subscriber-OfferInst。
304、数据的查询装置根据与根对象标识符关联的所有对象标识符中的任意一个对象标识符,以及与该对象标识符对应的对象主键值,获取至少一条记录。
其中,对象记录中可以包括至少一个字段中每个字段的字段标识符和字段值,该至少一个字段为该对象包括的所有字段。在缓存操作模块从至少两个对象标识符中确定出根对象标识符以及与根对象标识符关联的所有对象标识符之后,可以根据与根对象标识符关联的所有对象标识符中的任意一个对象标识符,以及与该对象标识符对应的对象主键值,从所有正在创建的对象记录中获取至少一条对象记录,并向缓存模块包括的数据缓存模块发送至少一条对象记录。
305、数据的查询装置在缓存中存储至少一条记录。
其中,在缓存操作模块向数据缓存模块发送了至少一条对象记录之后,数据缓存模块可以将至少一条记录以索引键以及与索引键对应的索引值的方式进行存储,其中,索引键为主键值,与索引键对应的索引值为包含该主键值的对象记录。
示例性的,假设缓存操作模块获取到的对象记录为表1中的两条对象记录,那么数据缓存模块可以以表4的方式存储这两条对象记录。
306、数据的查询装置根据该对象标识符和第一对应关系,获取至少一个字段包括的索引字段中每个索引字段的索引类型。
其中,第一对应关系可以包括对象标识符,与对象标识符对应的多个字段标识符以及与字段标识符一一对应的索引类型。在步骤304缓存操作模块获取到至少一条对象记录之后,可以向元数据定义模块发送该对象标识符。这样,元数据定义模块便可以根据该对象标识符和存储的第一对应关系,获取索引字段的索引类型,同时获知至少一个字段中包括的索引字段,并向缓存操作模块发送索引字段的索引类型。
进一步的,为了提升查询性能,第一对应关系还可以包括与字段标识符一一对应的字段类型,这样元数据定义模块根据该对象标识符和第一对应关系,还可以获取索引字段的字段类型。
示例性的,假设元数据定义模块中存储的对象标识符为OfferInst的第一对应关系如表2所示,那么,缓存操作模块可以根据对象标识符OfferInst以及表2,获取到字段标识符为OfferInstID的字段的字段类型为字符串,索引类型为唯一索引,字段标识符为SubscriberID的字段的字段类型为字符串,索引类型为非唯一索引,字段标识符为ExpDate的字段的字段类型为日期,索引类型为非唯一索引,同时确定字段标识符为OfferInstID、SubscriberID和ExpDate的字段为索引字段,字段标识符为OfferID、OfferType和Org的字段为非索引字段。
307、数据的查询装置根据至少一条对象记录的每条记录中的每个索引字段,获取至少一条索引并存储在缓存中。
其中,索引包括索引键以及与索引键对应的主键值集合,索引键可以包括对象标识符、索引字段的字段标识符和字段值。数据的查询装置在获取到索引字段的索引类型之后,可以遍历至少一条对象记录中的每条对象记录,并遍历每条对象记录中的每个索引字段,获取索引,并将索引存储在缓存模块中。进一步的,在步骤306中元数据定义模块获取到索引字段的字段类型的情况下,获取的索引包括的索引键中还可以包括该索引字段的字段类型。
对于任意一条对象记录中的任意一个索引字段,在本申请实施例中,数据的查询装置可以采用以下两种方式获取索引并存储在缓存模块中。
方式1,数据的查询装置生成索引并存储在缓存中。
其中,在元数据定义模块向缓存操作模块返回了获取到的索引字段的索引类型和字段类型之后,缓存操作模块可以指示索引生成模块生成索引。如果与索引字段的字段标识符对应的索引类型为唯一索引,那么索引生成模块可以将对象标识符、该索引字段的字段标识符、字段类型和字段值作为唯一索引包括的索引键,将该索引字段的字段值作为唯一索引包括的主键值,并指示缓存模块包括的唯一索引缓存模块存储该唯一索引。如果与索引字段的字段标识符对应的索引类型为非唯一索引,那么索引生成模块可以将对象标识符、该索引字段的字段标识符、字段类型和字段值作为非唯一索引包括的索引键,将索引类型为唯一索引的索引字段的字段值作为非唯一索引包括的主键值,并判断缓存模块包括的非唯一索引缓存模块中是否包含该非唯一索引包括的索引键。在确定非唯一索引缓存模块中未包含该非唯一索引包括的索引键时,索引生成模块可以指示非唯一索引缓存模块存储该非唯一索引,在确定非唯一索引缓存模块中包含有该非唯一索引包括的索引键时,索引生成模块可以指示非唯一索引缓存模块将该非唯一索引包括的主键值保存在非唯一索引缓存模块中与该非唯一索引包括的索引键对应的主键值集合中。
示例性的,按照步骤306的例子,对于表4的第一条对象记录中包括的索引字段,与字段标识符OfferInstID对应的索引类型为唯一索引,索引生成模块可以生成如表3所示的第一条索引。与字段标识符SubscriberID对应的索引类型为非唯一索引,索引生成模块可以生成如表5所示的第一条索引,此时,该非唯一索引包括的主键值仅有11。同理,与字段标识符ExpDate对应的索引类型为非唯一索引,索引生成模块可以生成如表5所示的第二条索引,此时,该非唯一索引包括的主键值仅有11。对于表4的第二条对象记录中包括的索引字段,字段标识符为OfferInstID的索引字段,索引生成模块可以生成如表3所示的第二条索引。字段标识符为SubscriberID的索引字段,索引生成模块生成包括有索引键为字段类型字符串、对象标识符OfferInst、字段标识符SubscriberID、字段值2,主键值为22的非唯一索引,并在确定表5中包含该索引字段的索引键时,将生成的索引中包括的主键值22保存在表5的第一条索引的主键值集合中。同理,字段标识符为ExpDate的索引字段,索引生成模块在确定表5中包含该索引字段的索引键时,将生成的索引中包括的主键值22保存在表5的第二条索引的主键值集合中。这样,唯一索引缓存模块中存储的唯一索引如表3所示,非唯一索引缓存模块中存储的非唯一索引如表5所示。
表5
Figure BDA0001400427170000111
方式2,数据的查询装置从数据库中直接获取索引并存储在缓存中。
其中,在缓存操作模块获取到与字段标识符对应的索引类型和字段类型之后,可以根据每条对象记录中的主键值、每个索引字段的字段标识符和索引类型,从数据库中查询索引。如果索引字段的索引类型为唯一索引,那么缓存操作模块可以向数据库发送该索引字段的字段标识符,以及该条对象记录中的主键值,即该条对象记录中索引类型为唯一索引的索引字段的字段值,以便数据库查询自身存储的唯一索引,获取同时包含有该主键值和该索引字段的字段标识符的唯一索引,并向缓存操作模块发送获取到的唯一索引,缓存操作模块便可以指示唯一索引缓存模块存储该唯一索引。同理,如果索引字段的索引类型为非唯一索引,那么缓存操作模块可以向数据库发送该索引字段的字段标识符,以及该条对象记录中的主键值,以便数据库查询自身存储的非唯一索引,获取同时包含有该主键值和该索引字段的字段标识符的非唯一索引,并向缓存操作模块发送获取到的非唯一索引,缓存操作模块便可以指示非唯一索引缓存模块存储该非唯一索引。
需要说明的是,在本申请实施例中,唯一索引缓存模块在进行唯一索引的存储时,可以按照字符串、日期和数值三种字段类型分别进行存储,且对于字段类型是日期和数值的索引,可以根据缓存排序模块中的排序规则,如日期由早到晚,数值由小到大的规则进行排序后保存在唯一索引缓存模块中。同理,非唯一索引缓存模块在存储非唯一索引时,可以按照字符串、日期和数值三种字段类型分别进行存储,对于字段类型是日期和数值的索引,是排序后保存在非唯一索引缓存模块中的。
308、数据的查询装置在缓存中保存根对象标识符和与根对象标识符对应的根对象主键值。
其中,在缓存操作模块获取到至少一条索引并进行了存储之后,可以指示缓存模块包括的缓存标记模块存储根对象标识符和与根对象标识符对应的根对象主键值,来表明与该根对象关联的所有对象的对象记录已存储在缓存中,这样数据的查询装置可以在缓存中查询与该根对象关联的所有对象的对象记录,而不需要应用服务器通过访问数据库服务器进行查询。
需要说明的是,本申请实施例中,在首次创建该用户的对象记录的情况下,可以执行以上步骤301-步骤308。且在首次创建之后,若用户的对象记录需要变更,如增加,则数据的查询装置仅需在获取到业务请求,并根据业务请求获取到根对象标识符和与根对象关联的对象标识符之后,获取并存储增加的对象记录,并根据增加的对象记录生成索引存储在缓存中。
另外,在本申请实施例中,步骤305与步骤306-步骤308的执行没有先后关系,即可以先执行步骤305,然后再执行步骤306-步骤308,或者,也可以先执行步骤306-步骤308,然后再执行步骤305,或者,还可以同时执行步骤305和步骤306-步骤308,本申请实施例在此对步骤305,与步骤306-步骤308的执行顺序不做具体限制。
本申请实施例提供的数据的存储方法,在数据的查询装置获取到业务请求,并从获取到的至少两个对象标识符中确定出根对象标识符以及与根对象标识符关联的所有对象标识符之后,可以根据所有对象标识符中的任意一个对象标识符获取至少一条对象记录,并根据该对象标识符和第一对应关系,获取对象记录的至少一个字段包括的索引字段中每个索引字段的索引类型,且数据的查询装置根据至少一条对象记录的每条对象记录中的每个索引字段,获取至少一条索引并存储在缓存中。这样,在基于复杂条件查询缓存中的对象记录,且复杂条件中包含非主键的场景中,由于缓存中存储有索引,即每个索引字段与主键值集合的对应关系,因此便可以通过先分别获取每个索引字段的主键值集合,再获取目标记录集合,来支持复杂条件的查询,这样由于每个索引字段与主键值集合的对应关系是确定的,即不会存在多种组合,因此解决了由于在Redis缓存系统中增加复杂条件的索引键以及与该索引键对应的对象记录导致数据量倍增的问题。
图4为本申请实施例提供的一种数据的查询方法的流程图,该数据的查询方法可以在采用图3的数据的存储方法存储了对象记录和索引之后,查询缓存中的对象记录,如图4所示,该数据的查询方法可以包括:
401、数据的查询装置获取查询请求。
其中,查询请求中包括对象标识符、N个字段中每个字段的字段标识符和字段值,N为大于0的整数。当用户需要在应用系统上查询某些数据时,可以在应用服务器上打开该应用系统的查询界面,并在查询界面上进行输入操作,此时,应用服务器便可以根据用户的输入操作获取查询请求,并向数据的查询装置发送该查询请求,这样数据的查询装置中的缓存操作模块便可以获取查询请求。
例如,当用户需要查询订购的商品时,可以在应用服务器上打开CRM系统的查询界面进行输入操作,此时,应用服务器便可以向数据的查询装置发送该查询装置。假设缓存操作模块获取到的查询请求为:select*from OfferInst where OfferInstID=’11’andSubscriberID=’2’or OfferType=’10’,该查询请求中,对象标识符为OfferInst,该查询请求包括的三个字段的字段标识符分别为OfferInstID、SubscriberID和OfferType,相应的三个字段的字段值分别为11、2和10。
需要说明的是,在缓存操作模块获取到查询请求之后,可以执行以下步骤402-步骤405获取与需要查询的对象标识符关联的根对象标识符和根对象主键值,并判断缓存标记模块中是否包含该根对象标识符和根对象主键值,来确定需要查询的对象的所有对象记录是否已存储在缓存中,从而确定是否可以在缓存中进行数据的查询。
402、数据的查询装置根据对象标识符和模型层次结构,获取根对象标识符。
其中,模型层次结构包括对象标识符以及与对象标识符关联的根对象标识符。缓存操作模块可以向元数据定义模块发送查询请求中包括的对象标识符,以便元数据定义模块根据预先存储的模型层次结构,获取根对象标识符,并向缓存操作模块返回。
示例性的,按照步骤401中的例子,假设元数据定义模块中存储的模型层次结构为SubscriberID-OfferInstID,那么缓存操作模块接收到元数据定义模块返回的根对象标识符为SubscriberID。
403、数据的查询装置根据对象标识符、查询请求中每个索引字段的字段标识符和字段值,以及数据库中存储的索引,获取主键值。
其中,缓存操作模块在获取到根对象标识符之后,可以向数据库服务器发送对象标识符、查询请求中每个索引字段的字段标识符和字段值,以便数据库服务器根据数据库中存储的索引,获得包含有该对象标识符、该查询请求中的索引字段的字段标识符和字段的索引键,从而获取与该索引键对应的主键值,并向数据的查询装置返回获取到的主键值。
404、数据的查询装置根据根对象标识符、对象标识符和主键值,以及数据库存储的第二对应关系,获取根对象主键值。
其中,第二对应关系包括根对象标识符、对象标识符,与对象标识符对应的主键值以及与根对象标识符对应的根对象主键值。在数据的查询装置获取到主键值之后,缓存操作模块可以根据主键值,对象标识符以及步骤402中获取的根对象标识符,查询数据库服务器中存储的第二对应关系,来获取根对象主键值,且该获取到的根对象主键值可以是一个也可以是多个。
405、数据的查询装置确定缓存中包含根对象标识符和根对象主键值。
其中,在缓存操作模块获取到根对象标识符和根对象主键值之后,可以判断缓存标记模块中存储的根对象标识符和根对象主键值中是否包含获取到的根对象标识符和根对象主键值。如果确定缓存标记模块中未包含获取到的根对象标识符和根对象主键值,则表明与根对象关联的该对象的对象记录未全部存储到缓存中,也就是说,无法在缓存中进行数据的查询,只能向应用服务器发送无法查询的消息。如果确定缓存标记模块中包含获取到的根对象标识符和根对象主键值,则表明与根对象关联的该对象的对象记录已经全部存储到缓存中,即可以执行以下步骤406-步骤407。
406、数据的查询装置根据对象标识符、N个字段中每个字段的字段标识符和第一对应关系,获取N个字段包括的M个索引字段中每个索引字段的索引类型和字段类型。
其中,在缓存操作模块确定出缓存标记模块中包含获取到的根对象标识符和根对象主键值之后,可以向元数据定义模块发送对象标识符、N个字段中每个字段的字段标识符,以便元数据定义模块从预先存储的第一对应关系中,获取索引字段的索引类型,同时确定N个字段包括的M个索引字段,也就是说,N个字段中能获取到索引类型的字段为索引字段。
进一步的,为了提升查询性能,第一对应关系还可以包括与字段标识符一一对应的字段类型,这样元数据定义模块还可以获取索引字段的字段类型。
示例性的,按照步骤401中的例子,以及表2所示,缓存操作模块可以根据对象标识符OfferInst,三个字段标识符OfferInstID、SubscriberID和Offer Type,以及表2,获取字段标识符为OfferInstID的字段的字段类型为字符串,索引类型为唯一索引,字段标识符为SubscriberID的字段的字段类型为字符串,索引类型为非唯一索引,同时确定查询请求中字段标识符为OfferInstID和SubscriberID的字段为索引字段,字段标识符为OfferType的字段为非索引字段。
需要说明的是,在本申请实施例中,元数据定义模块可以采用以下两种方式确定N个字段中哪些字段是索引字段。具体的,在一种可能的实现方式中,元数据定义模块可以先根据对象标识符和第一对应关系,获取与该对象标识符对应的所有索引字段的字段标识符、字段类型和索引类型,然后再将查询请求中N个字段中每个字段的字段标识符与获取到的所有索引字段的字段标识符进行匹配,匹配成功的字段标识符即为索引字段的字段标识符。在另一种可能的实现方式中,元数据定义模块可以根据对象标识符和N个字段中任意一个字段的字段标识符,以及第一对应关系,获取该字段的索引类型和字段类型,若能够获取到,则该字段为索引字段,若获取不到,则该字段为非索引字段。
另外,缓存操作模块在获取到N个字段包括的M个索引字段中每个索引字段的索引类型之后,可以判断M个索引字段中是否存在索引字段的索引类型为非唯一索引,如果M个索引字段中不存在索引字段的索引类型为非唯一索引,则按照现有技术的方案查询对象记录,例如,假设N为1,且该索引字段的索引类型为唯一索引,则数据的查询装置可以直接根据该索引字段的字段值,即主键值在缓存中查询与主键值对应的对象记录。如果M个索引字段中存在索引字段的索引类型为非唯一索引,此时可以执行以下步骤407-步骤408:
407、数据的查询装置根据每个索引字段的索引键和缓存中存储的索引,获取与每个索引键对应的主键值集合。
其中,在缓存操作模块获取到索引字段的索引类型之后,对于N个字段包括的M个索引字段中任意一个索引字段的索引键,缓存操作模块可以根据该索引字段的索引类型,在缓存中相应类型的索引中进行查询。具体的,如果该索引字段的索引类型为唯一索引,则缓存操作模块可以在唯一索引缓存模块中的唯一索引中进行查询,如果该索引字段的索引类型为非唯一索引,则缓存操作模块可以在非唯一索引缓存模块中的非唯一索引中进行查询。进一步的,在步骤406中元数据定义模块获取到索引字段的字段类型的情况下,索引键中还可以包括索引字段的字段类型。此时,缓存操作模块可以根据索引键中包括的字段类型,在缓存中存储的相应字段类型的索引中进行查询。这样,通过根据索引字段的索引类型分别查询两类索引,提升了查询性能,且通过根据索引字段的索引键中包括的字段类型在每类相同字段类型的索引中进行查询,不仅提升了查询性能,而且在字段值相同字段类型不同的情况下,能够降低出错的可能性。
且查询请求中还包括:每个索引字段的字段标识符和字段值之间的关系。这样,缓存操作模块还可以根据该索引字段的字段标识符和字段值之间的关系,获取与该索引键对应的主键值集合。具体的,如果该索引字段的字段标识符等于字段值,那么缓存操作模块可以获取与该索引键对应的主键值,如果该索引字段的字段标识符不等于字段值(在字段类型为数值或日期的情况下),那么缓存操作模块可以获取满足该索引字段的字段值要求的主键值集合。
例如,按照步骤406中的例子,以及表3和表5,对于字段标识符为OfferInstID的索引字段,缓存操作模块根据索引类型为唯一索引,字段类型为字符串,以及OfferInstID=11,从表3中获取与该索引字段的索引键对应的主键值11,对于字段标识符为SubscriberID的索引字段,缓存操作模块根据索引类型为非唯一索引,以及SubscriberID=2,从表5中获取与该索引字段的索引键对应的主键值集合11,22。
再例如,假设非唯一索引缓存模块中存储的字段类型为日期的索引如表6所示。
表6
Figure BDA0001400427170000141
且假设查询请求中包括的字段标识符为ExpDate的索引字段与字段值之间的关系为:ExpDate>20171201,那么缓存操作模块根据该索引字段的索引类型为非唯一索引,字段类型为日期,以及ExpDate>20171201,从表6中获取与该索引键对应的主键值集合为11,22。
408、数据的查询装置根据与每个索引键对应的主键值集合和缓存中存储的主键值以及与主键值对应的对象记录,获取目标记录集合。
其中,查询请求中还包括由N个字段组成的序列中每两个相邻的字段之间的逻辑运算符。在缓存操作模块获取到与每个索引键对应的主键值集合之后,可以先确定未处理的查询请求中由N个字段组成的序列中每两个相邻的字段之间的逻辑运算符,然后再获取这些逻辑运算符中优先级最高的逻辑运算符,若该优先级最高的逻辑运算符在由N个字段组成的序列中的相邻字段均为索引字段,则缓存操作模块可以指示记录合并模块对与这两个索引字段的索引键分别对应的主键值集合进行该优先级最高的逻辑运算符指示的运算;若该优先级最高的逻辑运算符在由N个字段组成的序列中的相邻字段为索引字段和非索引字段,则缓存操作模块可以根据与该索引字段的索引键对应的主键值集合,在数据缓存模块中进行查询,获取与该索引键对应的对象记录,并指示记录过滤模块从该对象记录中筛选满足该非索引字段的字段值要求的对象记录。这样,缓存操作模块可以重复执行以上操作,即继续确定未处理的查询请求中包括的逻辑运算符,直到确定出未处理的查询请求中仅包括一个逻辑运算符,并进行该逻辑运算符指示的运算之后,缓存操作模块便可以获取目标记录集合,该目标记录集合便为用户需要查询的数据,数据的查询装置便可以向应用服务器发送获取到的目标记录集合,以供用户查看。
示例性的,假设查询请求中由四个字段组成的序列为:OfferInstID=’11’andSubscriberID=’2’or(Offer Type=’10’and ExpDate=’20180101’),那么缓存操作模块先获取的优先级最高的逻辑运算符为括号中的and,该逻辑运算符的相邻字段为字段标识符为Offer Type和ExpDate的字段,假设字段标识符为Offer Type的字段为非索引字段,字段标识符为ExpDate的字段为索引字段,且假设缓存操作模块根据索引字段ExpDate获取到的主键值为11和22,那么缓存操作模块可以根据主键值11和22,在数据缓存模块中获取与主键值对应的对象记录,假设获取到的两条对象记录如表2所示,那么缓存操作模块可以指示记录过滤模块从表2的两条对象记录中确定出包含有Offer Type=’10’的对象记录。然后缓存操作模块确定的未处理的查询请求为OfferInstID=’11’and SubscriberID=’2’or表2的第二条记录,由于未处理的查询请求中逻辑操作符and和or的优先级相同,因此可以按照从左到右的顺序进行逻辑操作,即先对逻辑操作符and两边的字段进行逻辑操作,假设逻辑操作符and相邻的字段均为索引字段,且假设缓存操作模块根据索引字段OfferInstID获取到的主键值为11,根据索引字段SubscriberID获取到的主键值为11和22,那么缓存操作模块可以指示记录合并模块对主键值11与主键值集合11,22进行取交集的逻辑操作,从而获取到主键值11,并根据该主键值获取表2中的第一条对象记录。最后缓存操作模块确定的未处理的查询请求为表2的第一条记录or表2的第二条记录,缓存操作模块可以指示记录过滤模块对表2中的第一条记录和第二条记录进行取并集的逻辑操作,因此缓存操作模块获取到的目标记录集合便为表2的第一条记录和第二条记录。
需要说明的是,在本申请实施例中,用于执行本申请实施例图3和图4的方法的数据的查询装置在具体的实现中可以为图1中的缓存服务器。
本申请实施例提供的数据的查询方法,在数据的查询装置获取到查询请求,并获取到N个字段包括的M个索引字段中每个索引字段的索引类型之后,可以在判断出M个索引字段中存在索引字段的索引类型为非唯一索引的情况下,根据每个索引字段的索引键和缓存中存储的索引,获取与每个索引键对应的主键值集合,并根据每个主键值集合和缓存中存储的主键值以及与主键值对应的对象记录,获取目标记录集合。这样,在基于复杂条件查询缓存中的对象记录,且复杂条件中包含非主键的场景中,本申请中通过先分别获取每个索引字段的主键值集合,再获取目标记录集合,来支持复杂条件的查询,这样仅需在缓存中增加每个索引字段与主键值集合的对应关系,由于每个索引字段与主键值集合的对应关系是确定的,即不会存在多种组合,因此解决了由于在Redis缓存系统中增加复杂条件的索引键以及与该索引键对应的对象记录导致数据量倍增的问题。
并且,通过根据索引字段的索引类型分别查询两类索引,提升了查询性能,通过根据索引字段的索引键中包括的字段类型在每类相同字段类型的索引中进行查询,不仅提升了查询性能,而且在字段值相同字段类型不同的情况下,能够降低出错的可能性,且,通过在获取索引字段的索引类型之前判断缓存中是否包含获取到的根对象标识符和根对象主键值,能够确定是否可以在缓存中进行数据的查询。
上述主要从数据的查询装置的角度对本申请实施例提供的方案进行了介绍。可以理解的是,数据的查询装置为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的算法步骤,本发明能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
本申请实施例可以根据上述方法示例对数据的查询装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图5示出了上述和实施例中涉及的数据的查询装置的一种可能的组成示意图,如图5所示,该数据的查询装置可以包括:缓存操作模块51、元数据定义模块52和缓存模块53,缓存模块53可以包括数据缓存模块531。
其中,缓存操作模块51,用于支持数据的查询装置执行图2所示的数据的查询方法中的步骤201、步骤203、步骤204,图3所示的数据的存储方法中的步骤301、步骤302、步骤304、步骤305、步骤307、步骤308,图4所示的数据的查询方法中的步骤401、步骤403、步骤404、步骤405、步骤407、步骤408。
元数据定义模块52,用于支持数据的查询装置执行图2所示的数据的查询方法中的步骤202,图3所示的数据的存储方法中的步骤303、步骤306,图4所示的数据的查询方法中的步骤402、步骤406。
数据缓存模块531,用于存储主键值以及与主键值对应的对象记录。
在本申请实施例中,进一步的,如图6所示,数据的查询装置还可以包括:索引生成模块54,缓存模块53还可以包括唯一索引缓存模块532、非唯一索引缓存模块533和缓存标记模块534。
索引生成模块54,用于支持数据的查询装置执行根据每条对象记录中的每个索引字段,生成索引。
唯一索引缓存模块532,用于存储唯一索引。
非唯一索引缓存模块533,用于存储非唯一索引。
缓存标记模块534,用于存储根对象标识符和根对象主键值。
需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
本申请实施例提供的数据的查询装置,用于执行上述数据的查询方法,因此可以达到与上述数据的查询方法相同的效果。
在采用集成的单元的情况下,图7示出了上述实施例中所涉及的数据的查询装置的另一种可能的组成示意图。如图7所示,该数据的查询装置包括:处理模块61和通信模块62。
处理模块61用于对数据的查询装置的动作进行控制管理,例如,处理模块61用于支持数据的查询装置执行图2中的步骤201、步骤202、步骤203、步骤204,图3中的步骤301、步骤302、步骤303、步骤304、步骤306、步骤307中的获取至少一条索引,图4中的步骤401、步骤402、步骤403、步骤404、步骤405、步骤406、步骤407、步骤408,和/或用于本文所描述的技术的其它过程。通信模块62用于支持数据的查询装置与其他网络实体的通信。数据的查询装置还可以包括存储模块63,用于存储数据的查询装置的程序代码和数据。例如,存储模块63用于支持数据的查询装置执行图3中的步骤305、步骤307中的存储在缓存中、步骤308。
其中,处理模块61可以是处理器或控制器。其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。通信模块62可以是收发器、收发电路或通信接口等。存储模块63可以是存储器。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何在本发明揭露的技术范围内的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (31)

1.一种数据的查询方法,其特征在于,所述方法包括:
获取查询请求,所述查询请求中包括对象标识符、N个字段中每个字段的字段标识符和字段值,N为大于0的整数;
根据所述对象标识符、N个字段中每个字段的字段标识符和第一对应关系,获取N个字段包括的M个索引字段中每个索引字段的索引类型,M为小于或等于N的正整数,所述第一对应关系包括对象标识符、字段标识符以及索引类型,所述索引类型包括唯一索引和非唯一索引;
在所述M个索引字段中存在索引字段的索引类型为非唯一索引的情况下,根据每个索引字段的索引键和缓存中存储的索引,获取与每个索引键对应的主键值集合,索引字段的索引键包括所述对象标识符、该索引字段的字段标识符和字段值,索引包括索引键以及与索引键对应的主键值集合;
根据所述与每个索引键对应的主键值集合和所述缓存中存储的主键值以及与主键值对应的对象记录,获取目标记录集合。
2.根据权利要求1所述的方法,其特征在于,所述第一对应关系还包括与字段标识符一一对应的字段类型,索引字段的索引键还包括该索引字段的字段类型,所述字段类型用于指示所述索引字段的数据存储类型,所述字段类型包括以下至少一种:字符串、数值、日期;
所述根据每个索引字段的索引键和缓存中存储的索引,获取与每个索引键对应的主键值集合,包括:
根据每个索引字段的索引键中包括的字段类型,和所述缓存中存储的相应字段类型的索引,获取与该索引键对应的主键值集合。
3.根据权利要求1或2所述的方法,其特征在于,所述查询请求中还包括:每个索引字段的字段标识符和字段值之间的关系,所述根据每个索引字段的索引键和缓存中存储的索引,获取与每个索引键对应的主键值集合,包括:
在确定索引字段的字段标识符等于字段值时,根据该索引字段的索引键和所述缓存中存储的索引,获取与该索引键对应的主键值集合;
在确定索引字段的字段标识符不等于字段值时,根据该索引字段的索引键和所述缓存中存储的索引,获取与该索引键对应的、且满足该索引字段的字段值要求的主键值集合。
4.根据权利要求1-2中任一项所述的方法,其特征在于,在所述根据所述对象标识符、N个字段中每个字段的字段标识符和第一对应关系,获取N个字段包括的M个索引字段中每个索引字段的索引类型之前,还包括:
根据所述对象标识符和模型层次结构,获取根对象标识符,所述模型层次结构包括对象标识符以及与对象标识符关联的根对象标识符;
根据所述对象标识符、所述查询请求中每个索引字段的字段标识符和字段值,以及数据库存储的索引,获取主键值;
根据所述根对象标识符、所述对象标识符和所述主键值,以及所述数据库存储的第二对应关系,获取根对象主键值,所述第二对应关系包括根对象标识符、对象标识符,与对象标识符对应的主键值以及与根对象标识符对应的根对象主键值;
确定所述缓存中包含所述根对象标识符和所述根对象主键值,所述缓存中还预先存储有根对象标识符和根对象主键值。
5.根据权利要求3所述的方法,其特征在于,在所述根据所述对象标识符、N个字段中每个字段的字段标识符和第一对应关系,获取N个字段包括的M个索引字段中每个索引字段的索引类型之前,还包括:
根据所述对象标识符和模型层次结构,获取根对象标识符,所述模型层次结构包括对象标识符以及与对象标识符关联的根对象标识符;
根据所述对象标识符、所述查询请求中每个索引字段的字段标识符和字段值,以及数据库存储的索引,获取主键值;
根据所述根对象标识符、所述对象标识符和所述主键值,以及所述数据库存储的第二对应关系,获取根对象主键值,所述第二对应关系包括根对象标识符、对象标识符,与对象标识符对应的主键值以及与根对象标识符对应的根对象主键值;
确定所述缓存中包含所述根对象标识符和所述根对象主键值,所述缓存中还预先存储有根对象标识符和根对象主键值。
6.根据权利要求2所述的方法,其特征在于,所述方法还包括:
获取业务请求,所述业务请求用于请求存储对象记录;
根据所述业务请求,获取至少两个对象标识符和与所述至少两个对象标识符中的每个对象标识符对应的对象主键值;
根据所述至少两个对象标识符和模型层次结构,从所述至少两个对象标识符中确定根对象标识符以及与所述根对象标识符关联的所有对象标识符;
根据所述与所述根对象标识符关联的所有对象标识符中的任意一个对象标识符,以及与该对象标识符对应的对象主键值,获取至少一条对象记录,对象记录包括至少一个字段中每个字段的字段标识符和字段值;
根据该对象标识符和所述第一对应关系,获取所述至少一个字段包括的索引字段中每个索引字段的字段类型和索引类型;
根据所述至少一条对象记录的每条对象记录中的每个索引字段,获取至少一条索引并存储在所述缓存中,索引键包括对象标识符、索引字段的字段标识符、字段类型和字段值。
7.根据权利要求3所述的方法,其特征在于,所述方法还包括:
获取业务请求,所述业务请求用于请求存储对象记录;
根据所述业务请求,获取至少两个对象标识符和与所述至少两个对象标识符中的每个对象标识符对应的对象主键值;
根据所述至少两个对象标识符和模型层次结构,从所述至少两个对象标识符中确定根对象标识符以及与所述根对象标识符关联的所有对象标识符;
根据所述与所述根对象标识符关联的所有对象标识符中的任意一个对象标识符,以及与该对象标识符对应的对象主键值,获取至少一条对象记录,对象记录包括至少一个字段中每个字段的字段标识符和字段值;
根据该对象标识符和所述第一对应关系,获取所述至少一个字段包括的索引字段中每个索引字段的字段类型和索引类型;
根据所述至少一条对象记录的每条对象记录中的每个索引字段,获取至少一条索引并存储在所述缓存中,索引键包括对象标识符、索引字段的字段标识符、字段类型和字段值。
8.根据权利要求4所述的方法,其特征在于,所述方法还包括:
获取业务请求,所述业务请求用于请求存储对象记录;
根据所述业务请求,获取至少两个对象标识符和与所述至少两个对象标识符中的每个对象标识符对应的对象主键值;
根据所述至少两个对象标识符和模型层次结构,从所述至少两个对象标识符中确定根对象标识符以及与所述根对象标识符关联的所有对象标识符;
根据所述与所述根对象标识符关联的所有对象标识符中的任意一个对象标识符,以及与该对象标识符对应的对象主键值,获取至少一条对象记录,对象记录包括至少一个字段中每个字段的字段标识符和字段值;
根据该对象标识符和所述第一对应关系,获取所述至少一个字段包括的索引字段中每个索引字段的字段类型和索引类型;
根据所述至少一条对象记录的每条对象记录中的每个索引字段,获取至少一条索引并存储在所述缓存中,索引键包括对象标识符、索引字段的字段标识符、字段类型和字段值。
9.根据权利要求6-8中任一项所述的方法,其特征在于,所述根据所述至少一条对象记录的每条对象记录中的每个索引字段,获取至少一条索引并存储在所述缓存中,包括:
在确定索引字段的索引类型为唯一索引时,生成该索引字段的唯一索引并保存在所述缓存中;
在确定索引字段的索引类型为非唯一索引时,生成该索引字段的非唯一索引,并在确定所述缓存中未包含该索引字段的索引键时,在所述缓存中保存该索引字段的非唯一索引;
在确定索引字段的索引类型为非唯一索引时,生成该索引字段的非唯一索引,并在确定所述缓存中包含该索引字段的索引键时,将生成的该索引字段的非唯一索引中的主键值保存在所述缓存中与该索引字段的索引键对应的主键值集合中。
10.根据权利要求8所述的方法,其特征在于,所述根据所述至少一条对象记录的每条对象记录中的每个索引字段,获取至少一条索引并存储在所述缓存中,包括:
根据所述至少一条对象记录的每条对象记录中的主键值、每个索引字段的字段标识符和索引类型,和所述数据库存储的唯一索引和非唯一索引,获取所述至少一条索引并存储在所述缓存中。
11.根据权利要求9所述的方法,其特征在于,所述方法还包括:
将所述唯一索引和所述非唯一索引分别保存在所述缓存中,将所述唯一索引按照字符串、日期和数值三种字段类型分别保存在所述缓存中,将所述非唯一索引按照字符串、日期和数值三种字段类型分别保存在所述缓存中;且,对于字段类型是日期和数值的索引,所述唯一索引和所述非唯一索引是根据排序规则排序后保存在所述缓存中的。
12.根据权利要求10所述的方法,其特征在于,所述方法还包括:
将所述唯一索引和所述非唯一索引分别保存在所述缓存中,将所述唯一索引按照字符串、日期和数值三种字段类型分别保存在所述缓存中,将所述非唯一索引按照字符串、日期和数值三种字段类型分别保存在所述缓存中;且,对于字段类型是日期和数值的索引,所述唯一索引和所述非唯一索引是根据排序规则排序后保存在所述缓存中的。
13.根据权利要求6-8、11、12中任一项所述的方法,其特征在于,在所述获取至少一条索引并存储在所述缓存中之后,还包括:
在所述缓存中保存所述根对象标识符和与所述根对象标识符对应的根对象主键值。
14.根据权利要求9所述的方法,其特征在于,在所述获取至少一条索引并存储在所述缓存中之后,还包括:
在所述缓存中保存所述根对象标识符和与所述根对象标识符对应的根对象主键值。
15.根据权利要求10所述的方法,其特征在于,在所述获取至少一条索引并存储在所述缓存中之后,还包括:
在所述缓存中保存所述根对象标识符和与所述根对象标识符对应的根对象主键值。
16.一种数据的查询装置,其特征在于,所述数据的查询装置包括:缓存操作模块、元数据定义模块和缓存模块,所述缓存模块包括数据缓存模块;
所述缓存操作模块,用于获取查询请求,所述查询请求中包括对象标识符、N个字段中每个字段的字段标识符和字段值,N为大于0的整数;
所述元数据定义模块,用于根据所述对象标识符、N个字段中每个字段的字段标识符和第一对应关系,获取N个字段包括的M个索引字段中每个索引字段的索引类型,M为小于或等于N的正整数,所述第一对应关系包括对象标识符、字段标识符以及索引类型,所述索引类型包括唯一索引和非唯一索引;
所述缓存操作模块,还用于在所述M个索引字段中存在索引字段的索引类型为非唯一索引的情况下,根据每个索引字段的索引键和所述缓存模块中存储的索引,获取与每个索引键对应的主键值集合,索引字段的索引键包括所述对象标识符、该索引字段的字段标识符和字段值,索引包括索引键以及与索引键对应的主键值集合;根据所述与每个索引键对应的主键值集合和所述数据缓存模块中存储的主键值以及与主键值对应的对象记录,获取目标记录集合。
17.根据权利要求16所述的装置,其特征在于,所述第一对应关系还包括与字段标识符一一对应的字段类型,索引字段的索引键还包括该索引字段的字段类型,所述字段类型用于指示所述索引字段的数据存储类型,所述字段类型包括以下至少一种:字符串、数值、日期;所述缓存操作模块,具体用于:
根据每个索引字段的索引键中包括的字段类型,和所述缓存中存储的相应字段类型的索引,获取与该索引键对应的主键值集合。
18.根据权利要求16或17所述的装置,其特征在于,所述查询请求中还包括:每个索引字段的字段标识符和字段值之间的关系,所述缓存操作模块,具体用于:
在确定索引字段的字段标识符等于字段值时,根据该索引字段的索引键和所述缓存模块中存储的索引,获取与该索引键对应的主键值集合;
在确定索引字段的字段标识符不等于字段值时,根据该索引字段的索引键和所述缓存模块中存储的索引,获取该索引键的、且满足该索引字段的字段值要求的主键值集合。
19.根据权利要求16或17所述的装置,其特征在于,所述缓存模块还包括缓存标记模块;
所述元数据定义模块,还用于根据所述对象标识符和模型层次结构,获取根对象标识符,所述模型层次结构包括对象标识符以及与对象标识符关联的根对象标识符;
所述缓存操作模块,还用于根据所述对象标识符、所述查询请求中每个索引字段的字段标识符和字段值,以及数据库中存储的索引,获取主键值;根据所述根对象标识符、所述对象标识符和所述主键值,以及所述数据库中存储的第二对应关系,获取根对象主键值,所述第二对应关系包括根对象标识符、对象标识符,与对象标识符对应的主键值以及与根对象标识符对应的根对象主键值;
所述缓存操作模块,还用于确定所述缓存标记模块中包含所述根对象标识符和所述根对象主键值,所述缓存标记模块中预先存储有根对象标识符和根对象主键值。
20.根据权利要求18所述的装置,其特征在于,所述缓存模块还包括缓存标记模块;
所述元数据定义模块,还用于根据所述对象标识符和模型层次结构,获取根对象标识符,所述模型层次结构包括对象标识符以及与对象标识符关联的根对象标识符;
所述缓存操作模块,还用于根据所述对象标识符、所述查询请求中每个索引字段的字段标识符和字段值,以及数据库中存储的索引,获取主键值;根据所述根对象标识符、所述对象标识符和所述主键值,以及所述数据库中存储的第二对应关系,获取根对象主键值,所述第二对应关系包括根对象标识符、对象标识符,与对象标识符对应的主键值以及与根对象标识符对应的根对象主键值;
所述缓存操作模块,还用于确定所述缓存标记模块中包含所述根对象标识符和所述根对象主键值,所述缓存标记模块中预先存储有根对象标识符和根对象主键值。
21.根据权利要求17所述的装置,其特征在于,
所述缓存操作模块,还用于获取业务请求,所述业务请求用于请求存储对象记录;根据所述业务请求,获取至少两个对象标识符和与所述至少两个对象标识符中的每个对象标识符对应的对象主键值;
所述元数据定义模块,还用于根据所述至少两个对象标识符和模型层次结构,从所述至少两个对象标识符中确定根对象标识符以及与所述根对象标识符关联的所有对象标识符;
所述缓存操作模块,还用于根据所述与所述根对象标识符关联的所有对象标识符中的任意一个对象标识符,以及与该对象标识符对应的对象主键值,获取至少一条对象记录,对象记录包括至少一个字段中每个字段的字段标识符和字段值,所述至少一个字段为该对象包括的所有字段;
所述元数据定义模块,还用于根据该对象标识符和所述第一对应关系,获取所述至少一个字段包括的索引字段中每个索引字段的字段类型和索引类型;
所述缓存操作模块,还用于根据所述至少一条对象记录的每条对象记录中的每个索引字段,获取至少一条索引并存储在所述缓存模块中,索引键包括对象标识符、索引字段的字段标识符、字段类型和字段值。
22.根据权利要求18所述的装置,其特征在于,
所述缓存操作模块,还用于获取业务请求,所述业务请求用于请求存储对象记录;根据所述业务请求,获取至少两个对象标识符和与所述至少两个对象标识符中的每个对象标识符对应的对象主键值;
所述元数据定义模块,还用于根据所述至少两个对象标识符和模型层次结构,从所述至少两个对象标识符中确定根对象标识符以及与所述根对象标识符关联的所有对象标识符;
所述缓存操作模块,还用于根据所述与所述根对象标识符关联的所有对象标识符中的任意一个对象标识符,以及与该对象标识符对应的对象主键值,获取至少一条对象记录,对象记录包括至少一个字段中每个字段的字段标识符和字段值,所述至少一个字段为该对象包括的所有字段;
所述元数据定义模块,还用于根据该对象标识符和所述第一对应关系,获取所述至少一个字段包括的索引字段中每个索引字段的字段类型和索引类型;
所述缓存操作模块,还用于根据所述至少一条对象记录的每条对象记录中的每个索引字段,获取至少一条索引并存储在所述缓存模块中,索引键包括对象标识符、索引字段的字段标识符、字段类型和字段值。
23.根据权利要求19所述的装置,其特征在于,
所述缓存操作模块,还用于获取业务请求,所述业务请求用于请求存储对象记录;根据所述业务请求,获取至少两个对象标识符和与所述至少两个对象标识符中的每个对象标识符对应的对象主键值;
所述元数据定义模块,还用于根据所述至少两个对象标识符和模型层次结构,从所述至少两个对象标识符中确定根对象标识符以及与所述根对象标识符关联的所有对象标识符;
所述缓存操作模块,还用于根据所述与所述根对象标识符关联的所有对象标识符中的任意一个对象标识符,以及与该对象标识符对应的对象主键值,获取至少一条对象记录,对象记录包括至少一个字段中每个字段的字段标识符和字段值,所述至少一个字段为该对象包括的所有字段;
所述元数据定义模块,还用于根据该对象标识符和所述第一对应关系,获取所述至少一个字段包括的索引字段中每个索引字段的字段类型和索引类型;
所述缓存操作模块,还用于根据所述至少一条对象记录的每条对象记录中的每个索引字段,获取至少一条索引并存储在所述缓存模块中,索引键包括对象标识符、索引字段的字段标识符、字段类型和字段值。
24.根据权利要求21-23中任一项所述的装置,其特征在于,所述缓存操作模块,具体用于:
在确定索引字段的索引类型为唯一索引时,生成该索引字段的唯一索引并保存在所述缓存模块中;
在确定索引字段的索引类型为非唯一索引时,生成该索引字段的非唯一索引,并在确定所述缓存模块中未包含该索引字段的索引键时,在所述缓存模块中保存该索引字段的非唯一索引;
在确定索引字段的索引类型为非唯一索引时,生成该索引字段的非唯一索引,并在确定所述缓存模块中包含该索引字段的索引键时,将生成的该索引字段的非唯一索引中的主键值保存在所述缓存模块中与该索引字段的索引键对应的主键值集合中。
25.根据权利要求23所述的装置,其特征在于,所述缓存操作模块,具体用于:
根据所述至少一条对象记录的每条对象记录中的主键值、每个索引字段的字段标识符和索引类型,和所述数据库存储的唯一索引和非唯一索引,获取所述至少一条索引并将所述至少一条索引存储在所述缓存模块中。
26.根据权利要求24所述的装置,其特征在于,
所述缓存操作模块,还用于将所述唯一索引保存在唯一索引缓存模块中,将所述非唯一索引保存在非唯一索引缓存模块中,将所述唯一索引按照字符串、日期和数值三种字段类型分别保存在所述唯一索引缓存模块中,将所述非唯一索引按照字符串、日期和数值三种字段类型分别保存在所述非唯一索引缓存模块中;且,对于字段类型是日期和数值的索引,所述唯一索引和所述非唯一索引是根据排序规则排序后分别保存在所述唯一索引缓存模块和所述非唯一索引缓存模块中的。
27.根据权利要求25所述的装置,其特征在于,
所述缓存操作模块,还用于将所述唯一索引保存在唯一索引缓存模块中,将所述非唯一索引保存在非唯一索引缓存模块中,将所述唯一索引按照字符串、日期和数值三种字段类型分别保存在所述唯一索引缓存模块中,将所述非唯一索引按照字符串、日期和数值三种字段类型分别保存在所述非唯一索引缓存模块中;且,对于字段类型是日期和数值的索引,所述唯一索引和所述非唯一索引是根据排序规则排序后分别保存在所述唯一索引缓存模块和所述非唯一索引缓存模块中的。
28.根据权利要求23、27中任一项所述的装置,其特征在于,
所述缓存操作模块,还用于在所述缓存标记模块中保存所述根对象标识符和与所述根对象标识符对应的根对象主键值。
29.根据权利要求25所述的装置,其特征在于,
所述缓存操作模块,还用于在所述缓存标记模块中保存所述根对象标识符和与所述根对象标识符对应的根对象主键值。
30.一种数据的查询装置,其特征在于,所述数据的查询装置包括:至少一个处理器、存储器、通信接口和通信总线;
所述处理器与所述存储器、所述通信接口通过所述通信总线连接,所述存储器用于存储计算机执行指令,当所述数据的查询装置运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述数据的查询装置执行如权利要求1-15中任一项所述的数据的查询方法。
31.一种计算机存储介质,其特征在于,所述计算机存储介质包括计算机软件指令,当所述计算机软件指令在计算机上运行时,使得所述计算机执行如权利要求1-15任一项所述的方法。
CN201710796412.4A 2017-09-06 2017-09-06 一种数据的查询方法及装置 Active CN110019292B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710796412.4A CN110019292B (zh) 2017-09-06 2017-09-06 一种数据的查询方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710796412.4A CN110019292B (zh) 2017-09-06 2017-09-06 一种数据的查询方法及装置

Publications (2)

Publication Number Publication Date
CN110019292A CN110019292A (zh) 2019-07-16
CN110019292B true CN110019292B (zh) 2021-05-04

Family

ID=67186206

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710796412.4A Active CN110019292B (zh) 2017-09-06 2017-09-06 一种数据的查询方法及装置

Country Status (1)

Country Link
CN (1) CN110019292B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110781269B (zh) * 2019-09-29 2023-03-31 上海连尚网络科技有限公司 一种在阅读应用中进行书籍搜索的方法与设备
CN110750539A (zh) * 2019-10-16 2020-02-04 杭州安恒信息技术股份有限公司 基于Redis数据库的信息查询方法、装置及电子设备
CN110837511B (zh) * 2019-11-15 2022-08-23 金蝶软件(中国)有限公司 一种数据处理方法、系统及相关设备
CN111125156B (zh) * 2019-12-17 2023-09-26 网银在线(北京)科技有限公司 数据的查询方法、装置和电子设备
CN111429987B (zh) * 2020-03-20 2023-05-09 深圳市凯沃尔电子有限公司 一种基于索引文件的搜索方法和装置
CN111598560A (zh) * 2020-05-13 2020-08-28 广州市百果园信息技术有限公司 基于存储服务的数据修改方法、装置和存储服务器
CN112156476A (zh) * 2020-09-23 2021-01-01 成都完美天智游科技有限公司 一种游戏配置档导出方法、装置、设备及存储介质
CN112597164A (zh) * 2020-12-26 2021-04-02 中国农业银行股份有限公司 一种标识分配方法及装置
CN112527804B (zh) * 2021-01-27 2022-09-16 中智关爱通(上海)科技股份有限公司 文件存储方法、文件读取方法和数据存储系统
CN112925792B (zh) * 2021-03-26 2024-01-05 北京中经惠众科技有限公司 数据存储控制方法、装置、计算设备及介质
CN116701386A (zh) * 2022-02-28 2023-09-05 华为技术有限公司 键值对检索方法、装置及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105354255A (zh) * 2015-10-21 2016-02-24 华为技术有限公司 数据查询方法和装置
CN105630847A (zh) * 2014-11-21 2016-06-01 深圳市腾讯计算机系统有限公司 数据存储方法、数据查询方法、装置及系统
CN106326243A (zh) * 2015-06-19 2017-01-11 苏宁云商集团股份有限公司 一种数据处理方法及装置
CN106557499A (zh) * 2015-09-25 2017-04-05 中兴通讯股份有限公司 HBase二级索引创建方法和装置
CN107133362A (zh) * 2017-06-01 2017-09-05 北京凤凰理理它信息技术有限公司 商品信息搜索方法、系统、计算机程序及电子设备

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103324642B (zh) * 2012-03-23 2016-12-14 日电(中国)有限公司 为数据建立索引的系统和方法以及数据查询方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105630847A (zh) * 2014-11-21 2016-06-01 深圳市腾讯计算机系统有限公司 数据存储方法、数据查询方法、装置及系统
CN106326243A (zh) * 2015-06-19 2017-01-11 苏宁云商集团股份有限公司 一种数据处理方法及装置
CN106557499A (zh) * 2015-09-25 2017-04-05 中兴通讯股份有限公司 HBase二级索引创建方法和装置
CN105354255A (zh) * 2015-10-21 2016-02-24 华为技术有限公司 数据查询方法和装置
CN107133362A (zh) * 2017-06-01 2017-09-05 北京凤凰理理它信息技术有限公司 商品信息搜索方法、系统、计算机程序及电子设备

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
HiBase:一种基于分层式索引的高效HBase查询技术与系统;葛微等;《计算机学报》;20150715(第01期);第140-153页 *
基于Hbase的大数据查询优化;朱明等;《智能计算机与应用》;20170828(第04期);第59-61页 *
基于Redis实现HBase二级索引的方法;崔丹等;《软件》;20161115(第11期);第64-67页 *

Also Published As

Publication number Publication date
CN110019292A (zh) 2019-07-16

Similar Documents

Publication Publication Date Title
CN110019292B (zh) 一种数据的查询方法及装置
US9996565B2 (en) Managing an index of a table of a database
US8108367B2 (en) Constraints with hidden rows in a database
US10776336B2 (en) Dynamic creation and maintenance of multi-column custom indexes for efficient data management in an on-demand services environment
CN107798038B (zh) 数据响应方法及数据响应设备
CN108228817A (zh) 数据处理方法、装置和系统
US8903868B2 (en) Processing of categorized product information
US10002170B2 (en) Managing a table of a database
US8924373B2 (en) Query plans with parameter markers in place of object identifiers
US10339330B2 (en) Data aggregation system for enabling query operations on restricted data that originates from multiple independent multiple sources
CN108959510B (zh) 一种分布式数据库的分区级连接方法和装置
CN109885786B (zh) 数据缓存处理方法、装置、电子设备及可读存储介质
EP3376403A1 (en) Method of accessing distributed database and device providing distributed data service
CN107168977A (zh) 一种数据查询的优化方法及装置
CN110737747A (zh) 一种数据操作方法、装置及系统
US8396858B2 (en) Adding entries to an index based on use of the index
CN115422205A (zh) 数据处理方法、装置、电子设备及存储介质
CN113791730B (zh) 基于双存储池的放置组调整方法、系统、装置及存储介质
JP2007133624A (ja) 連結関係情報を用いた情報管理方法及び装置
US11423098B2 (en) Method and apparatus to generate a simplified query when searching for catalog items
CN113934729A (zh) 一种基于知识图谱的数据管理方法、相关设备及介质
CN113868267A (zh) 注入时序数据的方法、查询时序数据的方法及数据库系统
US20200201829A1 (en) Systems and methods for compiling a database
US11288262B2 (en) Methods, systems, and computer readable media for recycling order identifiers
CN114328755B (zh) 一种数据写入方法、数据读取方法、装置及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant