数据存储及查询方法、装置及数据库系统

文档序号:7552 发布日期:2021-09-17 浏览:24次 英文

数据存储及查询方法、装置及数据库系统

技术领域

本说明书实施例通常涉及数据存储领域,尤其涉及可适用于在线实时更新数据的数据存储方法及装置、数据查询方法及装置以及数据库系统。

背景技术

在传统的数据存储机制中,数据存储系统会将待存储的数据存储到例如磁盘的数据库存储设备中,并且根据所存储的数据生成对应的数据索引文件。在进行数据查询时,在接收到数据查询请求后,在数据索引文件中进行索引查询得到对应的数据索引,然后使用所查询到的数据索引来从数据库存储设备中获取查询数据。在一些传统数据存储方案中,可以采用基于前缀排序的数据索引生成机制、基于普通哈希的数据索引生成机制或者基于完美哈希的数据索引生成机制来生成数据索引文件。

基于前缀排序的数据索引生成机制和基于普通哈希的数据索引生成机制可以适用于针对在线实时更新数据的数据存储。然而,基于前缀排序的数据索引生成机制采用二分查找机制进行查询,其查询效率为。对于基于普通哈希的数据索引机制,由于存在具有冲突的哈希索引,在进行数据查询时需要通过开放链表、线性探索等机制来解决哈希冲突,从而使得查询效率大于,极端情况为

基于完美哈希的数据索引生成机制通过对存量数据集执行完美哈希计算来建立完美哈希索引,使得后续可以通过完美哈希索引来进行数据查询,其查询效率为。但是基于完美哈希的数据索引生成机制仅仅适用于离线查询场景,仅仅可以对存量数据进行查询,无法实时增加增量数据。

发明内容

鉴于上述,本说明书实施例提供数据存储及查询方方案。在该数据存储及查询方案中,数据库系统包括内存层和数据存储介质。在进行数据存储时,先将待存储的新数据存储在数据库系统的内存层,基于内存层的存储数据生成数据索引,并且将存储数据与数据索引对应地放在一起作为内存数据存储在内存中。仅仅在内存层所存储数据满足预定条件时,将内存层的存储数据写入到数据库系统的数据存储介质,并且使用基于完美哈希的索引机制来根据数据存储介质的存储数据生成数据存储介质的数据索引文件,并将所生成的数据索引文件加载到内存层中,以供数据查询时使用。在进行数据查询时,根据数据查询请求中的键生成用于内存层查询的内存数据索引,并使用内存数据索引在内存层的内存数据中进行数据查询,并且在内存数据中不存在匹配数据时,再按照基于完美哈希的索引机制根据数据查询请求中的键生成完美哈希值。然后,使用所生成的完美哈希值来在内存层中存储的数据存储介质的数据索引文件进行数据索引查询,由此得到匹配的数据索引。随后,根据所得到的匹配数据索引向数据存储介质发起数据读取,由此数据存储介质可以从对应的存储位置读取查询数据并返回给内存层。按照这种数据存储及查询方案,由于在内存层中进行数据查询无需针对数据存储介质的数据读取操作,并且在需要从数据存储介质读取数据时,先根据基于数据查询请求确定出的完美哈希值来在内存层中存储的数据索引文件中进行数据索引查询,在得到数据索引查询结果后再向数据存储介质发起数据读取。由于数据索引文件中的数据索引是根据基于完美哈希的索引机制确定出的,这种数据索引具有唯一性,从而使得在数据存储介质中一次操作就可以准确命中查询结果,由此仅仅需要一次存储介质数据读取操作就可以完成数据存储介质中的数据查询操作,进而提升数据查询效率。

根据本说明书实施例的一个方面,提供一种数据存储方法,包括:响应于接收到待存储的第一数据,将所述第一数据写入数据库系统的内存层;按照基于哈希的第一索引机制生成所述内存层中的存储数据的内存数据索引,所述内存数据索引与对应存储数据相关联地存储在所述内存层中;在所述内存层中所存储数据满足第一预定条件时,将所述内存层中的第二数据写入所述数据库系统的数据存储介质的存储层,所述第二数据包括所述内存层中的部分或全部存储数据,按照基于完美哈希的第二索引机制来基于经过数据写入操作后的所述存储层中的全量存储数据生成所述存储层的数据索引文件,以及将所述存储层的数据索引文件加载到所述内存层。

可选地,在上述方面的一个示例中,所述数据存储方法还可以包括:在所述存储层存储有旧数据时,使用所述第二数据更新所述存储层中的存储数据。

可选地,在上述方面的一个示例中,所述数据存储介质的存储层包括至少两个分层存储层,其中,对于每个分层存储层,在该分层存储层所存储数据满足第二预定条件时,该分层存储层的存储数据被写入到下层分层存储层,并且下层分层存储层的数据索引文件根据经过数据写入操作后的下层分层存储层的全量存储数据生成。

可选地,在上述方面的一个示例中,加载到所述内存层的数据索引文件包括存储数据发生变化的分层存储层的数据索引文件。

可选地,在上述方面的一个示例中,在分层存储层的存储数据被写入到下层分层存储层后,从该分层存储层中删除对应的存储数据。

可选地,在上述方面的一个示例中,所述数据索引与对应存储数据相关联地记载在所述内存层中的哈希表中,将所述第一数据写入数据库系统的内存层包括:将所述第一数据写入数据库系统的内存层中的当前服务哈希表,以及所述数据存储方法还包括:在所述当前服务哈希表存满规定数据量的内存数据时,将所述当前服务哈希表封层为封层哈希表。

可选地,在上述方面的一个示例中,所述数据存储方法还可以包括:将所述第一数据写入数据库系统的内存层中的当前服务哈希表后,使用所述第一数据对所述当前服务哈希表进行存储数据更新。

可选地,在上述方面的一个示例中,所述第二数据包括部分或全部封层哈希表中的存储数据。

可选地,在上述方面的一个示例中,所述数据存储方法还可以包括:在将所述内存层中的第二数据写入所述数据库系统的数据存储介质的存储层中后,从所述内存层中删除所述第二数据。

可选地,在上述方面的一个示例中,所述基于哈希的第一索引机制包括基于普通哈希的第一索引机制或者基于完美哈希的第一索引机制。

可选地,在上述方面的一个示例中,所述第一预定条件或所述第二预定条件包括下述预定条件中的一种:所存储数据的数据量达到预定值;所述内存层的空闲内存空间占比或者所述分层存储层的空闲存储空间占比不大于预定值。

根据本说明书的实施例的另一方面,提供一种数据查询方法,包括:响应于接收到用户发起的数据查询请求,按照基于哈希的第一索引机制来根据所述数据查询请求生成内存数据索引;使用所生成的内存数据索引在数据库系统的内存层的内存数据中进行数据查询;响应于在所述内存层的内存数据中未查询到匹配数据,按照基于完美哈希的第二索引机制来根据所述数据查询请求生成哈希值;使用所述完美哈希值,在所述内存层中存储的所述数据库系统的数据存储介质的存储层的数据索引文件中进行数据索引查询;响应于在所述数据索引文件中查询到匹配的数据索引,根据所述匹配的数据索引向所述数据存储介质发起数据读取;以及在从所述数据存储介质读取查询数据后,将所述查询数据提供给所述用户。

可选地,在上述方面的一个示例中,所述数据以哈希表的形式存储在所述内存层,并且所述内存层存储有当前服务哈希表以及至少一个封层哈希表,其中,针对所述内存层的哈希表的数据查询根据哈希表创建时间从新到旧依序进行。

可选地,在上述方面的一个示例中,所述数据存储介质的存储层包括至少两个分层存储层,以及针对分层存储层的数据索引查询根据分层存储层的层级自顶层存储层开始自上向下依次进行。

根据本说明书的实施例的另一方面,提供一种数据存储装置,包括:内存写入单元,响应于接收到待存储的第一数据,将所述第一数据写入数据库系统的内存层;内存索引生成单元,按照基于哈希的第一索引机制生成所述内存层中的存储数据的内存数据索引,所述内存数据索引与对应存储数据相关联地存储在所述内存层中;存储介质写入单元,在所述内存层中所存储数据满足第一预定条件时,将所述内存层中的第二数据写入所述数据库系统的数据存储介质的存储层,所述第二数据包括所述内存层中的部分或全部存储数据;索引文件生成单元,按照基于完美哈希的第二索引机制来基于经过数据写入操作后的所述存储层中的全量存储数据生成所述存储层的数据索引文件,以及索引文件加载单元,将所述存储层的数据索引文件加载到所述内存层。

可选地,在上述方面的一个示例中,所述数据存储装置还包括:存储介质数据更新单元,在所述存储层存储有旧数据时,使用所述第二数据更新所述存储层中的存储数据。

可选地,在上述方面的一个示例中,所述数据存储介质的存储层包括至少两个分层存储层,其中,对于每个分层存储层,在该分层存储层所存储数据满足第二预定条件时,所述存储介质写入单元将该分层存储层的存储数据写入到下层分层存储层,并且所述索引文件生成单元基于经过数据写入操作后的下层分层存储层的全量存储数据来生成该下层分层存储层的数据索引文件。

可选地,在上述方面的一个示例中,加载到所述内存层的数据索引文件包括存储数据发生变化的分层存储层的数据索引文件。

可选地,在上述方面的一个示例中,所述数据存储装置还包括:存储介质数据删除单元,在分层存储层的存储数据被写入到下层分层存储层后,从该分层存储层中删除对应的存储数据。

可选地,在上述方面的一个示例中,所述数据索引与对应存储数据相关联地记载在所述内存层中的哈希表中,所述内存写入单元将所述第一数据写入数据库系统的内存层中的当前服务哈希表,以及所述数据存储装置还包括:内存数据封层单元,在所述当前服务哈希表存满规定数据量的内存数据时,将所述当前服务哈希表封层为封层哈希表。

可选地,在上述方面的一个示例中,所述数据存储装置还包括:内存数据更新单元,在将所述第一数据写入数据库系统的内存层中的当前服务哈希表后,使用所述第一数据对所述当前服务哈希表进行存储数据更新。

可选地,在上述方面的一个示例中,所述数据存储装置还包括:内存数据删除单元,在将所述内存层中的第二数据写入所述数据库系统的数据存储介质的存储层中后,从所述内存层中删除所述第二数据。

根据本说明书的实施例的另一方面,提供一种数据查询装置,包括:内存索引生成单元,响应于接收到用户发起的数据查询请求,按照基于哈希的第一索引机制来根据所述数据查询请求生成内存数据索引;内存数据查询单元,使用所生成的内存数据索引在数据库系统的内存层的内存数据中进行数据查询;完美哈希值生成单元,响应于在所述内存层的内存数据中未查询到匹配数据,按照基于完美哈希的第二索引机制来根据所述数据查询请求生成完美哈希值;索引文件查询单元,使用所述完美哈希值,在所述内存层中存储的所述数据库系统的数据存储介质的存储层的数据索引文件中进行数据索引查询;存储介质读取单元,响应于在所述数据索引文件中查询到匹配的数据索引,根据所述匹配的数据索引向所述数据存储介质发起数据读取;以及查询数据提供单元,在从所述数据存储介质读取查询数据后,将所述查询数据提供给所述用户。

根据本说明书的实施例的另一方面,提供一种数据库系统,包括:如上所述的数据存储装置;如上所述的数据查询装置;内存层;以及数据存储介质。

根据本说明书的实施例的另一方面,提供一种数据存储装置,包括:至少一个处理器,与所述至少一个处理器耦合的存储器,以及存储在所述存储器中的计算机程序,所述至少一个处理器执行所述计算机程序来实现如上所述的数据存储方法。

根据本说明书的实施例的另一方面,提供一种计算机可读存储介质,其存储有可执行指令,所述指令当被执行时使得处理器执行如上所述的数据存储方法。

根据本说明书的实施例的另一方面,提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行来实现如上所述的数据存储方法。

根据本说明书的实施例的另一方面,提供一种数据查询装置,包括:至少一个处理器,与所述至少一个处理器耦合的存储器,以及存储在所述存储器中的计算机程序,所述至少一个处理器执行所述计算机程序来实现如上所述的数据查询方法。

根据本说明书的实施例的另一方面,提供一种计算机可读存储介质,其存储有可执行指令,所述指令当被执行时使得处理器执行如上所述的数据查询方法。

根据本说明书的实施例的另一方面,提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行来实现如上所述的数据查询方法。

附图说明

通过参照下面的附图,可以实现对于本说明书内容的本质和优点的进一步理解。在附图中,类似组件或特征可以具有相同的附图标记。

图1示出了根据本说明书的实施例的数据库系统的示例示意图。

图2示出了根据本说明书的实施例的数据存储方法的示例流程图。

图3示出了根据本说明书的实施例的待存储数据的示例示意图。

图4示出了根据本说明书的实施例的数据合并过程的示例流程图。

图5示出了根据本说明书的实施例的哈希表的示例示意图。

图6示出了根据本说明书的实施例的内存层所存储数据的示例示意图。

图7示出了根据本说明书的实施例的数据库系统中的存储数据的示例示意图。

图8示出了根据本说明书的实施例的具有分层存储层结构的数据存储介质的示例示意图。

图9示出了根据本说明书的实施例的存储层数据写入及数据索引文件生成过程的示例示意图。

图10示出了根据本说明书的实施例的数据查询过程的示例流程图。

图11示出了根据本说明书的实施例的数据存储装置的示例方框图。

图12示出了根据本说明书的实施例的数据查询装置的示例方框图。

图13示出了根据本说明书的实施例的基于计算机系统实现的数据存储装置的示例示意图。

图14示出了根据本说明书的实施例的基于计算机系统实现的数据查询装置的示例示意图。

具体实施方式

现在将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本说明书内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。例如,所描述的方法可以按照与所描述的顺序不同的顺序来执行,以及各个步骤可以被添加、省略或者组合。另外,相对一些示例所描述的特征在其它例子中也可以进行组合。

如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。

在结合附图描述根据本说明书的实施例之前,先对本说明书的实施例中提及的几个术语进行简要说明。

术语“基于普通哈希的索引机制”是指利用普通哈希函数来对数据进行哈希计算,所得到的哈希值作为该数据在数据库系统中的数据索引。按照普通哈希函数进行哈希计算可能会出现哈希冲突(Hash Collision)。换言之,针对两个不同数据,按照普通哈希函数进行哈希计算可能会得到相同哈希值。

术语“基于完美哈希的索引机制”是指利用完美哈希函数(Perfect HashFunction)来对数据进行哈希计算,所得到的哈希值对应数据库系统的哈希表中的哈希槽位,该哈希槽位用于存储该数据的数据索引。完美哈希运算是一种不会出现哈希冲突的哈希运算,其基于完美哈希函数(Perfect Hash Function)将N个输入整数数据集映射到M个整数空间,其中,。在完美哈希运算时,对于给定的数据集,任意的Key1和Key2,经过完美哈希函数H的处理后所得到的哈希值都不相同,即,

在本说明书中,数据库系统中存储的数据例如可以包括但不限于键值数据等。为了说明简便,下面以键值数据作为数据示例来进行描述。

下面将参照附图描述根据本说明书的实施例的数据库存储设备、数据存储方法、数据存储装置、数据查询方法及数据查询装置。

图1示出了根据本说明书的实施例的数据库系统100的示例示意图。数据库系统100也可以称为数据库应用的服务端,用于提供数据存储服务和数据查询服务。

如图1所示,数据库系统100包括内存层110和至少一个数据存储介质120。内存层110可以包括由至少一个内存组成的内存池。内存层110也可以称为内存储器和主存储器,用于暂时存放计算设备的CPU中的运算数据以及与例如磁盘(Disk)等外部数据存储介质交换的数据。数据存储介质120也可以称为外部存储器。在计算设备读取数据存储介质120中的数据时,需要通过向数据存储介质发起例如IO操作的数据读取操作来将数据存储介质120中的数据读取到内存中。数据存储介质120例如可以是各种非易失性存储介质,比如,磁盘设备、存储卡等。磁盘是指利用磁记录技术存储数据的存储器。磁盘的示例例如可以包括各种形式的(Soft Disk)软盘和硬盘(Hard Disk)。

数据库系统100还包括数据存储装置130。数据存储装置130被配置为将待存储数据存储到数据库存储设备的内存层110或者数据存储介质120。

图2示出了根据本说明书的实施例的数据存储方法的示例流程图。

如图2所示,在210,监测是否接收到待存储的第一数据。第一数据例如可以是用户经由数据库应用的客户端设备输入的待存储数据。如果未接收到待存储的第一数据,则持续进行监测。

图3示出了根据本说明书的实施例的待存储数据的示例示意图。如图3所示,待存储数据是键值对数据。每条键值对数据可以包括由1个键(Key)和至少一个值(Value)组成的键值对(即,Key-Value)。在图3的示例中,每条键值对数据的Key为数据ID,例如,用户的身份证号码、注册号码、系统编号等。Value_1表示用户姓名,Value_2表示用户年龄,以及Value_5表示用户职业等。

如果接收到待存储的第一数据,则在220,响应于接收到待存储的第一数据,将第一数据写入数据库系统的内存层。

在230,按照基于哈希的第一索引机制生成内存层中的存储数据的内存数据索引,所生成的内存数据索引与对应存储数据相关联地存储在内存层中。这里,在存储数据是键值数据的情况下,内存数据索引例如可以是通过对每条数据的键进行哈希计算得到的哈希值。

在一些示例中,基于哈希的第一索引机制可以包括基于普通哈希的第一索引机制或者基于完美哈希的第一索引机制。

在基于普通哈希的第一索引机制生成数据索引的情况下,可以仅仅对内存层中经过数据更新的存储数据进行哈希计算来得到对应的内存数据索引。或者,可以对内存层中的所有存储数据进行哈希计算来得出对应的内存数据索引。在基于完美哈希的第一索引机制生成数据索引的情况下,需要对内存层中的所有存储数据(即,内存层的全量数据)进行哈希计算来得出对应的内存数据索引。

此外,可选地,在一些示例中,在内存层存储有旧数据的情况下,可以使用第一数据更新内存层中的存储数据。例如,可以将第一数据与内存层存储的旧数据合并。图4示出了根据本说明书的实施例的数据合并过程的示例流程图。如图4所示,在进行数据合并时,对于同一Key,如果Value的取值发生更新,则使用新数据来替换旧数据,比如,ID1所对应的数据。或者,如果第一数据具有旧数据中不存在的Key,则增加该Key所对应的数据,比如,ID5所对应的数据。然后,基于内存层中的更新后的存储数据,使用基于哈希的第一索引机制来生成对应的内存数据索引。

可选地,在一些示例中,内存数据索引可以与对应存储数据相关联地记载在内存层中的哈希表中。哈希表中存储的数据也可以称为内存数据。图5示出了根据本说明书的实施例的哈希表的示例示意图。图5中示出的Hash值A1到A5例如可以是内存层中的存储位置所对应的哈希槽位编号,例如,内存层中的存储槽位0-N中的槽位2、槽位0、槽位2、槽位3和槽位N。这里,哈希槽位编号相当于数据在内存层的内存数据索引。

在内存层中以哈希表来存储数据的情况下,可以在内存层中创建空哈希表(HashTable),然后将所创建的空哈希表充当内存层的当前服务哈希表来进行数据存储。在这种情况下,响应于接收到待存储的第一数据,将第一数据写入当前服务哈希表。在一些示例中,在当前服务哈希表存储有旧数据的情况下,在将第一数据写入数据库系统的内存层中的当前服务哈希表后,可以使用第一数据对当前服务哈希表进行存储数据更新。存储数据更新过程可以参照上面参考图4描述的数据合并过程。

此外,如果当前服务哈希表存满规定数据量的内存数据,例如,假设每个哈希表可以存储1M数据,则在当前服务哈希表中存满1M数据后,将当前服务哈希表封层为封层哈希表(FrozenHashTable),并且在内存层中创建新的空哈希表来充当当前服务哈希表。对于封层哈希表,所存储数据的Value值以及数据索引都不再发生变化。换言之,即使后续写入的新数据包括与FrozenHashTable中的Key相同的数据,也不会更新FrozenHashTable中的对应Key的数据。如果当前服务哈希表未存满规定数据量的内存数据,则该当前服务哈希表继续充当当前服务哈希表来继续存储数据。图6示出了根据本说明书的实施例的内存层所存储数据的示例示意图。在图6的示例中,内存层110存储有2个封层哈希表以及1个当前服务哈希表。

回到图2,在240,判断内存层中所存储数据是否满足第一预定条件。在本说明书中,第一预定条件可以包括所存储数据的数据量达到预定值,例如128M。这里,预定值的取值可以基于内存层的数据容量决定。或者,第一预定条件可以包括内存层的空闲内存空间占比不大于预定值,例如5%。如果内存层中所存储数据不满足第一预定条件,则返回到210,继续监测是否接收到新的待存储数据。

如果内存层中所存储数据满足第一预定条件,则在250,将内存层中的第二数据写入数据库系统的数据存储介质的存储层。这里,第二数据可以包括内存层中的部分或全部存储数据。例如,在一个示例中,可以将内存层中的所有存储数据写入数据存储介质的存储层。在这种情况下,第二数据包括内存层中的全部存储数据。在另一示例中,在内存层采用哈希表存储数据的情况下,可以将部分或全部封层哈希表中的存储数据写入数据存储介质的存储层。在这种情况下,第二数据包括部分或全部封层哈希表中的存储数据。

可选地,在将第二数据写入数据存储介质的存储层后,可以从内存层中删除第二数据,由此释放内存层中的相应存储空间。

在第二数据写入数据存储介质的存储层后,在260,按照基于完美哈希的第二索引机制来基于经过数据写入操作后的存储层中的全量存储数据生成存储层的数据索引文件。这里,存储层中的全量存储数据是指经过数据写入操作后存储层中存储的所有存储数据。例如,在存储层中先前没有存储任何数据的情况下,存储层中的全量存储数据是数据写入操作所写入的第二数据。在存储层中先前存储有旧数据的情况下,存储层中的全量存储数据是第二数据与存储层中的旧数据进行数据合并处理后的存储数据。

图7示出了根据本说明书的实施例的数据库系统中的存储数据的示例示意图。在图7的示例中,HashTable和PerfectHashTable对应于内存层中的数据数据,HashTable和PerfectHashTable中的槽位对应于内存层中的基于第一索引机制生成的内存数据索引,以及PerfectHashIndex对应于基于第二索引机制生成的数据存储介质的数据索引文件。PerfectHashIndex具有多个哈希槽位,每个哈希槽位用于存放存储数据的对应offset值,这里,offset值表示存储数据在数据存储介质的哈希文件中的存储位置相对于哈希文件首地址的偏移量。用于存储每个数据所对应的offset值的哈希槽位根据该存储数据来按照基于完美哈希的第二索引机制确定出。例如,在存储数据是键值数据的情况下,用于存储每个数据所对应的offset值的哈希槽位根据该存储数据的键来按照基于完美哈希的第二索引机制确定出。在图7的示例中,哈希文件由基于完美哈希值按序排列的存储数据组成,或者由基于完美哈希值按序排列的存储数据以及数据索引文件组成。

在根据基于完美哈希的第二索引机制生成的完美哈希索引中,数据集中的任意一个Key都会无冲突地映射到数据索引文件中的某个哈希槽位,并且在该哈希槽位处存储对应存储数据(Key&Value对)在哈希文件中的偏移量。按照这种存储方式,在进行数据查询时,可以通过Key生成对应的哈希值,并通过生成哈希文件时所使用的完美哈希函数来进行哈希计算,由此找到对应的哈希槽位,然后从哈希槽位拿到对应的Key&Value对在哈希文件中的偏移量,并基于偏移量从数据存储介质读取Key&Value对数据。

在如上生成数据存储介质的存储层的数据索引文件后,在270,将存储层的数据索引文件加载到内存层。内存层在接收到所加载的数据索引文件后,如果该内存层先前存储有该存储层的数据索引文件,则使用所接收的数据索引文件来替换先前存储的该存储层的数据索引文件。例如,假设在内存层将数据写入存储层之前,在内存层先前存储有存储层的数据索引文件F1,则在内存层将数据写入存储层后,会重新基于完美哈希的第二索引机制来生成新的数据索引文件F2,并且将新的数据索引文件F2加载到内存层。在接收到新的数据索引文件F2后,内存层会使用该新的数据索引文件F2来替换先前存储的数据索引文件F1。

此外,可选地,在一些示例中,在存储层存储有旧数据时,可以使用第二数据更新存储层中的存储数据。然后,基于存储层中的更新后的存储数据来生成存储层的数据索引文件。

此外,在一些示例中,数据存储介质可以被分层为至少两个分层存储层,该至少两个分层存储层中的各个分层存储层之间构成层次关系,由此构成分层存储层结构。图8示出了根据本说明书的实施例的具有分层存储层结构的数据存储介质的示例示意图。在图8的示例中,数据存储介质包括3个分层存储层,即,分层存储L0、分层存储层L1和分层存储层L2。分层存储L0是分层存储层结构的顶层存储层,分层存储层L1是分层存储层L0的下层分层存储层,以及分层存储层L2是分层存储层L1的下层分层存储层。在对数据存储介质进行分层时,分配给分层存储L0、分层存储层L1和分层存储层L2的存储空间自顶层存储层起自上向下依序增加,即,分层存储层L2的存储空间>分层存储层L1的存储空间>分层存储层L0的存储空间。

在数据存储介质具有分层存储层结构的情况下,每个分层存储层具有各自的数据索引文件。此外,对于每个分层存储层,在该分层存储层所存储数据满足第二预定条件时,该分层存储层的存储数据会被写入到下层分层存储层。然后,在下层分层存储层中,使用所写入的存储数据以及该下层分层存储层的当前存储数据来按照基于完美哈希的第二索引机制重新生成该下层分层存储层的数据索引文件。换言之,使用所写入的存储数据以及该下层分层存储层的当前存储数据得到该下层分层存储层的全量存储数据,然后基于该全量存储数据来按照基于完美哈希的第二索引机制重新生成该下层分层存储层的数据索引文件。在本说明书中,第二预定条件可以包括所存储数据的数据量达到预定值,例如128M。这里,预定值的取值可以基于内存层的数据容量决定。要说明的是,对于不同的分层存储层,所设置的预定值不同。随着分层存储层的层级增加,所设置的预定值会变大。或者,第二预定条件可以包括分层存储层的空闲内存空间占比不大于预定值,例如5%。

图9示出了根据本说明书的实施例的存储层数据写入及数据索引文件生成过程900的示例示意图。图9示出的仅仅是单个分层存储层的数据处理过程。

如图9所示,在910,当前分层存储层接收上层分层存储层写入的存储数据。在分层存储层是顶层存储层L0的情况下,所接收的存储数据是内存层写入的第二数据。

在920,使用上层分层存储层写入的存储数据来对当前分层存储层进行存储数据更新。例如,将上层分层存储层写入的存储数据与当前分层存储层的旧有数据进行数据合并。数据合并过程可以参考上面参照图4描述的数据合并过程。

在930,判断更新后的存储数据是否满足第二预定条件。

在更新后的存储数据不满足第二预定条件时,在940,基于更新后的存储数据(即,经过数据写入操作后的当前分层存储层的全量存储数据),按照基于完美哈希的第二索引机制来生成该当前分层存储层的数据索引文件。

在更新后的存储数据的数据量满足第二预定条件时,在950,将当前分层存储层的存储数据写入到该当前分层存储层的上层分层存储层。

图9中示出的数据处理过程自顶层开始自上而下逐层执行,直到某个分层存储层的存储数据不满足第二预定条件,或者,达到最底层分层存储层。

此外,可选地,在分层存储层的存储数据被写入到下层分层存储层后,还可以从该分层存储层中删除对应的存储数据。

此外,可选地,加载到内存层的数据索引文件可以仅仅包括数据存储介质中的存储数据发生变化的分层存储层的数据索引文件。然后,内存层使用所加载的数据索引文件来进行数据索引文件更新。例如,假设存在三个分层存储层L0、L1和L2,如果在进行内存数据写入时,发生将内存数据写入分层存储层L0并且将分层存储层L0的数据写入分层存储层L1,则分层存储层L0和L1的存储数据发生变化,由此分层存储层L0和L1的数据索引文件会被更新,即,分层存储层L0的数据索引文件会被清空或被删除,以及分层存储层L1的数据索引文件被更新为新的数据索引文件,由此数据存储介质可以将分层存储层L0和L1的更新后的数据索引文件加载到内存层,或者将分层存储层L1的更新后的数据索引文件加载到内存层,同时告知分层存储层L0没有存储数据,由此内存层可以利用分层存储层L0和L1的更新后的数据索引文件替换先前存储的对应数据索引文件,或者利用分层存储层L1的更新后的数据索引文件替换先前存储的对应数据索引文件,同时删除所存储的分层存储层L0的数据索引文件。

如上参照附图描述了根据本说明书的实施例的数据存储过程。在按照上述数据存储方法将数据存储到数据库系统中后,可以响应于用户发起的数据查询请求来进行数据查询。

图10示出了根据本说明书的实施例的数据查询过程1000的示例流程图。

如图10所示,在1010,响应于接收到用户发起的数据查询请求,按照基于哈希的第一索引机制来根据数据查询请求生成内存数据索引。例如,在存储数据是键值数据的情况下,可以按照基于哈希的第一索引机制来根据数据查询请求中的键生成内存数据索引。

在1020,使用内存数据索引在数据库系统的内存层的内存数据中进行数据查询。由于存储数据(例如,Key-Value对)与内存数据索引相对应地存储在内存层中,从而可以基于内存数据索引来在内存层的内存数据中直接进行数据查询。如果内存层的内存数据中存在匹配的内存数据索引,则可以直接从内存层获取与该匹配内存数据索引对应的查询数据。

在1030,判断在内存层的内存数据中是否查询到匹配数据。如果判断为在内存层的内存数据中查询到匹配数据,则在1090,将所查询到的匹配数据作为查询结果提供给用户。

如果判断为在内存层的内存数据中未查询到匹配数据,则在1040,按照基于完美哈希的第二索引机制来根据数据查询请求生成完美哈希值。例如,在存储数据是键值数据的情况下,可以按照基于完美哈希的第二索引机制来根据数据查询请求中的键生成完美哈希值。

在1050,在内存层,使用完美哈希值在内存层中存储的数据库系统的数据存储介质的存储层的数据索引文件中进行数据索引查询。具体地,首先,使用完美哈希值来在数据索引文件中查询是否存在匹配的哈希槽位。如果存在匹配的哈希槽位,则从该匹配的哈希槽位中获取该哈希槽位中存储的数据索引(即,offset值)。如果不存在匹配的哈希操作,则认为数据索引文件中不存在匹配的数据索引。

在1060,判断在数据索引文件中是否查询到匹配的数据索引。如果在数据索引文件中未查询到匹配的数据索引,则在1070,向用户返回不存在查询数据的查询结果。或者,在一个示例中,可以不进行任何处理,即,不向用户提供任何反馈消息。

如果在数据索引文件中查询到匹配的数据索引,则在1080,根据匹配的数据索引向数据存储介质发起数据读取。数据存储介质基于所接收的匹配数据索引来从存储层的对应存储位置获取查询数据,并将所获取的查询数据返回给内存层。在1090,在从数据存储介质读取查询数据后,将查询数据提供给用户。

此外,可选地,数据可以以哈希表的形式存储在内存层。在内存层存储有当前服务哈希表以及至少一个封层哈希表的情况下,在内存层进行数据查询时,可以针对内存层中的哈希表的哈希表创建时间自新到旧依序进行数据查询。具体地,首先,对当前服务哈希表进行数据查询,如果查询到对应查询数据,则数据查询结束。如果未查询到对应查询数据,则从最新创建的封层哈希表开始依序对封层哈希表进行数据查询,直到查询到对应查询数据,或者查询完所有封层哈希表。在一个示例中,哈希表创建时间可以利用哈希表时间戳来表征。

此外,可选地,在数据存储介质的存储层包括至少两个分层存储层的情况下,每个存储层的数据索引文件还可以具有存储层层级标识。相应地,针对分层存储层的数据索引查询,可以根据分层存储层的层级,自顶层存储层开始依次自上而下来在各自对应的数据索引文件中进行数据索引查询,直到查询到对应的数据索引或者查询完所有分层存储层的数据索引文件。

利用上述数据存储及数据查询方案,首先在内存层中进行数据查询,并且在内存层中不存在查询数据的情况下,在内存层所加载的数据存储介质的存储层的数据索引文件中进行数据索引查询,并且在数据索引文件中查询到对应的数据索引后,使用所查询到的数据索引来向数据存储介质发起数据读取,从而可以利用一次针对数据存储介质的数据读取操作来获取对应的查询数据,由此提升数据查询效率。

图11示出了根据本说明书的实施例的数据存储装置1100的示例方框图。如图11所示,数据存储装置1100可以包括内存写入单元1110、内存索引生成单元1120、存储介质写入单元1130、索引文件生成单元1140和索引文件加载单元1150。

内存写入单元1110被配置为响应于接收到待存储的第一数据,将第一数据写入数据库系统的内存层。内存索引生成单元1120被配置为按照基于哈希的第一索引机制生成内存层中的存储数据的内存数据索引。所生成的内存数据索引与对应存储数据相关联地存储在内存层中。

存储介质写入单元1130被配置为在内存层中所存储数据满第一预定条件时,将内存层中的第二数据写入数据库系统的数据存储介质的存储层。这里,第二数据包括内存层中的部分或全部存储数据。

索引文件生成单元1140被配置为按照基于完美哈希的第二索引机制来基于经过数据写入操作后的存储层中的全量存储数据生成存储层的数据索引文件。索引文件加载单元1150被配置为将存储层的数据索引文件加载到内存层。

此外,在一些示例中,数据存储装置1100还可以包括存储介质数据更新单元(未示出)。在存储层存储有旧数据时,存储介质数据更新单元使用第二数据更新存储层中的存储数据。

此外,在一些示例中,数据存储介质的存储层包括至少两个分层存储层。对于每个分层存储层,在该分层存储层所存储数据满足第二预定条件时,存储介质写入单元1130将该分层存储层的存储数据写入到下层分层存储层,并且索引文件生成单元1140基于经过数据写入操作后的下层分层存储层的全量存储数据来生成该下层分层存储层的数据索引文件。

此外,在一些示例中,在数据存储介质的存储层包括至少两个分层存储层的情况下,索引文件加载单元1150可以被配置为将存储数据发生变化的分层存储层的数据索引文件加载到内存层,以供内存层进行数据索引文件更新。

此外,在一些示例中,数据存储装置1100还可以包括存储介质数据删除单元(未示出)。在分层存储层的存储数据被写入到下层分层存储层后,存储介质数据删除单元从该分层存储层中删除对应的存储数据。可选地,在存储介质数据删除单元从该分层存储层中删除对应的存储数据后,还可以删除对应的数据索引文件。

此外,在一些示例中,内存层中创建有哈希表,并且数据索引与对应存储数据相关联地记载在内存层中的哈希表中。相应地,内存写入单元1110将第一数据写入数据库系统的内存层中的当前服务哈希表。此外,数据存储装置1100还包括内存数据封层单元(未示出)。在当前服务哈希表存满规定数据量的内存数据时,内存数据封层单元将当前服务哈希表封层为封层哈希表。

此外,在一些示例中,数据存储装置1100还可以包括内存数据更新单元(未示出)。在将第一数据写入数据库系统的内存层中的当前服务哈希表后,内存数据更新单元使用第一数据对当前服务哈希表进行存储数据更新。

此外,在一些示例中,数据存储装置1100还可以包括内存数据删除单元(未示出)。在将内存层中的第二数据写入数据库系统的数据存储介质的存储层中后,内存删除单元从内存层中删除第二数据。

此外,要说明的是,内存写入单元和存储介质写入单元可以采用同一单元或者不同单元实现。同样,内存索引生成单元1120和索引文件生成单元1140也可以采用同一单元或者不同单元实现。存储介质数据删除单元与内存数据删除单元以及存储介质数据更新单元与内存数据更新单元可以采用同一单元或者不同单元实现。

图12示出了根据本说明书的实施例的数据查询装置1200的示例方框图。如图12所示,数据查询装置1200包括内存索引生成单元1210、内存数据查询单元1220、完美哈希值生成单元1230、索引文件查询单元1240、存储介质读取单元1250和查询数据提供单元1260。

内存索引生成单元1210被配置为响应于接收到用户发起的数据查询请求,按照基于哈希的第一索引机制来根据数据查询请求生成内存数据索引。内存数据查询单元1220被配置为使用内存数据索引在数据库系统的内存层的内存数据中进行数据查询。

完美哈希值生成单元1230被配置为响应于在内存层的内存数据中未查询到匹配数据,按照基于完美哈希的第二索引机制来根据数据查询请求生成完美哈希值。索引文件查询单元1240被配置为使用完美哈希值,在内存层中存储的数据库系统的数据存储介质的存储层的数据索引文件中进行数据索引查询。存储介质读取单元1250被配置为响应于在数据索引文件中查询到匹配的数据索引,根据匹配的数据索引向数据存储介质发起数据读取。数据存储介质根据该匹配的数据索引在对应的存储位置获取查询数据。在从数据存储介质读取查询数据后,查询数据提供单元1260将查询数据提供给用户。

要说明的是,在一些示例中,内存数据查询单元1220和索引文件查询单元1240可以采用同一单元或者不同单元实现。

如上参照图1到图12,对根据本说明书实施例的数据存储方法、数据存储装置、数据查询方法以及数据查询装置进行了描述。上面的查询存储装置和数据查询装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。

图13示出了根据本说明书的实施例的基于计算机系统实现的数据存储装置1300的示意图。如图13所示,数据存储装置1300可以包括至少一个处理器1310、存储器(例如,非易失性存储器)1320、内存1330和通信接口1340,并且至少一个处理器1310、存储器1320、内存1330和通信接口1340经由总线1360连接在一起。至少一个处理器1310执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。

在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器1310:响应于接收到待存储的第一数据,将第一数据写入数据库系统的内存层;按照基于哈希的第一索引机制生成内存层中的存储数据的内存数据索引,所述内存数据索引与对应存储数据相关联地存储在内存层中;在内存层中所存储数据满足第一预定条件时,将内存层中的第二数据写入数据库系统的数据存储介质的存储层,第二数据包括内存层中的部分或全部存储数据,按照基于完美哈希的第二索引机制来基于经过数据写入操作后的存储层中的全量存储数据生成存储层的数据索引文件,以及将存储层的数据索引文件加载到内存层。

应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器1310进行本说明书的各个实施例中以上结合图1-图9以及图11描述的各种操作和功能。

图14示出了根据本说明书的实施例的基于计算机系统实现的数据查询装置1400的示意图。如图14所示,数据查询装置1400可以包括至少一个处理器1410、存储器(例如,非易失性存储器)1420、内存1430和通信接口1440,并且至少一个处理器1410、存储器1420、内存1430和通信接口1440经由总线1460连接在一起。至少一个处理器1410执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。

在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器1410:响应于接收到用户发起的数据查询请求,按照基于哈希的第一索引机制来根据数据查询请求生成内存数据索引;使用内存数据索引在数据库系统的内存层的内存数据中进行数据查询;响应于在内存层的内存数据中未查询到匹配数据,按照基于完美哈希的第二索引机制来根据数据查询请求生成完美哈希值;使用完美哈希值,在内存层中存储的数据库系统的数据存储介质的存储层的数据索引文件中进行数据索引查询;响应于在数据索引文件中查询到匹配的数据索引,根据匹配的数据索引向数据存储介质发起数据读取;以及在从数据存储介质读取查询数据后,将查询数据提供给用户。

应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器1410执行本说明书的各个实施例中以上结合图10以及图12描述的各种操作和功能。

根据一个实施例,提供了一种比如机器可读介质(例如,非暂时性机器可读介质)的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本说明书的各个实施例中以上结合图1-图12描述的各种操作和功能。具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。

在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的一部分。

可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD-RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。

根据一个实施例,提供一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序当被处理器执行时,使得处理器执行本说明书的各个实施例中以上结合图1-图12描述的各种操作和功能。

本领域技术人员应当理解,上面公开的各个实施例可以在不偏离发明实质的情况下做出各种变形和修改。因此,本发明的保护范围应当由所附的权利要求书来限定。

需要说明的是,上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。

以上各实施例中,硬件单元或模块可以通过机械方式或电气方式实现。例如,一个硬件单元、模块或处理器可以包括永久性专用的电路或逻辑(如专门的处理器,FPGA或ASIC)来完成相应操作。硬件单元或处理器还可以包括可编程逻辑或电路(如通用处理器或其它可编程处理器),可以由软件进行临时的设置以完成相应操作。具体的实现方式(机械方式、或专用的永久性电路、或者临时设置的电路)可以基于成本和时间上的考虑来确定。

上面结合附图阐述的具体实施方式描述了示例性实施例,但并不表示可以实现的或者落入权利要求书的保护范围的所有实施例。在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。

本公开内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本公开内容。对于本领域普通技术人员来说,对本公开内容进行的各种修改是显而易见的,并且,也可以在不脱离本公开内容的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。因此,本公开内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。

完整详细技术资料下载
上一篇:石墨接头机器人自动装卡簧、装栓机
下一篇:数据一致性确定方法、装置、设备及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!