CN102122285A - 一种数据缓存系统和数据查询方法 - Google Patents

一种数据缓存系统和数据查询方法 Download PDF

Info

Publication number
CN102122285A
CN102122285A CN2010100427371A CN201010042737A CN102122285A CN 102122285 A CN102122285 A CN 102122285A CN 2010100427371 A CN2010100427371 A CN 2010100427371A CN 201010042737 A CN201010042737 A CN 201010042737A CN 102122285 A CN102122285 A CN 102122285A
Authority
CN
China
Prior art keywords
index
data
hash
type
search
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.)
Granted
Application number
CN2010100427371A
Other languages
English (en)
Other versions
CN102122285B (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.)
Aspire Digital Technologies Shenzhen Co Ltd
Original Assignee
Aspire Digital Technologies Shenzhen 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 Aspire Digital Technologies Shenzhen Co Ltd filed Critical Aspire Digital Technologies Shenzhen Co Ltd
Priority to CN 201010042737 priority Critical patent/CN102122285B/zh
Publication of CN102122285A publication Critical patent/CN102122285A/zh
Application granted granted Critical
Publication of CN102122285B publication Critical patent/CN102122285B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及缓存技术,针对现有Memcached系统不支持多索引等缺陷,提供一种数据缓存系统和数据查询方法。数据缓存系统包括虚拟存储模块,设置在共享内存中;转发模块,用于接收搜索请求并判断其所属类型,然后转发该搜索请求;散列搜索模块,用于接收单值搜索类型的搜索请求,提取关键字,依据该关键字的类型在元数据表中查找对应的索引信息,并依据该索引信息在索引区中查找对应的散列索引链表;依据所述散列计算结果在所述子链表中查找匹配的索引,据此查找匹配的数据记录。本发明还提供了一种数据查询方法。本发明提供的技术方案支持多索引,且采用共享内存方式存储数据记录,可有效克服现有Memcached系统中存在的缺陷。

Description

一种数据缓存系统和数据查询方法
技术领域
本发明涉及缓存技术,更具体地说,涉及一种数据缓存系统和数据查询方法。
背景技术
为减轻数据库服务器的访问压力,大多数数据库服务器都设置有数据缓存系统。这种数据缓存系统的作用是临时存储用户经常访问的数据。如此一来,当用户再次访问已经进行了临时存储的数据时便可直接返回该数据,而无需再从数据库服务器中获取该数据,由此降低数据库服务器的负担。
目前最为常用的一种网络数据缓存系统为Memcached系统。Memcached系统是一种分布式内存缓存系统,其采用Client/Server(客户端/服务器)结构,基于socket进行通信。Memcached系统采用键(key)、值(value)方式进行数据的缓存,不存在逻辑表的概念,所有数据均共享同一存储空间。Memcached系统使用进程内存来存储缓存的数据,如此一来,当Memcached系统的关键进程发生异常导致Memcached系统重启时,通过Memcached系统缓存的数据将会丢失。此外,Memcached没有数据表的概念,所有缓存数据共享同一存储空间,缺少逻辑上的划分,不便于数据的管理和使用。此外,Memcached系统不支持多索引,因此若希望为同一数据记录设置多个索引,则需要为该数据记录准备多个副本,存储空间浪费严重。
因此,需要一种数据缓存系统,能够有效克服现有Memcached系统存在的上述缺陷。
发明内容
本发明要解决的技术问题在于,针对现有Memcached系统不支持多索引等缺陷,提供一种数据缓存系统和数据查询方法。
本发明解决其技术问题所采用的技术方案是:
构造一种数据缓存系统,包括:
虚拟存储模块,设置在共享内存中,包括元数据区和表数据区,所述元数据区中存储有元数据表,所述表数据区中设置有索引区和记录区,所述索引区中存储有至少一个散列索引链表,每一散列索引链表包含至少一个子链表,所述记录区中存储有至少一条数据记录;
转发模块,用于接收搜索请求并判断其所属类型,然后依据该搜索请求的类型转发该搜索请求;
散列搜索模块,用于:
接收转发模块转发的单值搜索类型的搜索请求,提取其中包含的关键字,依据该关键字的类型在元数据表中查找对应的索引信息,并依据该索引信息在索引区中查找对应的散列索引链表;
对关键字进行散列计算并依据找到的散列索引链表中子链表的数量对散列计算结果进行取余计算,在所述散列索引链表中查找取余计算结果对应的子链表;
依据所述散列计算结果在所述子链表中查找匹配的索引;
依据所述索引在记录区中查找匹配的数据记录并返回。
在本发明提供的数据缓存系统中,所述索引区中还存储有至少一个T型索引树,所述系统还包括:
T树搜索模块,用于:
接收转发模块转发的范围搜索类型的搜索请求,提取其中包含的搜索范围;
依据所述搜索范围对应的类型在元数据表中查找对应的索引信息,并依据该索引信息在索引区中查找对应的T型索引树;
依据所述搜索范围的上边界值和下边界值在T型索引树中查找匹配的索引;
依据找到的索引在记录区中查找匹配的数据记录并返回。
在本发明提供的数据缓存系统中,还包括:
初始化模块,用于在启动时读取配置文件,据此基于共享内存创建所述虚拟存储模块。
在本发明提供的数据缓存系统中,所述配置文件采用XML格式。
在本发明提供的数据缓存系统中,所述散列计算为CRC 32计算。
本发明还提供了一种数据查询方法,用于在设置在共享内存中的虚拟存储模块中查找对应的数据记录,其中,所述虚拟存储模块包括元数据区和表数据区,所述元数据区中存储有元数据表,所述表数据区中设置有索引区和记录区,所述索引区中存储有至少一个散列索引链表,每一散列索引链表包含至少一个子链表,所述记录区中存储有至少一条数据记录,所述方法包括:
转发步骤,包括接收搜索请求并判断其所属类型,然后依据该搜索请求的类型转发该搜索请求;
散列搜索步骤,包括:
接收转发的单值搜索类型的搜索请求,提取其中包含的关键字,依据该关键字的类型在元数据表中查找对应的索引信息,并依据该索引信息在索引区中查找对应的散列索引链表;
对关键字进行散列计算并依据找到的散列索引链表中子链表的数量对散列计算结果进行取余计算,在所述散列索引链表中查找取余计算结果对应的子链表;
依据所述散列计算结果在所述子链表中查找匹配的索引;
依据所述索引在记录区中查找匹配的数据记录并返回。
在本发明提供的数据查询方法中,所述索引区中还存储有至少一个T型索引树,所述方法还包括:
T树搜索步骤,包括:
接收转发的范围搜索类型的搜索请求,提取其中包含的搜索范围;
依据所述搜索范围对应的类型在元数据表中查找对应的索引信息,并依据该索引信息在索引区中查找对应的T型索引树;
依据所述搜索范围的上边界值和下边界值在T型索引树中查找匹配的索引;
依据找到的索引在记录区中查找匹配的数据记录并返回。
在本发明提供的数据查询方法中,还包括:
初始化步骤,包括在启动时读取配置文件,据此基于共享内存创建所述虚拟存储模块。
在本发明提供的数据查询方法中,所述配置文件采用XML格式。
在本发明提供的数据查询方法中,所述散列计算为CRC 32计算。
实施本发明的技术方案,具有以下有益效果:在本发明提供的数据缓存系统和数据查询方法中,缓存的数据记录存储在共享内存中。如此一来,当缓存系统的关键进程发生异常导致进程重启时,存储在共享内存中的数据记录仍然可用。此外,本发明提供的技术方案将共享内存划分为元数据区和表数据区,元数据区中存储有元数据表,表数据区中设置有索引区和记录区,索引区中存储有多个散列索引链表,每一散列索引链表包含多个子链表,记录区中存储有多条数据记录,如此一来便可方便进行数据的管理和使用。同时,索引区中存储有多个散列索引链表,由此便可实现通过多种索引对同一数据记录进行查询。同理,索引区中还存储有多个T型索引树,如此一来便可实现范围搜索。同时,T型索引树可依据索引的类型来设置,由此便可实现通过多种索引对同一数据记录进行查询。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是依据本发明一较佳实施例的数据缓存系统的逻辑结构示意图;
图2是依据本发明一较佳实施例的虚拟存储模块的逻辑结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供了一种数据缓存系统和数据查询方法。在本发明提供的技术方案中,缓存的数据记录存储在共享内存中。如此一来,当缓存系统的关键进程发生异常导致进程重启时,存储在共享内存中的数据记录仍然可用。此外,本发明提供的技术方案将共享内存划分为元数据区和表数据区,元数据区中存储有元数据表,表数据区中设置有索引区和记录区,索引区中存储有多个散列索引链表,每一散列索引链表包含多个子链表,记录区中存储有多条数据记录,如此一来便可方便进行数据的管理和使用。同时,索引区中存储有多个散列索引链表,由此便可实现通过多种索引对同一数据记录进行查询。同理,索引区中还存储有多个T型索引树,如此一来便可实现范围搜索。同时,T型索引树可依据索引的类型来设置,由此便可实现通过多种索引对同一数据记录进行查询。下面就结合附图和具体实施例来对本发明的技术方案进行详细描述。
图1是依据本发明一较佳实施例的数据缓存系统100的逻辑结构示意图。如图1所示,数据缓存系统100包括虚拟存储模块102、转发模块104、散列搜索模块106、T树搜索模块108(可选的)和初始化模块110。
虚拟存储模块102设置在共享内存中,其由共享内存构建,用于存储缓存的数据记录。通过采用共享内存构建虚拟存储模块,可在数据缓存系统100的关键进程出现异常导致进程重启时,达到缓存的数据不会丢失的目的。
本发明提供的技术方案使用基于双向链表的内存管理技术,来管理进程间共享内存的动态分配和释放。初始进程根据内存表配置信息向系统申请指定大小共享内存,并创建内存分配逻辑单元,包括内存分配管理信息以及上下节点指针,内存管理单元以双向链表的形式进行链接,使系统在内存释放时可以快速释放并进行空闲内存合并。基于共享内存的缓存技术解除了数据与管理进程的捆绑关系,使内存数据可以独立于管理进程而存在,不会出现在进程退出而导致数据丢失的问题,同时共享内存允许多进程同时访问,为提高系统吞吐量提供了基础。
虚拟存储模块102包括元数据区和表数据区,元数据区中存储有元数据表,表数据区中设置有索引区和记录区。索引区中存储有至少一个散列索引链表,每一散列索引链表包含至少一个子链表,记录区中存储有至少一条数据记录。虚拟存储模块102的构成如图2所示。
在具体实现过程中,虚拟存储模块102由初始化模块110构建。
初始化模块110用于在启动时读取配置文件,据此借助共享内存创建虚拟存储模块102。
在具体实现过程中,上述配置文件采用XML格式。配置文件的具体实例如下:
<?xml version=″1.0″encoding=″UTF-8″?>
<!--edited with XML SPY v5U(http://www.xmlspy.com)by et8(et8)-->
<!--W3C Schema generated by XMLSPY v5U(http://www.xmlspy.com)-->
<xs:schema xmlns:xs=″http://www.w3.org/2001/XMLSchema″
elementFormDefault=″qualified″>
<xs:element name=″table″>
<xs:complexType mixed=″true″>
<xs:sequence>
<xs:element name=″column″maxOccurs=″unbounded″>
<xs:complexType>
<xs:attribute name=″type″>
<xs:simpleType>
<xs:restriction base=″xs:string″>
<xs:enumeration value=″int″/>
<xs:enumeration value=″float″/>
<xs:enumeration value=″double″/>
<xs:enumeration value=″string″/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element ref=″index″maxOccurs=″unbounded″/>
<xs:element ref=″aging″/>
</xs:sequence>
<xs:attribute name=″name″type=″xs:string″/>
<xs:attribute name=″type″>
<xs:simpleType>
<xs:restriction base=″xs:string″>
<xs:enumeration value=″cache″/>
<xs:enumeration value=″memory″/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name=″storage″type=″xs:int″/>
<xs:attribute name=″initload″>
<xs:simpleType>
<xs:restriction base=″xs:int″>
<xs:enumeration value=″0″/>
<xs:enumeration value=″1″/>
<xs:enumeration value=″2″/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name=″maxrecordnum″type=″xs:int″/>
</xs:complexType>
</xs:element>
<xs:element name=″index″>
<xs:complexType>
<xs:sequence>
<xs:element name=″column name″type=″xs:string″
maxOccurs=″unbounded″/>
</xs:sequence>
<xs:attribute name=″name″type=″xs:string″use=″required″/>
<xs:attribute name=″type″use=″required″>
<xs:simpleType>
<xs:restriction base=″xs:string″>
<xs:enumeration value=″hash″/>
<xs:enumeration value=″tree″/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name=″primaly″type=″xs:boolean″use=″optional″
default=″false″/>
</xs:complexType>
</xs:element>
<xs:element name=″aging″>
<xs:complexType>
<xs:simpleContent>
<xs:extension base=″agingSimpleType″>
<xs:attribute name=″value″type=″xs:int″/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name=″agingSimpleType″>
<xs:restriction base=″xs:string″>
<xs:enumeration value=″LRU″/>
<xs:enumeration value=″NONE″/>
<xs:enumeration value=″TIMEOUT″/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
使用者可以定义表的名称(″table″)、类型(″type″)、存储所需共享内存大小(″storage″)、初始数据加载方式(″initload″)、列信息(″column″)、索引信息(″index″)以及记录淘汰机制(″aging″)等,内存表的初始化方法将解析此配置信息以创建虚拟存储模块102中的各种数据区和数据表。
在本发明提供的技术方案中,对于记录区中存储的每一条数据记录,都可以为其建立多个索引。为便于描述,将这种索引定义为原始索引。例如,若数据记录为书目信息,则可分别依据书名、出版时间、价格、出版社等多种书目属性构建原始索引。在具体实现过程中,为便于进行匹配计算,需要对为每条数据记录构建的原始索引进行散列计算,以计算结果作为对应数据记录的索引。为便于描述,将这种经过散列计算得到的索引定义为散列索引。如此一来,便可依据为每条数据记录生成的散列索引构建散列索引链表。作为可选的,在散列索引链表中,各个数据记录的散列索引可依据散列结果的大小进行排序。
当数据记录数量较多时,散列索引链表将十分庞大。为加快检索,可将散列索引链表划分为多个子链表(即散列桶)。这样一来,便可对关键字进行散列计算,并依据散列索引链表中子链表的数量对散列计算结果进行取余计算,确定所要查找的索引所在的子链表。
在具体实现过程中,上述散列计算可以是例如但不限于CRC 32计算。
本领域的技术人员应当明白,散列计算难免出现碰撞。例如,若对书目序号进行散列计算并以计算结果作为索引,则可能存在不同书目序号经散列计算得到同一散列计算结果的可能。如此一来,散列索引链表中将存在多个相同的索引,但这些相同的索引缺对应不同的数据记录。在具体应用过程中,数据记录的数量越庞大,碰撞发生的可能性就越大。为解决这一问题,在本发明提供的技术方案中,在记录区中,每一数据条目中附加有上文所述的原始索引。以上述书目序号为例,每一数据条目中将附加有该书目的书目序号。这样一来,在通过散列索引查找到对应的多个数据记录后,便可通过将关键字与原始索引进行比较的方法,确定关键字对应的数据记录。
转发模块104用于接收搜索请求并判断其所属类型,然后依据该搜索请求的类型转发该搜索请求。在本发明提供的技术方案中,不仅可以进行单值检索,也可进行范围检索。因此搜索请求可包括单值搜索类型和范围搜索类型。
散列搜索模块106用于执行如下操作:
接收转发模块104转发的单值搜索类型的搜索请求,提取其中包含的关键字(例如书目序号100019),依据该关键字的类型(即书目序号)在元数据表中查找对应的索引信息,并依据该索引信息在索引区中查找对应的散列索引链表。例如,若关键字的类型为上文所述的书目序号,则在元数据表中查找树木序号所对应的索引信息,然后依据该索引信息在索引区中查找书目序号对应的散列索引链表。
对关键字进行散列计算并依据找到的散列索引链表中子链表的数量对散列计算结果进行取余计算,在所述散列索引链表中查找取余计算结果对应的子链表。
依据散列计算结果在上述子链表中查找匹配的散列索引。
依据找到的散列索引在记录区中查找匹配的数据记录并返回。如上文所述,当通过散列索引查找到的数据记录不止一条时,需要以关键字作为原始索引在找到的数据记录中查找包含该关键字的数据记录并返回。
在本发明提供的技术方案中,输入的关键字还可不止一个。在这种情况下,可将这些关键字拼成一个字符串,各关键字之间以预先设置的分隔符例如‘|’分隔。在查找过程中,对于字符串中的每一关键字,散列搜索模块106都将执行上述操作。因此,对于每一关键字,都将得到由多条数据记录组成的记录集合。散列搜索模块106在对每一关键字都执行上述操作之后,通过计算所得到的各个记录集合的交集,便可得到想要的数据记录。
在本发明提供的技术方案中,在插入数据记录时,需要依据待插入数据记录的散列索引的大小,将该散列索引插入对应散列索引链表中对应子链表中的适当位置。而对应的数据记录只需插入对应数据链表的尾部即可。
而在删除操作时,需要同时更新对应的散列索引链表。
在本发明提供的技术方案中,索引区中还存储有至少一个T型索引树,此时数据缓存系统100还包括:
T树搜索模块,用于:
接收转发模块104转发的范围搜索类型的搜索请求,提取其中包含的搜索范围;
依据所述搜索范围对应的类型在元数据表中查找对应的索引信息,并依据该索引信息在索引区中查找对应的T型索引树;
依据所述搜索范围的上边界值和下边界值在T型索引树中查找匹配的索引;
依据找到的索引在记录区中查找匹配的数据记录并返回。
T-Tree(T树)为一棵平衡二叉树,每个节点上保存多个元素(索引),因此比B-Tree(B树)树有更高的更新和存储效率。
如上文所述,在具体实现过程中,对于记录区中存储的每一条数据记录,都可以为其建立多个索引。例如,若数据记录为书目信息,则可分别依据出版时间、价格等多种书目属性构建索引。各条数据记录的相同类型的索引构成一棵T型索引树,因此在为数据记录构建多个索引的情况下,索引区中可存在多棵T型索引树。由此一来,用户便可通过多种索引来查找想要的数据记录。T型索引树中的每个节点都包含从小到大排列的多个索引。每一索引都对应一个T链表,该T链表中的每个节点对应记录区中的一条数据记录,同一T链表中各节点所指向的数据记录的对应索引均相同。
T型索引树用于进行范围查找,也支持多列索引(可以根据部分列进行查找,比如索引列为C1、C2、C3,可以根据C1、C1和C2进行查找)。
对于单列索引,T型索引树中每一节点中各索引所各自指向的T链表中的各个节点对应记录区中的具体数据记录。
对于多列索引,T型索引树体现为多个T型索引树的级联。第一列树的节点指向以第二列索引建立的T型索引树,第二列树的节点又指向以下一列索引建立的T型索引树,这样直到最后一列,最后一列树的节点中各索引所各自指向的T链表中的各个节点对应记录区中的具体数据记录。
T型索引树的查找按照如下方式进行:
单树的查找方法如下:
1、查找总是从根节点开始。
2、如果输入关键字小于当前节点中包含的最小索引,则递归查询左子树;如果大于当前节点中包含的最大索引,则递归查询右子树;否则在当前节点中进行二分查找。
3、遍历查找到的索引,其所指向的T链表中的各个节点所指向的数据记录作为一个列表返回。
4、对于范围查找,分别基于搜索范围的上边界值和下边界值,依照步骤1至3查找对应的索引,并依据各条索引查找对应的数据记录。
多列索引树的查找方法如下:
1、根据第一索引列的关键字查找第二列索引树,如果查找到,则根据第二索引列的关键字在第二列索引树中查找第三列索引树,如此类推,直到找到最后一列索引树为止。
2、如果在查找第N列索引树时失败,则返回失败。
3、如果找到最后一列索引树,则使用最后一列索引列的关键字在最后一列索引树中查找,查找到后返回对应的数据记录列表。如果是使用部分索引列进行查找,则在最后一列索引树中查找到的节点仍然是索引树,需要遍历该索引树返回的所有数据记录。
T型索引树的插入按照如下方式进行:
单树的插入算法如下:
1、插入总是从根节点开始。
2、如果输入关键字小于当前节点中包含的最小索引、当前节点没有左子树且当前节点没有满,则在当前节点中插入新索引(即该关键字);如果输入关键字小于当前节点中包含的最小元素、当前节点有左子树且当前节点已满,则在左子树中递归插入新索引(即该关键字)(如果没有左子树,则创建左子树),并且进行平衡,平衡算法与AVL树相同。
3、如果输入关键字大于当前节点中包含的最大索引、当前节点没有右子树且当前节点没有满,则在当前节点中插入新索引(即该关键字);如果输入关键字大于当前节点中包含的最大索引、当前节点有右子树且当前节点已满,则在右子树中递归插入新索引(即该关键字)(如果没有右子树,则创建右子树),并且进行平衡,平衡算法跟AVL树相同。
4、如果输入关键字大于等于当前节点中包含的最小索引且小于等于最大索引,则在当前节点中二分查找输入的关键字,如果存在,则在该关键字对应的T链表尾部增加新的节点,并将对应的数据记录插入记录区;如果不存在,则判断该节点上的索引数是否满,如果没满,则插入到该节点中;如果满了,则删除最小索引,将最小索引递归插入到当前子树中。
多列索引树的插入算法如下:
1、根据第一索引列的关键字查找第二列索引树,如果查找到,则根据第二索引列的关键字在第二列索引树中查找第三列索引树,如此类推,直到找到最后一列索引树为止。如果在查找第N列索引树时失败,则新建一棵索引树作为第N列索引树,并在前一列索引树中插入新节点,新节点指向新建索引树根节点,然后新建第N+1列索引树,直到新建最后一列索引树为止。
2、在最后一列索引树上插入新节点,新节点指向新分配的数据节点。
T型索引树的删除
1、删除总是从根节点开始。
2、如果输入关键字小于当前节点中包含的最小索引,则在左子树中递归删除,如果在左子树中删除了树节点,则需要重新平衡左子树。
3、如果输入关键字大于当前节点中包含的最大索引,则在右子树中递归删除,如果在右子树中删除了树节点,则需要重新平衡右子树。
4、如果输入关键字大于等于当前节点中包含的最小索引且小于等于最大索引,则在当前节点中二分查找输入关键字,如果不存在,则返回删除失败;如果存在,则删除该索引。
5、删除索引后,如果当前节点为空,则删除当前节点。
6、删除索引后,如果当前节点为half-leaf节点(左子树或右子树为叶子节点),则将叶子节点合并到当前节点,如果叶子节点合并后还有索引,则继续保留该叶子节点,否则删除叶子节点,重新平衡当前节点。
7、删除索引后,如果当前节点不是half-leaf节点且当前节点中包含的索引数小于下限值,则将右子树中的最小叶子节点或half-leaf节点中包含的最小索引移到本节点中,重新平衡当前节点。
8、返回删除元素指向的所有数据记录。
T型索引树的生成
1、从待插入数据记录中取到索引列的值作为T型索引树的索引,利用Google protocol buffers对数据记录序列化,并在共享内存表记录区中分配数据节点,然后逐条记录插入到T型索引树中
2、如果为单列索引,则直接插入到T型索引树中,节点中的各个索引指向新分配的数据记录。
3、如果为多列索引,则根据第一索引列的关键字查找第二列索引树,如果查找到,则根据第二索引列的关键字在第二列索引树中查找第三列索引树,如此类推,直到找到最后一列索引树为止。如果在查找第N列索引树时失败,则新建一棵索引树作为第N列索引树,并在前一列索引树中插入新节点,新value节点中的各个索引指向新建索引树根节点,然后新建第N+1列索引树,直到新建最后一列索引树为止。
4、在最后一列索引树上插入新节点,新节点中的各个索引指向新分配的数据记录。
由Google公司提供的开源工具protocol buffers是一个灵活、高效的对结构化数据进行序列化的自动化工具,相比xml,它更小、更灵活、更简单,在老的数据不做修改的前提下,可以对现有已经定义并使用的数据结构进行扩充,且不会影响现有数据。本发明使用protocal buffers的自解析以及编码功能保存内存表记录,在插入记录时,本发明首先从元数据区获取当前表的定义信息,然后根据定义信息对待插入数据记录进行protocol buffers编码,在查询返回结果集记录时,应用程序可以根据表定义信息对查询返回的记录集进行反序列化,由于protocol buffer编解码能力表现较好,且对数据有一定的压缩功能,使用它既不会对性能产生较大影响而且还节省内存空间。
本发明还提供了一种数据查询方法,用于在设置在共享内存中的虚拟存储模块中查找对应的数据记录,其中,所述虚拟存储模块包括元数据区和表数据区,所述元数据区中存储有元数据表,所述表数据区中设置有索引区和记录区,所述索引区中存储有至少一个散列索引链表,每一散列索引链表包含至少一个子链表,所述记录区中存储有至少一条数据记录。上述虚拟存储模块在初始化步骤中构建,该初始化步骤包括在启动时读取配置文件,据此基于共享内存创建所述虚拟存储模块。如上文所述,配置文件可采用例如但不限于XML格式。有关配置文件的内容已经在前文做了清楚的描述,因此此处不再赘述。
本发明提供的数据查询方法包括:
转发步骤,包括接收搜索请求并判断其所属类型,然后依据该搜索请求的类型转发该搜索请求;
散列搜索步骤,包括:
接收转发的单值搜索类型的搜索请求,提取其中包含的关键字,依据该关键字的类型在元数据表中查找对应的索引信息,并依据该索引信息在索引区中查找对应的散列索引链表;
对关键字进行散列计算并依据找到的散列索引链表中子链表的数量对散列计算结果进行取余计算,在所述散列索引链表中查找取余计算结果对应的子链表;在具体实现过程中,散列计算可采用例如但不限于CRC 32计算。
依据所述散列计算结果在所述子链表中查找匹配的索引;
依据所述索引在记录区中查找匹配的数据记录并返回。如上文所述,当通过散列索引查找到的数据记录不止一条时,需要以关键字作为原始索引在找到的数据记录中查找包含该关键字的数据记录并返回。
在具体实现过程中,索引区中还存储有至少一个T型索引树,所述方法还包括:
T树搜索步骤,包括:
接收转发的范围搜索类型的搜索请求,提取其中包含的搜索范围;
依据所述搜索范围对应的类型在元数据表中查找对应的索引信息,并依据该索引信息在索引区中查找对应的T型索引树;
依据所述搜索范围的上边界值和下边界值在T型索引树中查找匹配的索引;
依据找到的索引在记录区中查找匹配的数据记录并返回。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种数据缓存系统,其特征在于,包括:
虚拟存储模块,设置在共享内存中,包括元数据区和表数据区,所述元数据区中存储有元数据表,所述表数据区中设置有索引区和记录区,所述索引区中存储有至少一个散列索引链表,每一散列索引链表包含至少一个子链表,所述记录区中存储有至少一条数据记录;
转发模块,用于接收搜索请求并判断其所属操作类型,然后依据该搜索请求的类型转发该搜索请求;
散列搜索模块,用于:
接收转发模块转发的单值搜索类型的搜索请求,提取其中包含的关键字,依据该关键字的类型在元数据表中查找对应的索引信息,并依据该索引信息在索引区中查找对应的散列索引链表;
对关键字进行散列计算并依据找到的散列索引链表中子链表的数量对散列计算结果进行取余计算,在所述散列索引链表中查找取余计算结果对应的子链表;
依据所述散列计算结果在所述子链表中查找匹配的索引;
依据所述索引在记录区中查找匹配的数据记录并返回。
2.根据权利要求1所述的数据缓存系统,其特征在于,所述索引区中还存储有至少一个T型索引树,所述系统还包括:
T树搜索模块,用于:
接收转发模块转发的范围搜索类型的搜索请求,提取其中包含的搜索范围;
依据所述搜索范围对应的类型在元数据表中查找对应的索引信息,并依据该索引信息在索引区中查找对应的T型索引树;
依据所述搜索范围的上边界值和下边界值在T型索引树中查找匹配的索引;
依据找到的索引在记录区中查找匹配的数据记录并返回。
3.根据权利要求1或2所述的数据缓存系统,其特征在于,还包括:
初始化模块,用于在启动时读取配置文件,据此基于共享内存创建所述虚拟存储模块。
4.根据权利要求3所述的数据缓存系统,其特征在于,所述配置文件采用XML格式。
5.根据权利要求4所述的数据缓存系统,其特征在于,所述散列计算为CRC 32计算。
6.一种数据查询方法,其特征在于,用于在设置在共享内存中的虚拟存储模块中查找对应的数据记录,其中,所述虚拟存储模块包括元数据区和表数据区,所述元数据区中存储有元数据表,所述表数据区中设置有索引区和记录区,所述索引区中存储有至少一个散列索引链表,每一散列索引链表包含至少一个子链表,所述记录区中存储有至少一条数据记录,所述方法包括:
转发步骤,包括接收搜索请求并判断其所属类型,然后依据该搜索请求的类型转发该搜索请求;
散列搜索步骤,包括:
接收转发的单值搜索类型的搜索请求,提取其中包含的关键字,依据该关键字的类型在元数据表中查找对应的索引信息,并依据该索引信息在索引区中查找对应的散列索引链表;
对关键字进行散列计算并依据找到的散列索引链表中子链表的数量对散列计算结果进行取余计算,在所述散列索引链表中查找取余计算结果对应的子链表;
依据所述散列计算结果在所述子链表中查找匹配的索引;
依据所述索引在记录区中查找匹配的数据记录并返回。
7.根据权利要求6所述的数据查询方法,其特征在于,所述索引区中还存储有至少一个T型索引树,所述方法还包括:
T树搜索步骤,包括:
接收转发的范围搜索类型的搜索请求,提取其中包含的搜索范围;
依据所述搜索范围对应的类型在元数据表中查找对应的索引信息,并依据该索引信息在索引区中查找对应的T型索引树;
依据所述搜索范围的上边界值和下边界值在T型索引树中查找匹配的索引;
依据找到的索引在记录区中查找匹配的数据记录并返回。
8.根据权利要求6或7所述的数据查询方法,其特征在于,还包括:
初始化步骤,包括在启动时读取配置文件,据此基于共享内存创建所述虚拟存储模块。
9.根据权利要求8所述的数据查询方法,其特征在于,所述配置文件采用XML格式。
10.根据权利要求9所述的数据查询方法,其特征在于,所述散列计算为CRC 32计算。
CN 201010042737 2010-01-11 2010-01-11 一种数据缓存系统中的数据查询系统和数据查询方法 Expired - Fee Related CN102122285B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201010042737 CN102122285B (zh) 2010-01-11 2010-01-11 一种数据缓存系统中的数据查询系统和数据查询方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201010042737 CN102122285B (zh) 2010-01-11 2010-01-11 一种数据缓存系统中的数据查询系统和数据查询方法

Publications (2)

Publication Number Publication Date
CN102122285A true CN102122285A (zh) 2011-07-13
CN102122285B CN102122285B (zh) 2012-10-31

Family

ID=44250846

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201010042737 Expired - Fee Related CN102122285B (zh) 2010-01-11 2010-01-11 一种数据缓存系统中的数据查询系统和数据查询方法

Country Status (1)

Country Link
CN (1) CN102122285B (zh)

Cited By (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102542057A (zh) * 2011-12-29 2012-07-04 北京大学 基于固态硬盘的高维数据索引结构设计方法
CN102710774A (zh) * 2012-06-04 2012-10-03 深圳市宏电技术股份有限公司 数据传输方法及系统
CN102880704A (zh) * 2012-09-25 2013-01-16 上海证券交易所 一种新型的并发内存数据组织与访问方法
CN102929880A (zh) * 2011-08-10 2013-02-13 云壤(北京)信息技术有限公司 网络社区更新内容展现单元及展现方法
CN102937955A (zh) * 2011-11-29 2013-02-20 Ut斯达康通讯有限公司 一种基于MySQL双存储引擎的内存数据库实现方法
CN103246696A (zh) * 2013-03-21 2013-08-14 宁波公众信息产业有限公司 高并发数据库的访问方法及应用于多服务器系统的方法
CN103473314A (zh) * 2013-09-11 2013-12-25 北京思特奇信息技术股份有限公司 一种基于共享内存的键值对存储方法及装置
CN103559224A (zh) * 2013-10-18 2014-02-05 华为技术有限公司 一种对元数据对象进行散列的方法及装置
CN103995807A (zh) * 2013-02-16 2014-08-20 长沙中兴软创软件有限公司 一种基于Web架构下海量数据查询和二次处理的方法
CN104182508A (zh) * 2014-08-19 2014-12-03 华为技术有限公司 一种数据处理方法和数据处理装置
CN104243581A (zh) * 2014-09-15 2014-12-24 成都北纬航信网络科技有限责任公司 实现高内聚与低耦合的多级缓存方法及其系统
CN104391864A (zh) * 2014-10-24 2015-03-04 浪潮软件股份有限公司 一种便于一次性获取信息的非结构化数据存储方法
CN105117640A (zh) * 2015-07-10 2015-12-02 济南思尼特软件有限公司 一种用于刑侦的计算机内存中账号密码的提取方法
CN105302691A (zh) * 2015-10-20 2016-02-03 浪潮(北京)电子信息产业有限公司 一种元数据性能监控方法及系统
CN105589890A (zh) * 2014-11-05 2016-05-18 中国银联股份有限公司 内存共享框架系统
CN105893458A (zh) * 2015-02-12 2016-08-24 哈曼国际工业有限公司 媒体内容回放系统和方法
CN106227769A (zh) * 2016-07-15 2016-12-14 北京奇虎科技有限公司 数据存储方法及装置
CN103559300B (zh) * 2013-11-13 2017-06-13 曙光信息产业(北京)有限公司 数据的查询方法和查询装置
CN107992577A (zh) * 2017-12-04 2018-05-04 北京奇安信科技有限公司 一种哈希表数据冲突处理方法及装置
CN108984615A (zh) * 2018-06-12 2018-12-11 北京杰控科技有限公司 一种数据查询方法和系统、存储介质
CN109299111A (zh) * 2018-11-14 2019-02-01 郑州云海信息技术有限公司 一种元数据查询方法、装置、设备及计算机可读存储介质
CN109885570A (zh) * 2019-01-30 2019-06-14 南京邮电大学 一种辅助索引结合散列表的多维范围查询方法
CN110032366A (zh) * 2019-04-19 2019-07-19 北京奇艺世纪科技有限公司 一种代码定位方法及装置
CN110109894A (zh) * 2019-03-22 2019-08-09 新奥特(北京)视频技术有限公司 非关系型数据库的实现方法、装置、存储介质和设备
CN110597855A (zh) * 2019-08-14 2019-12-20 中山大学 一种数据存储方法、终端设备及计算机可读存储介质
CN110929103A (zh) * 2019-11-20 2020-03-27 车智互联(北京)科技有限公司 为数据集合构建索引的方法、数据查询方法及计算设备
CN111125261A (zh) * 2020-03-31 2020-05-08 四川新网银行股份有限公司 基于分布式缓存的数据传输方法
CN113760782A (zh) * 2021-08-23 2021-12-07 南京森根科技股份有限公司 一种可动态调节的环形缓存系统及其控制方法
CN115328904A (zh) * 2022-10-13 2022-11-11 中国电子科技集团公司第十五研究所 一种通过多层hash索引树过滤重复数据的方法和系统

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100468400C (zh) * 2005-09-30 2009-03-11 腾讯科技(深圳)有限公司 一种提高搜索信息速度的方法及系统
CN101082935B (zh) * 2007-07-06 2010-09-29 中兴通讯股份有限公司 一种内存数据的非唯一索引检索方法

Cited By (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102929880A (zh) * 2011-08-10 2013-02-13 云壤(北京)信息技术有限公司 网络社区更新内容展现单元及展现方法
CN102937955A (zh) * 2011-11-29 2013-02-20 Ut斯达康通讯有限公司 一种基于MySQL双存储引擎的内存数据库实现方法
CN102542057B (zh) * 2011-12-29 2013-10-16 北京大学 基于固态硬盘的高维数据索引结构设计方法
CN102542057A (zh) * 2011-12-29 2012-07-04 北京大学 基于固态硬盘的高维数据索引结构设计方法
CN102710774A (zh) * 2012-06-04 2012-10-03 深圳市宏电技术股份有限公司 数据传输方法及系统
CN102710774B (zh) * 2012-06-04 2014-12-17 深圳市宏电技术股份有限公司 数据传输方法及系统
CN102880704A (zh) * 2012-09-25 2013-01-16 上海证券交易所 一种新型的并发内存数据组织与访问方法
CN103995807A (zh) * 2013-02-16 2014-08-20 长沙中兴软创软件有限公司 一种基于Web架构下海量数据查询和二次处理的方法
CN103995807B (zh) * 2013-02-16 2018-01-16 长沙中兴软创软件有限公司 一种基于Web架构下海量数据查询和二次处理的方法
CN103246696A (zh) * 2013-03-21 2013-08-14 宁波公众信息产业有限公司 高并发数据库的访问方法及应用于多服务器系统的方法
CN103473314A (zh) * 2013-09-11 2013-12-25 北京思特奇信息技术股份有限公司 一种基于共享内存的键值对存储方法及装置
CN103559224A (zh) * 2013-10-18 2014-02-05 华为技术有限公司 一种对元数据对象进行散列的方法及装置
CN103559300B (zh) * 2013-11-13 2017-06-13 曙光信息产业(北京)有限公司 数据的查询方法和查询装置
CN104182508A (zh) * 2014-08-19 2014-12-03 华为技术有限公司 一种数据处理方法和数据处理装置
CN104182508B (zh) * 2014-08-19 2018-10-30 华为技术有限公司 一种数据处理方法和数据处理装置
CN104243581B (zh) * 2014-09-15 2017-11-24 成都北纬航信网络科技有限责任公司 实现高内聚与低耦合的多级缓存方法及其系统
CN104243581A (zh) * 2014-09-15 2014-12-24 成都北纬航信网络科技有限责任公司 实现高内聚与低耦合的多级缓存方法及其系统
CN104391864A (zh) * 2014-10-24 2015-03-04 浪潮软件股份有限公司 一种便于一次性获取信息的非结构化数据存储方法
CN105589890B (zh) * 2014-11-05 2019-06-14 中国银联股份有限公司 内存共享框架系统
CN105589890A (zh) * 2014-11-05 2016-05-18 中国银联股份有限公司 内存共享框架系统
CN105893458A (zh) * 2015-02-12 2016-08-24 哈曼国际工业有限公司 媒体内容回放系统和方法
CN105117640A (zh) * 2015-07-10 2015-12-02 济南思尼特软件有限公司 一种用于刑侦的计算机内存中账号密码的提取方法
CN105302691A (zh) * 2015-10-20 2016-02-03 浪潮(北京)电子信息产业有限公司 一种元数据性能监控方法及系统
CN106227769A (zh) * 2016-07-15 2016-12-14 北京奇虎科技有限公司 数据存储方法及装置
CN106227769B (zh) * 2016-07-15 2019-11-26 北京奇虎科技有限公司 数据存储方法及装置
CN107992577B (zh) * 2017-12-04 2020-08-11 奇安信科技集团股份有限公司 一种哈希表数据冲突处理方法及装置
CN107992577A (zh) * 2017-12-04 2018-05-04 北京奇安信科技有限公司 一种哈希表数据冲突处理方法及装置
CN108984615A (zh) * 2018-06-12 2018-12-11 北京杰控科技有限公司 一种数据查询方法和系统、存储介质
CN108984615B (zh) * 2018-06-12 2023-04-07 北京杰控科技有限公司 一种数据查询方法和系统、存储介质
CN109299111A (zh) * 2018-11-14 2019-02-01 郑州云海信息技术有限公司 一种元数据查询方法、装置、设备及计算机可读存储介质
CN109885570A (zh) * 2019-01-30 2019-06-14 南京邮电大学 一种辅助索引结合散列表的多维范围查询方法
CN110109894A (zh) * 2019-03-22 2019-08-09 新奥特(北京)视频技术有限公司 非关系型数据库的实现方法、装置、存储介质和设备
CN110032366A (zh) * 2019-04-19 2019-07-19 北京奇艺世纪科技有限公司 一种代码定位方法及装置
CN110032366B (zh) * 2019-04-19 2022-07-22 北京奇艺世纪科技有限公司 一种代码定位方法及装置
CN110597855B (zh) * 2019-08-14 2022-03-29 中山大学 一种数据查询方法、终端设备及计算机可读存储介质
CN110597855A (zh) * 2019-08-14 2019-12-20 中山大学 一种数据存储方法、终端设备及计算机可读存储介质
CN110929103A (zh) * 2019-11-20 2020-03-27 车智互联(北京)科技有限公司 为数据集合构建索引的方法、数据查询方法及计算设备
CN110929103B (zh) * 2019-11-20 2023-04-11 车智互联(北京)科技有限公司 为数据集合构建索引的方法、数据查询方法及计算设备
CN111125261A (zh) * 2020-03-31 2020-05-08 四川新网银行股份有限公司 基于分布式缓存的数据传输方法
CN113760782A (zh) * 2021-08-23 2021-12-07 南京森根科技股份有限公司 一种可动态调节的环形缓存系统及其控制方法
CN115328904A (zh) * 2022-10-13 2022-11-11 中国电子科技集团公司第十五研究所 一种通过多层hash索引树过滤重复数据的方法和系统

Also Published As

Publication number Publication date
CN102122285B (zh) 2012-10-31

Similar Documents

Publication Publication Date Title
CN102122285B (zh) 一种数据缓存系统中的数据查询系统和数据查询方法
CN109165224B (zh) 一种在区块链数据库上针对关键字key的索引方法
US11283616B2 (en) Method for index-based and integrity-assured search in a blockchain
JP3844370B2 (ja) 多次元データを格納しかつアクセスするコンピュータ方法及び格納構造
US8924373B2 (en) Query plans with parameter markers in place of object identifiers
US20120215752A1 (en) Index for hybrid database
US11216516B2 (en) Method and system for scalable search using microservice and cloud based search with records indexes
CN101071442A (zh) 分布式索引文件的检索方法、检索系统及检索服务器
KR20040036201A (ko) Xml 데이터 검색을 위한 질의 처리 방법
US10275486B2 (en) Multi-system segmented search processing
US10496648B2 (en) Systems and methods for searching multiple related tables
US11755555B2 (en) Storing an ordered associative array of pairs using an append-only storage medium
CN116541427B (zh) 数据查询方法、装置、设备及存储介质
CN107247734A (zh) 一种分布式数据库主键生成方法及系统
CN105447166A (zh) 一种基于关键字查找信息的方法及系统
CN101789027A (zh) 一种基于dbms的元数据管理方法和元数据服务器
CN101833511B (zh) 数据管理方法、装置和系统
CN113297266B (zh) 数据处理方法、装置、设备及计算机存储介质
Qin et al. Efficient XML query and update processing using a novel prime-based middle fraction labeling scheme
Hsu et al. UCIS-X: an updatable compact indexing scheme for efficient extensible markup language document updating and query evaluation
CN111737267B (zh) 基于HBase的索引系统及查询加速方法
CN102597969A (zh) 带属性的键值存储的数据库管理装置及其键值存储结构的高速缓存装置
Kanda et al. Practical rearrangement methods for dynamic double‐array dictionaries
KR102013839B1 (ko) 데이터베이스 관리 방법, 시스템 및 데이터베이스 트리 구조
CN110321346A (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
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20121031

Termination date: 20140111