CN109086133B - 在内存中维护数据的方法和系统 - Google Patents

在内存中维护数据的方法和系统 Download PDF

Info

Publication number
CN109086133B
CN109086133B CN201810735798.2A CN201810735798A CN109086133B CN 109086133 B CN109086133 B CN 109086133B CN 201810735798 A CN201810735798 A CN 201810735798A CN 109086133 B CN109086133 B CN 109086133B
Authority
CN
China
Prior art keywords
data
value
node
skip list
keyword
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
CN201810735798.2A
Other languages
English (en)
Other versions
CN109086133A (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.)
4Paradigm Beijing Technology Co Ltd
Original Assignee
4Paradigm Beijing Technology 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 4Paradigm Beijing Technology Co Ltd filed Critical 4Paradigm Beijing Technology Co Ltd
Priority to CN201810735798.2A priority Critical patent/CN109086133B/zh
Priority to CN201910973093.9A priority patent/CN110704194A/zh
Publication of CN109086133A publication Critical patent/CN109086133A/zh
Priority to PCT/CN2019/094365 priority patent/WO2020007288A1/zh
Application granted granted Critical
Publication of CN109086133B publication Critical patent/CN109086133B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

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

Abstract

提供了管理内存数据的方法和系统、在内存中维护数据的方法和系统、以及与提供的方法和系统对应的计算机可读介质和计算装置。所述管理内存数据的方法包括:设置包括多个分片的数据表,其中,每个分片分别对应第一级跳表;将第一级跳表设置为用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点;将第二级跳表设置为用于存储以所述数据的第二属性值为关键字且与该关键字对应的值包括所述数据的至少一个属性值的节点。根据本发明,可降低读/写数据的耗时,并可提高单位时间内同时执行的数据写入任务和/或数据查询任务的数量。

Description

在内存中维护数据的方法和系统
技术领域
本发明总体说来涉及内存数据管理和维护领域,更具体地讲,涉及一种管理内存数据的方法和系统、一种在内存中维护数据的方法和系统以及对应的计算机可读介质和计算装置。
背景技术
现有的数据库包括关系型数据库和非关系型数据库。诸如MySQL和SQL Server的关系型数据库主要用于对关系型数据进行管理和维护。诸如Redis 和MongoDB的非关系型数据库主要用于对非关系型数据进行管理和维护。关系型数据意指基于关系模型(Relational Model,简称为RM)的数据。非关系型数据意指非基于关系模型的数据。
为了对时间序列数据进行处理,提出了诸如InfluxDB的时间序列数据库 (TimeSeries Database,简称为TSDB)。为了对内存中的数据进行管理,提出了诸如VoltDB的内存数据库。
然而,在需要快速处理数据和同时执行大量数据写入任务和/或数据查询任务的特定场景下,包括以上列举出的数据库的传统的数据库具有读/写数据的耗时长的问题,还具有单位时间内能够同时执行的数据写入任务和/或数据查询任务的数量少的问题。
发明内容
本发明的示例性实施例在于提供一种管理内存数据的方法和系统、一种在内存中维护数据的方法和系统、以及与提供的方法和系统对应的计算机可读介质和计算装置,以解决现有技术存在的读/写数据的耗时长的问题,以及单位时间内能够同时执行的数据写入任务和/或数据查询任务的数量少的问题。
根据本发明的示例性实施例,提供一种管理内存数据的方法。所述管理内存数据的方法包括:设置包括多个分片的数据表,其中,每个分片分别对应第一级跳表;将第一级跳表设置为用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点;将第二级跳表设置为用于存储以所述数据的第二属性值为关键字且与该关键字对应的值包括所述数据的至少一个属性值的节点。
根据本发明的另一示例性实施例,提供一种在内存中维护数据的方法。所述在内存中维护数据的方法包括:根据待插入的数据的第一属性值来确定包括多个分片的数据表中的与待插入的数据对应的分片,其中,每个分片分别对应第一级跳表,第一级跳表用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点;从与确定的分片对应的第一级跳表中查找以待插入的数据的第一属性值为关键字的节点;在从第一级跳表中查找到以待插入的数据的第一属性值为关键字的节点的情况下,在查找到的节点中的指针或对象所指示的第二级跳表中添加以待插入的数据的第二属性值为关键字且与该关键字对应的值包括待插入的数据的至少一个属性值的节点。
可选地,确定与待插入的数据对应的分片的步骤包括:计算与待插入的数据的第一属性值对应的哈希值;获得计算出的哈希值除以所述数据表中的分片总数所得的余数;将与获得的余数对应的分片确定为与待插入的数据对应的分片。
可选地,所述多个分片中的每个分片中存储有指示对应的第一级跳表的指针或对象。
可选地,所述在内存中维护数据的方法还包括:在未能从第一级跳表中查找到以待插入的数据的第一属性值为关键字的节点的情况下,创建第二级跳表,在第一级跳表中创建以待插入的数据的第一属性值为关键字且以指示创建的第二级跳表的指针或对象为与该关键字对应的值的节点,并在创建的第二级跳表中添加以待插入的数据的第二属性值为关键字且与该关键字对应的值包括待插入的数据的所述至少一个属性值的节点。
可选地,待插入的数据的所述至少一个属性值包括待插入的数据的第一属性值和/或第二属性值,或者待插入的数据的所述至少一个属性值既不包括待插入的数据的第一属性值也不包括待插入的数据的第二属性值,其中,添加到第二级跳表中的节点中的与待插入的数据的第二属性值对应的值包括通过以下方式之一获得的字符串:按照预定的字符串合并规则对所述至少一个属性值进行合并,按照预定的JSON格式对所述至少一个属性值进行序列化,按照预定的ProtocolBuffer格式对所述至少一个属性值进行序列化,按照预定义的Schema格式对所述至少一个属性值进行序列化。
可选地,所述在内存中维护数据的方法还包括:接收待查询的数据的第一属性值和关于第二属性值的取值范围;根据待查询的数据的第一属性值来确定所述数据表中的与待查询的数据对应的分片;从与确定的分片对应的第一级跳表中查找以待查询的数据的第一属性值为关键字的节点;从查找到的节点中的指针或对象所指示的第二级跳表中取出关键字在取值范围内的节点中的对应的所述至少一个属性值。
可选地,从查找到的节点中的指针或对象所指示的第二级跳表中取出关键字在取值范围内的节点中的对应的所述至少一个属性值的步骤包括:从查找到的节点中的指针或对象所指示的第二级跳表的节点中取出与在取值范围内的关键字对应的值;通过以下方式之一来获得待查询的数据的所述至少一个属性值:按照预定的字符串拆分规则对取出的值进行拆分,按照预定的 JSON格式对取出的值进行反序列化,按照预定的ProtocolBuffer格式对取出的值进行反序列化,按照预定义的Schema格式对取出的值进行反序列化。
可选地,确定与待查询的数据对应的分片的步骤包括:计算与待查询的数据的第一属性值对应的哈希值;获得计算出的哈希值除以所述数据表中的分片总数所得的余数;将与获得的余数对应的分片确定为与待查询的数据对应的分片。
可选地,所述待插入的数据或待查询的数据是时序型数据,所述第二属性值为时间戳值。
可选地,所述取值范围指定时间戳值的起始值和终止值或者指定时间戳值的终止值。
可选地,在第二级跳表中添加节点的步骤包括:按照时间戳值指示的时间添加节点,使得第二级跳表中的节点按照时间从近及远的顺序排列。
可选地,所述在内存中维护数据的方法还包括:设置与第二级跳表对应的节点数量阈值,其中,从查找到的节点中的指针或对象所指示的第二级跳表中取出关键字在取值范围内的节点中的对应的所述至少一个属性值的步骤包括:从查找到的节点中的指针或对象所指示的第二级跳表中,按照从近及远的顺序取出关键字在取值范围内且数量不超过所述节点数量阈值的节点中的对应的所述至少一个属性值。
可选地,所述在内存中维护数据的方法还包括:设置与第二级跳表对应的节点数量阈值;以预定周期遍历第一级跳表和第二级跳表,当遍历到的第二级跳表中的节点数量超过节点数量阈值时,根据该第二级跳表中的节点的排列顺序,删除排在与节点数量阈值对应的节点之后的所有节点。
可选地,所述在内存中维护数据的方法还包括:设置过期期限长度;以预定周期遍历第一级跳表和第二级跳表,通过定位时间戳值达到所述过期期限长度的节点来整体删除在该节点之后的节点。
根据本发明的另一示例性实施例,提供一种管理内存数据的系统。所述管理内存数据的系统包括:数据表设置单元,用于设置包括多个分片的数据表,其中,每个分片分别对应第一级跳表;第一级跳表设置单元,用于将第一级跳表设置为用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点;第二级跳表设置单元,用于将第二级跳表设置为用于存储以所述数据的第二属性值为关键字且与该关键字对应的值包括所述数据的至少一个属性值的节点。
根据本发明的另一示例性实施例,提供在内存中维护数据的系统。所述在内存中维护数据的系统包括:分片确定单元,用于根据待插入的数据的第一属性值来确定包括多个分片的数据表中的与待插入的数据对应的分片,其中,每个分片分别对应第一级跳表,第一级跳表用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点;查找单元,用于从与确定的分片对应的第一级跳表中查找以待插入的数据的第一属性值为关键字的节点;数据添加单元,用于在从第一级跳表中查找到以待插入的数据的第一属性值为关键字的节点的情况下,在查找到的节点中的指针或对象所指示的第二级跳表中添加以待插入的数据的第二属性值为关键字且与该关键字对应的值包括待插入的数据的至少一个属性值的节点。
可选地,分片确定单元计算与待插入的数据的第一属性值对应的哈希值;获得计算出的哈希值除以所述数据表中的分片总数所得的余数;将与获得的余数对应的分片确定为与待插入的数据对应的分片。
可选地,所述多个分片中的每个分片中存储有指示对应的第一级跳表的指针或对象。
可选地,在未能从第一级跳表中查找到以待插入的数据的第一属性值为关键字的节点的情况下,数据添加单元创建第二级跳表,在第一级跳表中创建以待插入的数据的第一属性值为关键字且以指示创建的第二级跳表的指针或对象为与该关键字对应的值的节点,并在创建的第二级跳表中添加以待插入的数据的第二属性值为关键字且与该关键字对应的值包括待插入的数据的所述至少一个属性值的节点。
可选地,待插入的数据的所述至少一个属性值包括待插入的数据的第一属性值和/或第二属性值,或者待插入的数据的所述至少一个属性值既不包括待插入的数据的第一属性值也不包括待插入的数据的第二属性值,其中,添加到第二级跳表中的节点中的与待插入的数据的第二属性值对应的值包括通过以下方式之一获得的字符串:按照预定的字符串合并规则对所述至少一个属性值进行合并,按照预定的JSON格式对所述至少一个属性值进行序列化,按照预定的ProtocolBuffer格式对所述至少一个属性值进行序列化,按照预定义的Schema格式对所述至少一个属性值进行序列化。
可选地,所述在内存中维护数据的系统还包括:输入接收单元和数据获取单元,其中,输入接收单元接收待查询的数据的第一属性值和关于第二属性值的取值范围,分片确定单元根据待查询的数据的第一属性值来确定所述数据表中的与待查询的数据对应的分片,数据获取单元从与确定的分片对应的第一级跳表中查找以待查询的数据的第一属性值为关键字的节点,从查找到的节点中的指针或对象所指示的第二级跳表中取出关键字在取值范围内的节点中的对应的所述至少一个属性值。
可选地,数据获取单元从查找到的节点中的指针或对象所指示的第二级跳表的节点中取出与在取值范围内的关键字对应的值,通过以下方式之一来获得待查询的数据的所述至少一个属性值:按照预定的字符串拆分规则对取出的值进行拆分,按照预定的JSON格式对取出的值进行反序列化,按照预定的ProtocolBuffer格式对取出的值进行反序列化,按照预定义的Schema格式对取出的值进行反序列化。
可选地,,分片确定单元计算与待查询的数据的第一属性值对应的哈希值,获得计算出的哈希值除以所述数据表中的分片总数所得的余数,将与获得的余数对应的分片确定为与待查询的数据对应的分片。
可选地,所述待插入的数据或待查询的数据是时序型数据,所述第二属性值为时间戳值。
可选地,所述取值范围指定时间戳值的起始值和终止值或者指定时间戳值的终止值。
可选地,数据添加单元按照时间戳值指示的时间添加节点,使得第二级跳表中的节点按照时间从近及远的顺序排列。
可选地,在内存中维护数据的系统还包括:节点数量阈值设置单元,用于设置与第二级跳表对应的节点数量阈值,其中,数据获取单元从查找到的节点中的指针或对象所指示的第二级跳表中,按照从近及远的顺序取出关键字在取值范围内且数量不超过所述节点数量阈值的节点中的对应的所述至少一个属性值。
可选地,在内存中维护数据的系统还包括:节点数量阈值设置单元和节点删除单元,其中,节点数量阈值设置单元设置与第二级跳表对应的节点数量阈值,查找单元以预定周期遍历第一级跳表和第二级跳表,当遍历到的第二级跳表中的节点数量超过节点数量阈值时,节点删除单元根据该第二级跳表中的节点的排列顺序,删除排在与节点数量阈值对应的节点之后的所有节点。
可选地,在内存中维护数据的系统还包括:过期期限长度设置单元和数据删除单元,其中,过期期限长度设置单元设置过期期限长度,查找单元以预定周期遍历第一级跳表和第二级跳表,数据删除单元整体删除时间戳值达到所述过期期限长度的节点之后的节点。
根据本发明的另一示例性实施例,提供一种计算机可读介质在所述计算机可读介质上记录有用于执行如上所述的管理内存数据的方法的计算机程序。
根据本发明的另一示例性实施例,提供一种计算装置,包括存储部件和处理器,其中,存储部件中存储有计算机可执行指令集合,当所述计算机可执行指令集合被所述处理器执行时,执行如上所述的管理内存数据的方法。
根据本发明的另一示例性实施例,提供一种计算机可读介质,其中,在所述计算机可读介质上记录有用于执行如上所述的在内存中维护数据的方法的计算机程序。
根据本发明的另一示例性实施例,提供一种计算装置,包括存储部件和处理器,其中,存储部件中存储有计算机可执行指令集合,当所述计算机可执行指令集合被所述处理器执行时,执行如上所述的在内存中维护数据的方法。
根据本发明示例性实施例的方法、系统、计算机可读介质及计算装置,可设置第一级跳表和第二级跳表,第一级跳表中存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与所述关键字对应的值的节点,第二级跳表中存储以数据的第二属性值为关键字的节点,由此可利用预设的与第一属性值对应的关键字和与第二属性值对应的关键字快速定位到第二级跳表中的节点,从而可提高数据的读/写速度;还设置多个分片和每个分片对应的第一级跳表,由此可通过对所述多个分片进行并行处理来提高单位时间内能够同时执行的数据写入任务和/或数据查询任务的数量。
将在接下来的描述中部分阐述本发明总体构思另外的方面和/或优点,还有一部分通过描述将是清楚的,或者可以经过本发明总体构思的实施而得知。
附图说明
通过下面结合示例性地示出实施例的附图进行的描述,本发明示例性实施例的上述和其他目的和特点将会变得更加清楚,其中:
图1示出根据本发明示例性实施例的数据表的示意图;
图2示出根据本发明示例性实施例的管理内存数据的方法的流程图;
图3示出根据本发明示例性实施例的在内存中插入数据的操作的流程图;
图4示出根据本发明示例性实施例的在内存中查询数据的操作的流程图;
图5示出根据本发明示例性实施例的管理内存数据的系统的框图;
图6示出根据本发明示例性实施例的在内存中维护数据的系统的框图。
具体实施方式
现将详细参照本发明的实施例,所述实施例的示例在附图中示出,其中,相同的标号始终指的是相同的部件。以下将通过参照附图来说明所述实施例,以便解释本发明。
在本发明的示例性实施例中涉及的第一级跳表和第二级跳表为skiplist,也被称为跳跃表。
图1示出根据本发明示例性实施例的数据表的示意图。如图1中所示,根据本发明示例性实施例的数据表包括分片0至分片n,其中,n为大于1的自然数。这些分片中的每个分片对应一个第一级跳表。图1中示出了与分片 0对应的第一级跳表,与分片0对应的第一级跳表包括节点11至节点1m,其中,m为自然数。每个分片中可存储指示对应的第一级跳表的指针或对象,以便于定位到与分片对应的第一级跳表。
第一级跳中的每个节点可对应一个第二级跳表。如图1中所示,与节点 11对应的第二级跳表包括节点41至节点4k,与节点12对应的第二级跳表包括节点31至节点3j,与节点1m对应的第二级跳表包括节点21至节点2i,其中,i、j、k为自然数。第一级跳表的每个节点中可存储指示对应的第二级跳表的指针或对象,以便于定位到与第一级跳表的节点对应的第二级跳表。
可在跳表的节点中设置键值(key-value)对。具体地,对于第一级跳表的节点,可将数据的第一属性值设置为关键字(key),并将指示第二级跳表的指针或对象设置为与所述关键字对应的值(value);对于第二级跳表中的节点,可将所述数据的第二属性值设置为关键字,并且与关键字对应的值可用于存储数据的至少一个属性值。
作为示例,所述至少一个属性值包括所述数据的第一属性值和/或第二属性值,或者所述至少一个属性值既不包括所述数据的第一属性值也不包括所述数据的第二属性值。
另外,在第一级跳表的节点中可存储有指示该第一级跳表中的另一节点的指针或对象。在第二级跳表的节点中也可存储有指示该第二级跳表中的另一节点的指针或对象。对于第一级跳表或第二级跳表,当跳表中已经存在节点时,除了尾部节点之外的每个节点中存储有一个指示与该节点同属于一个跳表的节点的对象或指针,以便使跳表形成链状结构。当向第一个节点和第二个节点之间插入第三个节点时,需要将第一个节点中指示第二个节点的指针或对象改变为指示第三个节点,并在第三个节点中利用指针或对象指示第二个节点。
图2示出根据本发明示例性实施例的管理内存数据的方法的流程图。如图2中所示,根据本发明示例性实施例的管理内存数据的方包括步骤S101至步骤S103。
在步骤S101,设置包括多个分片的数据表,其中,每个分片分别对应第一级跳表。可按照在内存中设置数组的方式在内存中设置所述多个分片,随后,可为每个分片设置对应的第一级跳表,最初设置的第一级跳表可为空跳表,所述空跳表中不存在节点。可在所述多个分片中的每个分片中存储指示对应的第一级跳表的指针或对象,从而可通过指针或对象定位到对应的第一级跳表。
在步骤S102,将第一级跳表设置为用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点。第一级跳表的每个节点中存储有键值对,其中,数据的第一属性值为作为关键字,指针或对象作为与关键字对应的值。在步骤S103,将第二级跳表设置为用于存储以所述数据的第二属性值为关键字且与该关键字对应的值包括所述数据的至少一个属性值的节点。第二级跳表的每个节点中也存储有键值对,其中,第二属性值作为关键字,与关键字对应的值包括数据的至少一个属性值。当所述数据为银行交易数据时,第一属性值可为卡号,第二属性值可为时间戳值,与时间戳值对应的值可以包括交易金额值、交易地点或销售点(Point of Sale,简称为POS)编号中的至少一个。如下的表1示出了根据本发明的示例性实施例的数据:
表1
卡号 时间戳值 交易金额值 交易地点 POS编号
6222XXXX01 2018052814520505 100 北京上地xx路 10xxx
6222XXXX01 2018052815520505 50 北京西二旗xx店 20xxx
6222XXXX02 2018052811520505 1000 南京鼓楼区xxx 30xxx
如表1中所示,每条数据可包括如下属性值:卡号、时间戳值、交易金额值、交易地点、以及POS编号,表1中包括3条数据。
作为示例,数据的所述至少一个属性值包括的数据的第一属性值和/或第二属性值,或者数据的所述至少一个属性值既不包括待数据的第一属性值也不包括数据的第二属性值。添加到第二级跳表中的节点中的与数据的第二属性值对应的值包括通过以下方式之一获得的字符串:按照预定的字符串合并规则对所述至少一个属性值进行合并,按照预定的JSON(诸如,被称作JS 对象表示的JavaScript Object Notation)格式对所述至少一个属性值进行序列化,按照预定的ProtocolBuffer格式对所述至少一个属性值进行序列化,按照预定义的Schema格式对所述至少一个属性值进行序列化。
上述的分片、第一级跳表和第二级跳表可设置在内存中。通过如上所述的方式设置第一级跳表和第二级跳表,可设置分片、第一级跳表和第二级跳表之间的对应关系,可基于设置的对应关系对内存中的数据进行管理和维护。将在以下的示例性实施例中描述在内存中维护数据的操作。
图3示出根据本发明示例性实施例的在内存中插入数据的操作的流程图。如图3中所示,根据本发明示例性实施例的在内存中维护数据的操作包括步骤S201至步骤S203。
作为示例,可通过put(table_name,key,ts,value)的接口形式来进行插入,其中,table_name用于限定将插入数据的数据表的名称,key用于限定待插入的数据的第一属性值,ts用于限定待插入的数据的第二属性值,value 用于限定待插入的数据的至少一个属性值(作为示例,该value可以是按照特定规则通过对所述至少一个属性值进行编码(例如,合并或序列化)而得到的值)。
作为示例,还可通过put(table_name,key,ts,field_1,field_1类型, field_2,field_2类型,……,field_n,field_n类型)的接口形式来进行插入,其中,table_name用于限定将插入数据的数据表的名称,key用于限定待插入的数据的第一属性值,ts用于限定待插入的数据的第二属性值,field_1,field_1 类型,field_2,field_2类型,……,field_n,field_n类型用于限定待插入的数据的n个属性值(Schema格式),n为自然数。
在步骤S201,根据待插入的数据的第一属性值来确定包括多个分片的数据表中的与待插入的数据对应的分片,其中,每个分片分别对应第一级跳表,第一级跳表用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点。
在本发明的示例性实施例中,可接收待插入的数据,例如,如表1中所示的银行交易数据。银行交易数据可包括如下属性值:卡号、时间戳值、交易金额值、交易地点和POS编号。可从内存数据库中选择待插入的数据将被插入的数据表。选择的数据表中存储有多个分片。
可根据如下方式选择与待插入的数据对应的分片:计算与待插入的数据的第一属性值对应的哈希值;获得计算出的哈希值除以所述数据表中的分片总数所得的余数;将与获得的余数对应的分片确定为与待插入的数据对应的分片。可使用哈希函数对第一属性值进行计算,以获得哈希值。例如,使用的哈希函数可以是由Austin Appleby提出的哈希函数Murmurhash。当然,本发明并不对使用的哈希函数进行限制,其他哈希函数也可用于哈希值的计算。参照图1,数据表可包括分片0至分片n,如果余数是0,则分片0与待插入的数据对应;如果余数是h(0<h≤n),则分片h与待插入的数据对应。
作为示例,可通过指针或对象将分片与第一级跳表进行关联。也就是说,数据表的多个分片中的每个分片中存储有指示对应的第一级跳表的指针或对象。所述对象与面向对象(Object Oriented,简称为OO)编程技术中涉及的对象类似。通过分片中存储的指针或对象,可定位与该分片对应的第一级跳表。
在步骤S202,从与确定的分片对应的第一级跳表中查找以待插入的数据的第一属性值为关键字的节点。
在步骤S203,在从第一级跳表中查找到以待插入的数据的第一属性值为关键字的节点的情况下,在查找到的节点中的指针或对象所指示的第二级跳表中添加以待插入的数据的第二属性值为关键字且与该关键字对应的值包括待插入的数据的至少一个属性值的节点。
作为示例,所述待插入的数据是时序型数据,所述第二属性值为时间戳值。
作为示例,如果在建立了与确定的分片对应的第一级跳表之后,未在该第一级跳表中插入过以待插入的数据的第一属性值为关键字的节点,则步骤 S202的查找的结果为空。在这种情况下,可创建第二级跳表,在第一级跳表中创建以待插入的数据的第一属性值为关键字且以指示创建的第二级跳表的指针或对象为与该关键字对应的值的节点。随后,可在创建的第二级跳表中添加以待插入的数据的第二属性值为关键字且与该关键字对应的值包括待插入的数据的至少一个属性值的节点。
以待插入的数据为表1中的第1条数据为例,在步骤S201,假设根据卡号值“6222XXXX01”确定对应的分片为分片0。在步骤S202,参照图1,从与分片0对应的第一级跳表中查找以“6222XXXX01”为关键字的节点。例如,查找到节点11。基于此,可确定与节点11对应的第二级跳表包括节点 41至节点4k。
作为示例,待插入的数据的所述至少一个属性值包括待插入的数据的第一属性值和/或第二属性值,或者待插入的数据的所述至少一个属性值既不包括待插入的数据的第一属性值也不包括待插入的数据的第二属性值,其中,添加到第二级跳表中的节点中的与待插入的数据的第二属性值对应的值包括通过以下方式之一获得的字符串:按照预定的字符串合并规则对所述至少一个属性值进行合并,按照预定的JSON格式对所述至少一个属性值进行序列化,按照预定的ProtocolBuffer格式对所述至少一个属性值进行序列化,按照预定义的Schema格式对所述至少一个属性值进行序列化。
作为示例,预定的字符串合并规则包括按照特定符号(例如,“|”)合并。例如,可根据预先设置的符号例如“|”,将交易金额值、交易地点值、POS 编号值合并为字符串“100|北京上地xx路|10xxx”,设置以“2018052814520505”为关键字,以“100|北京上地xx路|10xxx”为与关键字对应的值的节点4g(g 为自然数),并将设置的节点4g插入到第二级跳表中,例如,插入到节点41 和节点42之间。除了按照预定的字符串合并规则对所述至少一个属性值进行合并的方式获得字符串之外,上述利用JSON格式、ProtocolBuffer格式和 Schema格式获得字符串以作为第二级跳表的节点中的与关键字对应的值的方式也是可行的。当然,以上描述仅仅作为示例而不应该被视为限制。
作为示例,在第二级跳表中添加节点的步骤包括:按照时间戳值指示的时间添加节点,使得第二级跳表中的节点按照时间从近及远的顺序排列。可通过比较时间戳值来确定时间的远近,与较大的时间戳值对应的时间比与较小的时间戳值对应的时间近。因此,在第二级跳表中,可将时间戳值较大的节点排列在时间戳值较小的节点之前。
以待插入的数据为表1中的第1条数据至第3条数据作为示例进行说明。第1条数据和第2条数据具有相同的卡号,因此,这两条数据中对应于同一个第二级跳表。在该第二级跳表中,当第1条数据被添加之后,第2条数据的时间戳值比第1条数据的时间戳值大,因此,将与第2条数据对应的节点添加到与第1条数据对应的节点之前。在该第二级跳表中,插入以“2018052814520505”为关键字且以“100|北京上地xx路|10xxx”为与关键字对应的值的节点4g,并节点4g之前插入以“2018052815520505”为关键字且以“50|北京西二旗xx店|20xxx”为与关键字对应的值的节点。
在上述示例中,根据卡号值“6222XXXX02”确定与第3条数据对应的分片为分片1,根据分片1中存储的指针或对象确定与分片1对应的第一级跳表(图1中未示出与分片1对应的第一级跳表)。假设未从与分片1对应的第一级跳表中查找到以“6222XXXX02”为关键字的节点,则创建一个节点和一个第二级跳表,将以“6222XXXX02”为关键字且以指示创建的所述一个第二级跳表的指针或对象为与关键字对应的值的节点添加到创建的所述一个第二级跳表中。随后,在创建的所述一个第二级跳表中添加以“2018052811520505”为关键字,且以“1000|南京鼓楼区xxx|30xxx”为与该关键字对应的值的节点。
图4示出根据本发明示例性实施例的在内存中查询数据的操作的流程图。如图4中所示,根据本发明示例性实施例的在内存中查询数据的操作包括步骤S301至步骤S304。
作为示例,可通过scan(table_name,key,start_time,end_time)的接口形式来进行查询,其中,table_name用于限定从中查询数据的数据表的名称,key用于限定待查询的数据的第一属性值,start_time和end_time用于限定待查询的数据的取值范围,例如,起始时间和终止时间。
作为示例,可通过get(table_name,key,ts)的接口形式来进行查询,其中,table_name用于限定从中查询数据的数据表的名称,key用于限定待查询的数据的第一属性值,ts用于限定待查询的数据的取值范围,例如,ts用于限定待查询的数据的时间戳值,在这种情况下,实际期望查询的是时间戳值为ts的数据;又例如,ts用于限定待查询的数据的终止时间,在这种情况下,实际期望查询的是从查询数据的时刻开始到指定的ts为止的数据。
在步骤S301,接收待查询的数据的第一属性值和关于第二属性值的取值范围。
作为示例,所述待查询的数据是时序型数据,所述第二属性值为时间戳值。
作为示例,所述取值范围指定时间戳值的起始值和终止值或者指定时间戳值的终止值。
在步骤S302,根据待查询的数据的第一属性值来确定所述数据表中的与待查询的数据对应的分片。
作为示例,可通过如下操作确定与待查询的数据对应的分片:计算与待查询的数据的第一属性值对应的哈希值;获得计算出的哈希值除以所述数据表中的分片总数所得的余数;将与获得的余数对应的分片确定为与待查询的数据对应的分片。可使用哈希函数对第一属性值进行计算,以获得哈希值。例如,使用的哈希函数可以是由Austin Appleby提出的哈希函数Murmurhash。当然,本发明并不对使用的哈希函数进行限制,其他哈希函数也可用于哈希值的计算。
在步骤S303,从与确定的分片对应的第一级跳表中查找以待查询的数据的第一属性值为关键字的节点。
在步骤S304,从查找到的节点中的指针或对象所指示的第二级跳表中取出关键字在取值范围内的节点中的对应的所述至少一个属性值。
以表1中的数据为例,需要查询卡号值为“6222XXXX01”并且时间戳值的起始值为“2018052815520505”且终止值为“2018052814520505”的数据。根据“6222XXXX01”确定与待查询的数据对应的分片为分片0。从与分片0对应的第一级跳表的节点11节点1m中查找出以“6222XXXX01”为关键字的节点为节点11。确定与节点11对应的第二级跳表包括节点41至节点 4k。从节点41至节点4k中查找到关键值的起始值为“2018052815520505”且终止值为“2018052814520505”的节点,从而可从查找到的节点中查找出与关键字对应的值。又如,当所述取值范围仅指定时间戳值的终止值(例如,“2018052814520505”)时,可用于查询与时间戳值大于或等于“2018052814520505”的节点对应的数据。
作为示例,从查找到的节点中的指针或对象所指示的第二级跳表中取出关键字在取值范围内的节点中的对应的所述至少一个属性值的步骤包括:从查找到的节点中的指针或对象所指示的第二级跳表的节点中取出与在取值范围内的关键字对应的值;通过以下方式之一来获得待查询的数据的所述至少一个属性值:按照预定的字符串拆分规则(与上述字符串合并规则相对应) 对取出的值进行拆分,按照预定的JSON格式对取出的值进行反序列化,按照预定的ProtocolBuffer格式对取出的值进行反序列化,按照预定义的Schema 格式对取出的值进行反序列化。
例如,从查找到的节点中查找出与关键字对应的值分别为“100|北京上地xx路|10xxx”和“50|北京西二旗xx店|20xxx”。可根据预先设定的符号例如“|”对“100|北京上地xx路|10xxx”进行拆分,并根据预先设定的拆分出的字符串的含义获得第一个拆分出的字符串为交易金额值“100”,第二个拆分出的字符串为交易地点“北京上地xx路”,第三个拆分出的字符串为POS 编号“10xxx”。类似地,可从“50|北京西二旗xx店|20xxx”获得交易金额值“50”、交易地点“北京西二旗xx店”以及POS编号“20xxx”。
作为示例,为了保证内存中不会存储过多数据,可设置与第二级跳表对应的节点数量阈值。在此基础上,从查找到的节点中的指针或对象所指示的第二级跳表中取出关键字在取值范围内的节点中的对应的所述至少一个属性值的步骤包括:从查找到的节点中的指针或对象所指示的第二级跳表中,按照从近及远的顺序取出关键字在取值范围内且数量不超过所述节点数量阈值的节点中的对应的所述至少一个属性值。
作为示例,还可根据设置的节点数量阈值进行定期删除,即:以预定周期遍历第一级跳表和第二级跳表,当遍历到的第二级跳表中的节点数量超过节点数量阈值时,根据该第二级跳表中的节点的排列顺序,删除排在与节点数量阈值对应的节点之后的所有节点。例如,当节点数量阈值为10时,根据第二级跳表中的节点的排列顺序,与该节点数量阈值对应的节点为第10个节点。
作为示例,为了提高处理效率,可执行如下的过期数据删除操作:设置过期期限长度;以预定周期(例如,3个月)遍历第一级跳表和第二级跳表,通过定位时间戳值达到所述过期期限长度的节点来整体删除在该节点之后的节点。通过所述过期数据删除操作,可将第二级跳表中的时间戳值小于与设置的过期期限长度对应的时间戳值的节点删除。例如,与设置的过期期限长度对应的时间戳值为2018060000000000,则可通过上述过期数据删除操作将以上示例中添加到第二级跳表中的与表1中的3条数据对应的3个节点均删除。
图5示出根据本发明示例性实施例的管理内存数据的系统的框图。如图 5中所示,根据本发明示例性实施例的管理内存数据的系统400包括:数据表设置单元401、第一级跳表设置单元402以及第二级跳表设置单元403。
数据表设置单元401用于设置包括多个分片的数据表,其中,每个分片分别对应第一级跳表。第一级跳表设置单元402用于将第一级跳表设置为用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点。第二级跳表设置单元403用于将第二级跳表设置为用于存储以所述数据的第二属性值为关键字且与该关键字对应的值包括所述数据的至少一个属性值的节点。
图6示出根据本发明示例性实施例的在内存中维护数据的系统的框图。如图6中所示,根据本发明示例性实施例的在内存中维护数据的系统500包括:分片确定单元501、查找单元502和数据添加单元503。
分片确定单元501用于根据待插入的数据的第一属性值来确定包括多个分片的数据表中的与待插入的数据对应的分片,其中,每个分片分别对应第一级跳表,第一级跳表用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点。查找单元502用于从与确定的分片对应的第一级跳表中查找以待插入的数据的第一属性值为关键字的节点。数据添加单元503用于在从第一级跳表中查找到以待插入的数据的第一属性值为关键字的节点的情况下,在查找到的节点中的指针或对象所指示的第二级跳表中添加以待插入的数据的第二属性值为关键字且与该关键字对应的值包括待插入的数据的至少一个属性值的节点。
作为示例,分片确定单元501计算与待插入的数据的第一属性值对应的哈希值;获得计算出的哈希值除以所述数据表中的分片总数所得的余数;将与获得的余数对应的分片确定为与待插入的数据对应的分片。
作为示例,所述多个分片中的每个分片中存储有指示对应的第一级跳表的指针或对象。
作为示例,在未能从第一级跳表中查找到以待插入的数据的第一属性值为关键字的节点的情况下,数据添加单元503创建第二级跳表,在第一级跳表中创建以待插入的数据的第一属性值为关键字且以指示创建的第二级跳表的指针或对象为与该关键字对应的值的节点,并在创建的第二级跳表中添加以待插入的数据的第二属性值为关键字且与该关键字对应的值包括待插入的数据的所述至少一个属性值的节点。
作为示例,待插入的数据的所述至少一个属性值包括待插入的数据的第一属性值和/或第二属性值,或者待插入的数据的所述至少一个属性值既不包括待插入的数据的第一属性值也不包括待插入的数据的第二属性值,其中,添加到第二级跳表中的节点中的与待插入的数据的第二属性值对应的值包括通过以下方式之一获得的字符串:按照预定的字符串合并规则对所述至少一个属性值进行合并,按照预定的JSON格式对所述至少一个属性值进行序列化,按照预定的ProtocolBuffer格式对所述至少一个属性值进行序列化,按照预定义的Schema格式对所述至少一个属性值进行序列化。
作为示例,所述在内存中维护数据的系统还包括:输入接收单元(未示出)和数据获取单元(未示出),其中,输入接收单元接收待查询的数据的第一属性值和关于第二属性值的取值范围,其中,分片确定单元501根据待查询的数据的第一属性值来确定所述数据表中的与待查询的数据对应的分片;数据获取单元从与确定的分片对应的第一级跳表中查找以待查询的数据的第一属性值为关键字的节点,从查找到的节点中的指针或对象所指示的第二级跳表中取出关键字在取值范围内的节点中的对应的所述至少一个属性值。
作为示例,数据获取单元从查找到的节点中的指针或对象所指示的第二级跳表的节点中取出与在取值范围内的关键字对应的值,通过以下方式之一来获得待查询的数据的所述至少一个属性值:按照预定的字符串拆分规则对取出的值进行拆分,按照预定的JSON格式对取出的值进行反序列化,按照预定的ProtocolBuffer格式对取出的值进行反序列化,按照预定义的Schema 格式对取出的值进行反序列化。
作为示例,分片确定单元501计算与待查询的数据的第一属性值对应的哈希值;获得计算出的哈希值除以所述数据表中的分片总数所得的余数,将与获得的余数对应的分片确定为与待查询的数据对应的分片。
作为示例,所述待插入的数据或待查询的数据是时序型数据,所述第二属性值为时间戳值。
作为示例,所述取值范围指定时间戳值的起始值和终止值或者指定时间戳值的终止值。
作为示例,数据添加单元503按照时间戳值指示的时间添加节点,使得第二级跳表中的节点按照时间从近及远的顺序排列。
作为示例,在内存中维护数据的系统还包括:节点数量阈值设置单元(未示出),用于设置与第二级跳表对应的节点数量阈值,其中,数据获取单元从查找到的节点中的指针或对象所指示的第二级跳表中,按照从近及远的顺序取出关键字在取值范围内且数量不超过所述节点数量阈值的节点中的对应的所述至少一个属性值。
作为示例,在内存中维护数据的系统还包括:节点删除单元,其中,节点数量阈值设置单元设置与第二级跳表对应的节点数量阈值,查找单元以预定周期遍历第一级跳表和第二级跳表,当遍历到的第二级跳表中的节点数量超过节点数量阈值时,节点删除单元根据该第二级跳表中的节点的排列顺序,删除排在与节点数量阈值对应的节点之后的所有节点。
作为示例,在内存中维护数据的系统还包括:过期期限设置单元(未示出)和数据删除单元(未示出),其中,过期期限长度设置单元设置过期期限长度,查找单元以预定周期遍历第一级跳表和第二级跳表,数据删除单元整体删除时间戳值达到所述过期期限长度的节点之后的节点。
应该理解,根据本发明示例性实施例的管理内存数据的系统和在内存中维护数据的系统的具体实现方式可参照结合图1至图4以及表1描述的相关具体实现方式来实现,在此不再赘述。
根据本发明示例性实施例的系统所包括的单元可被分别配置为执行特定功能的软件、硬件、固件或上述项的任意组合。例如,这些单元可对应于专用的集成电路,也可对应于纯粹的软件代码,还可对应于软件与硬件相结合的单元。此外,这些单元所实现的一个或多个功能也可由物理实体设备(例如,处理器、客户端或服务器等)中的组件来统一执行。
应理解,根据本发明示例性实施例的方法可通过记录在计算可读介质上的程序来实现,例如,根据本发明的示例性实施例,可提供一种用于管理内存数据的计算机可读介质,其中,在所述计算机可读介质上记录有用于执行以下方法步骤的计算机程序:设置包括多个分片的数据表,其中,每个分片分别对应第一级跳表;将第一级跳表设置为用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点;将第二级跳表设置为用于存储以所述数据的第二属性值为关键字且与该关键字对应的值包括所述数据的至少一个属性值的节点。
又如,根据本发明的示例性实施例,可提供一种用于在内存中维护数据的计算机可读介质,其中,在所述计算机可读介质上记录有用于执行以下方法步骤的计算机程序:根据待插入的数据的第一属性值来确定包括多个分片的数据表中的与待插入的数据对应的分片,其中,每个分片分别对应第一级跳表,第一级跳表用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点;从与确定的分片对应的第一级跳表中查找以待插入的数据的第一属性值为关键字的节点;在从第一级跳表中查找到以待插入的数据的第一属性值为关键字的节点的情况下,在查找到的节点中的指针或对象所指示的第二级跳表中添加以待插入的数据的第二属性值为关键字且与该关键字对应的值包括待插入的数据的至少一个属性值的节点。
上述计算机可读介质中的计算机程序可在诸如客户端、主机、代理装置、服务器等计算机设备中部署的环境中运行,应注意,所述计算机程序还可用于执行除了上述步骤以外的附加步骤或者在执行上述步骤时执行更为具体的处理,这些附加步骤和进一步处理的内容已经参照图1至图4以及表1进行了描述,这里为了避免重复将不再进行赘述。
应注意,根据本发明示例性实施例的系统可完全依赖计算机程序的运行来实现相应的功能,即,各个单元与计算机程序的功能架构中与各步骤相应,使得整个系统通过专门的软件包(例如,lib库)而被调用,以实现相应的功能。
另一方面,根据本发明示例性实施例的系统所包括的各个单元也可以通过硬件、软件、固件、中间件、微代码或其任意组合来实现。当以软件、固件、中间件或微代码实现时,用于执行相应操作的程序代码或者代码段可以存储在诸如存储介质的计算机可读介质中,使得处理器可通过读取并运行相应的程序代码或者代码段来执行相应的操作。
例如,本发明的示例性实施例还可以实现为计算装置,该计算装置包括存储部件和处理器,存储部件中存储有计算机可执行指令集合,当所述计算机可执行指令集合被所述处理器执行时,执行用于管理内存数据的方法或者执行在内存中维护数据的方法。
具体说来,所述计算装置可以部署在服务器或客户端中,也可以部署在分布式网络环境中的节点装置上。此外,所述计算装置可以是PC计算机、平板装置、个人数字助理、智能手机、web应用或其他能够执行上述指令集合的装置。
这里,所述计算装置并非必须是单个的计算装置,还可以是任何能够单独或联合执行上述指令(或指令集)的装置或电路的集合体。计算装置还可以是集成控制系统或系统管理器的一部分,或者可被配置为与本地或远程(例如,经由无线传输)以接口互联的便携式电子装置。
在所述计算装置中,处理器可包括中央处理器(CPU)、图形处理器(GPU)、可编程逻辑装置、专用处理器系统、微控制器或微处理器。作为示例而非限制,处理器还可包括模拟处理器、数字处理器、微处理器、多核处理器、处理器阵列、网络处理器等。
根据本发明示例性实施例的方法中所描述的某些操作可通过软件方式来实现,某些操作可通过硬件方式来实现,此外,还可通过软硬件结合的方式来实现这些操作。
处理器可运行存储在存储部件之一中的指令或代码,其中,所述存储部件还可以存储数据。指令和数据还可经由网络接口装置而通过网络被发送和接收,其中,所述网络接口装置可采用任何已知的传输协议。
存储部件可与处理器集成为一体,例如,将RAM或闪存布置在集成电路微处理器等之内。此外,存储部件可包括独立的装置,诸如,外部盘驱动、存储阵列或任何数据库系统可使用的其他存储装置。存储部件和处理器可在操作上进行耦合,或者可例如通过I/O端口、网络连接等互相通信,使得处理器能够读取存储在存储部件中的文件。
此外,所述计算装置还可包括视频显示器(诸如,液晶显示器)和用户交互接口(诸如,键盘、鼠标、触摸输入装置等)。计算装置的所有组件可经由总线和/或网络而彼此连接。
根据本发明示例性实施例的管理内存数据的方法和/或在内存中维护数据的方法所涉及的操作可被描述为各种互联或耦合的功能块或功能示图。然而,这些功能块或功能示图可被均等地集成为单个的逻辑装置或按照非确切的边界进行操作。
例如,如上所述,根据本发明示例性实施例的用于管理内存数据的计算装置可包括存储部件和处理器,其中,存储部件中存储有计算机可执行指令集合,当所述计算机可执行指令集合被所述处理器执行时,执行下述步骤:设置包括多个分片的数据表,其中,每个分片分别对应第一级跳表;将第一级跳表设置为用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点;将第二级跳表设置为用于存储以所述数据的第二属性值为关键字且与该关键字对应的值包括所述数据的至少一个属性值的节点。
又如,如上所述,根据本发明示例性实施例的用于在内存中维护数据的计算装置可包括存储部件和处理器,其中,存储部件中存储有计算机可执行指令集合,当所述计算机可执行指令集合被所述处理器执行时,执行下述步骤:根据待插入的数据的第一属性值来确定包括多个分片的数据表中的与待插入的数据对应的分片,其中,每个分片分别对应第一级跳表,第一级跳表用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点;从与确定的分片对应的第一级跳表中查找以待插入的数据的第一属性值为关键字的节点;在从第一级跳表中查找到以待插入的数据的第一属性值为关键字的节点的情况下,在查找到的节点中的指针或对象所指示的第二级跳表中添加以待插入的数据的第二属性值为关键字且与该关键字对应的值包括待插入的数据的至少一个属性值的节点。
以上描述了本发明的各示例性实施例,应理解,上述描述仅是示例性的,并非穷尽性的,本发明不限于所披露的各示例性实施例。在不偏离本发明的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。因此,本发明的保护范围应该以权利要求的范围为准。

Claims (32)

1.一种在内存中维护数据的方法,包括:
根据待插入的数据的第一属性值来确定包括多个分片的数据表中的与待插入的数据对应的分片,其中,每个分片分别对应第一级跳表,第一级跳表用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点;
从与确定的分片对应的第一级跳表中查找以待插入的数据的第一属性值为关键字的节点;
在从第一级跳表中查找到以待插入的数据的第一属性值为关键字的节点的情况下,在查找到的节点中的指针或对象所指示的第二级跳表中添加以待插入的数据的第二属性值为关键字且与该关键字对应的值包括待插入的数据的至少一个属性值的节点。
2.如权利要求1所述的方法,其中,确定与待插入的数据对应的分片的步骤包括:
计算与待插入的数据的第一属性值对应的哈希值;
获得计算出的哈希值除以所述数据表中的分片总数所得的余数;
将与获得的余数对应的分片确定为与待插入的数据对应的分片。
3.如权利要求1所述的方法,其中,所述多个分片中的每个分片中存储有指示对应的第一级跳表的指针或对象。
4.如权利要求1所述的方法,还包括:
在未能从第一级跳表中查找到以待插入的数据的第一属性值为关键字的节点的情况下,创建第二级跳表,在第一级跳表中创建以待插入的数据的第一属性值为关键字且以指示创建的第二级跳表的指针或对象为与该关键字对应的值的节点,并在创建的第二级跳表中添加以待插入的数据的第二属性值为关键字且与该关键字对应的值包括待插入的数据的所述至少一个属性值的节点。
5.如权利要求1或4所述的方法,待插入的数据的所述至少一个属性值包括待插入的数据的第一属性值和/或第二属性值,或者待插入的数据的所述至少一个属性值既不包括待插入的数据的第一属性值也不包括待插入的数据的第二属性值,
其中,添加到第二级跳表中的节点中的与待插入的数据的第二属性值对应的值包括通过以下方式之一获得的字符串:
按照预定的字符串合并规则对所述至少一个属性值进行合并,按照预定的JSON格式对所述至少一个属性值进行序列化,按照预定的ProtocolBuffer格式对所述至少一个属性值进行序列化,按照预定的Schema格式对所述至少一个属性值进行序列化。
6.如权利要求1所述的方法,其中,还包括:
接收待查询的数据的第一属性值和关于第二属性值的取值范围;
根据待查询的数据的第一属性值来确定所述数据表中的与待查询的数据对应的分片;
从与确定的分片对应的第一级跳表中查找以待查询的数据的第一属性值为关键字的节点;
从查找到的节点中的指针或对象所指示的第二级跳表中取出关键字在取值范围内的节点中的对应的所述至少一个属性值。
7.如权利要求6所述的方法,其中,从查找到的节点中的指针或对象所指示的第二级跳表中取出关键字在取值范围内的节点中的对应的所述至少一个属性值的步骤包括:
从查找到的节点中的指针或对象所指示的第二级跳表的节点中取出与在取值范围内的关键字对应的值;
通过以下方式之一来获得待查询的数据的所述至少一个属性值:
按照预定的字符串拆分规则对取出的值进行拆分,按照预定的JSON格式对取出的值进行反序列化,按照预定的ProtocolBuffer格式对取出的值进行反序列化,按照预定义的Schema格式对取出的值进行反序列化。
8.如权利要求6所述的方法,其中,确定与待查询的数据对应的分片的步骤包括:
计算与待查询的数据的第一属性值对应的哈希值;
获得计算出的哈希值除以所述数据表中的分片总数所得的余数;
将与获得的余数对应的分片确定为与待查询的数据对应的分片。
9.如权利要求1所述的方法,其中,所述待插入的数据是时序型数据。
10.如权利要求6所述的方法,其中,所述待插入的数据或待查询的数据是时序型数据,所述第二属性值为时间戳值。
11.如权利要求10所述的方法,其中,所述取值范围指定时间戳值的起始值和终止值或者指定时间戳值的终止值。
12.如权利要求10所述的方法,其中,在第二级跳表中添加节点的步骤包括:按照时间戳值指示的时间添加节点,使得第二级跳表中的节点按照时从近及远的顺序排列。
13.如权利要求12所述的方法,其中,还包括:设置与第二级跳表对应的节点数量阈值,
其中,从查找到的节点中的指针或对象所指示的第二级跳表中取出关键字在取值范围内的节点中的对应的所述至少一个属性值的步骤包括:
从查找到的节点中的指针或对象所指示的第二级跳表中,按照从近及远的顺序取出关键字在取值范围内且数量不超过所述节点数量阈值的节点中的对应的所述至少一个属性值。
14.如权利要求12所述的方法,其中,还包括:
设置与第二级跳表对应的节点数量阈值;
以预定周期遍历第一级跳表和第二级跳表;
当遍历到的第二级跳表中的节点数量超过节点数量阈值时,根据该第二级跳表中的节点的排列顺序,删除排在与节点数量阈值对应的节点之后的所有节点。
15.如权利要求10所述的方法,还包括:
设置过期期限长度;
以预定周期遍历第一级跳表和第二级跳表,通过定位时间戳值达到所述过期期限长度的节点来整体删除在该节点之后的节点。
16.一种在内存中维护数据的系统,包括:
分片确定单元,用于根据待插入的数据的第一属性值来确定包括多个分片的数据表中的与待插入的数据对应的分片,其中,每个分片分别对应第一级跳表,第一级跳表用于存储以数据的第一属性值为关键字且以指示第二级跳表的指针或对象为与该关键字对应的值的节点;
查找单元,用于从与确定的分片对应的第一级跳表中查找以待插入的数据的第一属性值为关键字的节点;
数据添加单元,用于在从第一级跳表中查找到以待插入的数据的第一属性值为关键字的节点的情况下,在查找到的节点中的指针或对象所指示的第二级跳表中添加以待插入的数据的第二属性值为关键字且与该关键字对应的值包括待插入的数据的至少一个属性值的节点。
17.如权利要求16所述的系统,其中,分片确定单元计算与待插入的数据的第一属性值对应的哈希值;获得计算出的哈希值除以所述数据表中的分片总数所得的余数;将与获得的余数对应的分片确定为与待插入的数据对应的分片。
18.如权利要求16所述的系统,其中,所述多个分片中的每个分片中存储有指示对应的第一级跳表的指针或对象。
19.如权利要求16所述的系统,其中,在未能从第一级跳表中查找到以待插入的数据的第一属性值为关键字的节点的情况下,数据添加单元创建第二级跳表,在第一级跳表中创建以待插入的数据的第一属性值为关键字且以指示创建的第二级跳表的指针或对象为与该关键字对应的值的节点,并在创建的第二级跳表中添加以待插入的数据的第二属性值为关键字且与该关键字对应的值包括待插入的数据的所述至少一个属性值的节点。
20.如权利要求16或19所述的系统,待插入的数据的所述至少一个属性值包括待插入的数据的第一属性值和/或第二属性值,或者待插入的数据的所述至少一个属性值既不包括待插入的数据的第一属性值也不包括待插入的数据的第二属性值,
其中,添加到第二级跳表中的节点中的与待插入的数据的第二属性值对应的值包括通过以下方式之一获得的字符串:
按照预定的字符串合并规则对所述至少一个属性值进行合并,按照预定的JSON格式对所述至少一个属性值进行序列化,按照预定的ProtocolBuffer格式对所述至少一个属性值进行序列化,按照预定义的Schema格式对所述至少一个属性值进行序列化。
21.如权利要求16所述的系统,还包括:输入接收单元和数据获取单元,其中,输入接收单元接收待查询的数据的第一属性值和关于第二属性值的取值范围,分片确定单元根据待查询的数据的第一属性值来确定所述数据表中的与待查询的数据对应的分片,数据获取单元从与确定的分片对应的第一级跳表中查找以待查询的数据的第一属性值为关键字的节点,从查找到的节点中的指针或对象所指示的第二级跳表中取出关键字在取值范围内的节点中的对应的所述至少一个属性值。
22.如权利要求21所述的系统,其中,数据获取单元从查找到的节点中的指针或对象所指示的第二级跳表的节点中取出与在取值范围内的关键字对应的值,通过以下方式之一来获得待查询的数据的所述至少一个属性值:
按照预定的字符串拆分规则对取出的值进行拆分,按照预定的JSON格式对取出的值进行反序列化,按照预定的ProtocolBuffer格式对取出的值进行反序列化,按照预定义的Schema格式对取出的值进行反序列化。
23.如权利要求21所述的系统,其中,分片确定单元计算与待查询的数据的第一属性值对应的哈希值,获得计算出的哈希值除以所述数据表中的分片总数所得的余数,将与获得的余数对应的分片确定为与待查询的数据对应的分片。
24.如权利要求16所述的系统,其中,所述待插入的数据是时序型数据。
25.如权利要求21所述的系统,其中,所述待插入的数据或待查询的数据是时序型数据,所述第二属性值为时间戳值。
26.如权利要求25所述的系统,其中,所述取值范围指定时间戳值的起始值和终止值或者指定时间戳值的终止值。
27.如权利要求25所述的系统,其中,数据添加单元按照时间戳值指示的时间添加节点,使得第二级跳表中的节点按照时从近及远的顺序排列。
28.如权利要求27所述的系统,其中,还包括:节点数量阈值设置单元,用于设置与第二级跳表对应的节点数量阈值,
其中,数据获取单元从查找到的节点中的指针或对象所指示的第二级跳表中,按照从近及远的顺序取出关键字在取值范围内且数量不超过所述节点数量阈值的节点中的对应的所述至少一个属性值。
29.如权利要求27所述的系统,其中,还包括:节点数量阈值设置单元和节点删除单元,其中,
节点数量阈值设置单元设置与第二级跳表对应的节点数量阈值,查找单元以预定周期遍历第一级跳表和第二级跳表,当遍历到的第二级跳表中的节点数量超过节点数量阈值时,节点删除单元根据该第二级跳表中的节点的排列顺序,删除排在与节点数量阈值对应的节点之后的所有节点。
30.如权利要求25所述的系统,还包括:过期期限长度设置单元和数据删除单元,其中,
过期期限长度设置单元设置过期期限长度,查找单元以预定周期遍历第一级跳表和第二级跳表,数据删除单元整体删除时间戳值达到所述过期期限长度的节点之后的节点。
31.一种计算机可读介质,其中,在所述计算机可读介质上记录有用于执行如权利要求1至15中的任一项权利要求所述的方法的计算机程序。
32.一种计算装置,包括存储部件和处理器,其中,存储部件中存储有计算机可执行指令集合,当所述计算机可执行指令集合被所述处理器执行时,执行如权利要求1至15中的任一项权利要求所述的方法。
CN201810735798.2A 2018-07-06 2018-07-06 在内存中维护数据的方法和系统 Active CN109086133B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201810735798.2A CN109086133B (zh) 2018-07-06 2018-07-06 在内存中维护数据的方法和系统
CN201910973093.9A CN110704194A (zh) 2018-07-06 2018-07-06 管理内存数据及在内存中维护数据的方法和系统
PCT/CN2019/094365 WO2020007288A1 (zh) 2018-07-06 2019-07-02 管理内存数据及在内存中维护数据的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810735798.2A CN109086133B (zh) 2018-07-06 2018-07-06 在内存中维护数据的方法和系统

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201910973093.9A Division CN110704194A (zh) 2018-07-06 2018-07-06 管理内存数据及在内存中维护数据的方法和系统

Publications (2)

Publication Number Publication Date
CN109086133A CN109086133A (zh) 2018-12-25
CN109086133B true CN109086133B (zh) 2019-08-30

Family

ID=64837006

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201910973093.9A Pending CN110704194A (zh) 2018-07-06 2018-07-06 管理内存数据及在内存中维护数据的方法和系统
CN201810735798.2A Active CN109086133B (zh) 2018-07-06 2018-07-06 在内存中维护数据的方法和系统

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201910973093.9A Pending CN110704194A (zh) 2018-07-06 2018-07-06 管理内存数据及在内存中维护数据的方法和系统

Country Status (2)

Country Link
CN (2) CN110704194A (zh)
WO (1) WO2020007288A1 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110704194A (zh) * 2018-07-06 2020-01-17 第四范式(北京)技术有限公司 管理内存数据及在内存中维护数据的方法和系统
CN111046034B (zh) * 2018-10-12 2024-02-13 第四范式(北京)技术有限公司 管理内存数据及在内存中维护数据的方法和系统
CN111124312B (zh) * 2019-12-23 2023-10-31 第四范式(北京)技术有限公司 数据去重的方法及其装置
CN111176842A (zh) * 2019-12-23 2020-05-19 中国平安财产保险股份有限公司 数据处理方法、装置、电子设备及存储介质
CN111597076B (zh) * 2020-05-12 2024-04-16 第四范式(北京)技术有限公司 操作数据的方法和装置以及管理持久化跳表的方法和装置
CN111913801B (zh) * 2020-07-15 2023-08-29 广州虎牙科技有限公司 数据处理方法和装置、代理服务器、存储系统及存储介质
CN112597152B (zh) * 2020-12-04 2022-08-23 国创移动能源创新中心(江苏)有限公司 基于跳跃表的带特征的时序数据的索引方法、索引装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103942289A (zh) * 2014-04-12 2014-07-23 广西师范大学 一种Hadoop上面向范围查询的内存缓存方法
CN104766013A (zh) * 2015-04-10 2015-07-08 北京理工大学 一种基于跳表的跨站脚本攻击防御方法
US9361215B2 (en) * 2013-05-31 2016-06-07 Apple Inc. Memory allocation improvements
CN105701209A (zh) * 2016-01-13 2016-06-22 广西师范大学 一种提高大数据上并行连接性能的负载平衡方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030196024A1 (en) * 2002-04-16 2003-10-16 Exanet, Inc. Apparatus and method for a skip-list based cache
US7552306B2 (en) * 2005-11-14 2009-06-23 Kabushiki Kaisha Toshiba System and method for the sub-allocation of shared memory
US9055011B2 (en) * 2010-08-31 2015-06-09 Intel Corporation Methods and apparatus for linked-list circular buffer management
US9665623B1 (en) * 2013-03-15 2017-05-30 EMC IP Holding Company LLC Key-value store utilizing ranged keys in skip list data structure
CN104346362B (zh) * 2013-07-29 2019-03-26 腾讯科技(深圳)有限公司 一种基于属性值查找目标对象的方法和装置
JP6133960B2 (ja) * 2015-11-12 2017-05-24 株式会社Pfu 映像処理装置、および、映像処理方法
CN105574104B (zh) * 2015-12-11 2019-04-05 上海爱数信息技术股份有限公司 一种基于ObjectStore的LogStructure存储系统及其数据写入方法
CN106209645A (zh) * 2016-07-29 2016-12-07 北京邮电大学 一种数据包的起始查找节点确定方法及装置
IL264827B (en) * 2016-08-14 2022-09-01 Www Trustscience Com Inc A method and system for enabling financial transactions through connectivity, or relationships, of a person or entity within a network community
CN106815326B (zh) * 2016-12-28 2021-03-02 中国民航信息网络股份有限公司 一种检测无主键数据表一致性的系统及方法
CN107609089B (zh) * 2017-09-07 2019-11-19 北京神州绿盟信息安全科技股份有限公司 一种数据处理方法、装置及系统
CN110704194A (zh) * 2018-07-06 2020-01-17 第四范式(北京)技术有限公司 管理内存数据及在内存中维护数据的方法和系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9361215B2 (en) * 2013-05-31 2016-06-07 Apple Inc. Memory allocation improvements
CN103942289A (zh) * 2014-04-12 2014-07-23 广西师范大学 一种Hadoop上面向范围查询的内存缓存方法
CN104766013A (zh) * 2015-04-10 2015-07-08 北京理工大学 一种基于跳表的跨站脚本攻击防御方法
CN105701209A (zh) * 2016-01-13 2016-06-22 广西师范大学 一种提高大数据上并行连接性能的负载平衡方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
周维.《基于并发跳表的云数据处理双层索引架构研究》.《计算机研究与发展》.2015,

Also Published As

Publication number Publication date
CN110704194A (zh) 2020-01-17
CN109086133A (zh) 2018-12-25
WO2020007288A1 (zh) 2020-01-09

Similar Documents

Publication Publication Date Title
CN109086133B (zh) 在内存中维护数据的方法和系统
CN109299100B (zh) 管理内存数据及在内存中维护数据的方法和系统
US11030201B2 (en) Preliminary ranker for scoring matching documents
Güting et al. Symbolic trajectories
US9047330B2 (en) Index compression in databases
CN101937448B (zh) 用于主存储器列存储装置的基于字典的保持顺序的串压缩
US10229143B2 (en) Storage and retrieval of data from a bit vector search index
US20150370838A1 (en) Index structure to accelerate graph traversal
US10565198B2 (en) Bit vector search index using shards
CN104160398B (zh) 用于大对象数据内的结构化内容的方法及其系统
CN103329130A (zh) 管理数据集合的更改
US11748324B2 (en) Reducing matching documents for a search query
CN105320719A (zh) 一种基于项目标签和图形关系的众筹网站项目推荐方法
CN107851108B (zh) 使用位向量搜索索引的匹配文档
CN108475266B (zh) 用来移除匹配文档的匹配修复
CN113326314B (zh) 数据可视化方法、装置、电子设备及可读存储介质
CN111651641B (zh) 一种图查询方法、装置及存储介质
CN106599280B (zh) 确定网页节点路径信息的方法及装置
CN104854587A (zh) 主动数据库查询的维护
Hachem et al. Managing derived data in the Gaea scientific DBMS
CN111078276B (zh) 应用程序的冗余资源处理方法、装置、设备及存储介质
CN110020272A (zh) 缓存方法、装置以及计算机存储介质
US10733164B2 (en) Updating a bit vector search index
CN109710626B (zh) 数据入库管理方法、装置、电子设备,及存储介质
CN105518672A (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