CN111177143A - 键值数据存储方法、装置、存储介质与电子设备 - Google Patents
键值数据存储方法、装置、存储介质与电子设备 Download PDFInfo
- Publication number
- CN111177143A CN111177143A CN201910506763.6A CN201910506763A CN111177143A CN 111177143 A CN111177143 A CN 111177143A CN 201910506763 A CN201910506763 A CN 201910506763A CN 111177143 A CN111177143 A CN 111177143A
- Authority
- CN
- China
- Prior art keywords
- storage unit
- key
- data
- target
- value
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 89
- 238000013500 data storage Methods 0.000 title claims abstract description 30
- 230000015654 memory Effects 0.000 claims abstract description 192
- 230000002159 abnormal effect Effects 0.000 claims description 5
- 238000004590 computer program Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 abstract description 27
- 230000009286 beneficial effect Effects 0.000 abstract description 2
- 238000000638 solvent extraction Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 210000000352 storage cell Anatomy 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 210000004027 cell Anatomy 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种键值数据存储方法、键值数据存储装置、计算机可读存储介质与电子设备,属于数据处理技术领域。该方法包括:获取待存储数据,包括成对的键数据和值数据;根据所述键数据的哈希值,在共享内存的哈希存储区域中确定所述键数据对应的目标哈希存储单元;将所述键数据存储至所述共享内存的键存储区域中的目标键存储单元,所述目标键存储单元与所述目标哈希存储单元具有关联;将所述值数据存储至所述共享内存的值存储区域中的目标值存储单元,所述目标键存储单元的指针指向所述目标值存储单元。本公开能够解决共享内存场景下无法有效存储键值数据的问题,有利于不同的业务进程间的数据共享,提高效率。
Description
技术领域
本公开涉及数据处理技术领域,尤其涉及一种键值数据存储方法、键值数据存储装置、计算机可读存储介质与电子设备。
背景技术
共享内存作为计算机中一种大容量内存,方便业务进程加载和使用位于其中的数据,在业务进程重新启动后,共享内存中的数据仍然能够维持,从而提高数据使用的效率。然而,共享内存作为一维地址的存储空间,难以直接存储复杂的数据结构;特别是在搜索等领域,有大量的键值(key-value,KV)数据,例如某篇文章对应的特征数据等,这些数据经常占用数GB甚至数十GB的内存。因此,如何在共享内存中存储键值数据,是现有技术亟待解决的问题。
现有的键值数据存储方案主要分为两种:第一种是基于第三方的组件部署独立的键值数据存储服务,第三方组件如Redis、Memcached(Redis和Memcached都是常用的键值数据库)等,通过网络访问来提供键值数据存储;第二种是基于标准容器的Map存储(Map是一种将键对象和值对象进行关联的容器),Map将键值数据存储在内存中,业务进程在内存创建Map对象,然后从磁盘上加载数据到内存中,解析数据为键值形式,插入到Map对象中。
然而,在上述第一种方案中,如果业务进程需要一次性访问大量键值数据,会导致多次的网络访问,引发大数据量的网络传输,造成网络侧的访问延时和传输延时;在上述第二种方案中,需要业务进程维护键值数据的加载,对于数据量较大的键值数据,如果每次业务进程在启动时都进行数据加载,会导致较长的启动时间,严重影响在线服务的可靠性和稳定性。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开提供了一种键值数据存储方法、键值数据存储装置、计算机可读存储介质与电子设备,进而至少在一定程度上改善现有技术无法在共享内存中有效存储键值数据的问题。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
根据本公开的第一方面,提供一种键值数据存储方法,包括:获取待存储数据,包括成对的键数据和值数据;根据所述键数据的哈希值,在共享内存的哈希存储区域中确定所述键数据对应的目标哈希存储单元;将所述键数据存储至所述共享内存的键存储区域中的目标键存储单元,所述目标键存储单元与所述目标哈希存储单元具有关联;将所述值数据存储至所述共享内存的值存储区域中的目标值存储单元,所述目标键存储单元的指针指向所述目标值存储单元。
可选的,所述方法还包括:将所述共享内存划分为所述哈希存储区域、所述键存储区域和所述值存储区域;向所述哈希存储区域的每个存储单元分别写入不同的预设哈希值,得到多个哈希存储单元;将所述键存储区域的存储单元确定为键存储单元;将所述值存储区域的存储单元确定为值存储单元。
可选的,所述哈希存储区域包括N个存储单元,所述预设哈希值包括0到N-1,N为不小于2的正整数;所述键数据的哈希值为所述键数据对N取模。
可选的,所述目标键存储单元通过以下步骤确定:在所述键存储区域中将一空闲的键存储单元确定为所述目标键存储单元;将所述目标键存储单元关联至所述目标哈希存储单元。
可选的,所述将所述目标键存储单元关联至所述目标哈希存储单元,包括:将所述目标键存储单元添加至所述目标哈希存储单元的指针所指向的单向链表。
可选的,所述键存储区域中包括一空闲键指示单元,所述空闲键指示单元的指针指向第一个空闲的键存储单元,所述空闲的键存储单元的任意两个相邻单元中前一个单元的指针指向后一个单元。
可选的,所述方法还包括:当所述目标键存储单元中的键数据被删除时,解除所述目标键存储单元和所述目标哈希存储单元的关联。
可选的,所述目标值存储单元通过以下步骤确定:根据所述值数据的数据量确定所需的值存储单元数量,在所述值存储区域中将对应数量的空闲的值存储单元确定为所述目标值存储单元;将所述目标键存储单元的指针指向所述目标值存储单元中的第一个单元,所述目标值存储单元的任意两个相邻单元中前一个单元的指针指向后一个单元。
可选的,所述方法还包括:当所述目标值存储单元中的值数据被删除时,解除由所述目标键存储单元指向所述目标值存储单元的指针。
可选的,所述方法还包括:当对所述共享内存中的数据进行操作时,将操作信息记录到操作日志中;当所述共享内存发生异常时,根据所述操作日志恢复所述共享内存中的数据。
可选的,所述共享内存包括第一共享内存和第二共享内存;所述方法还包括:将所述第一共享内存和第二共享内存之一作为写入共享内存,另一作为读取共享内存;当有数据读取请求时,从所述读取共享内存读取数据;当有数据更新请求时,将更新后的数据写入所述写入共享内存,并将所述写入共享内存作为新的读取共享内存,将所述读取共享内存作为新的写入共享内存。
可选的,所述方法还包括:当通过所述键数据查找所述值数据时,根据所述键数据的哈希值,在所述哈希存储区域中确定所述目标哈希存储单元;从所述目标哈希存储单元所关联的键存储单元中,查找所述键数据所在的所述目标键存储单元;从所述目标键存储单元的指针所指向的所述目标值存储单元中,获取所述值数据。
根据本公开的第二方面,提供一种键值数据存储装置,包括:数据获取模块,用于获取待存储数据,包括成对的键数据和值数据;哈希确定模块,用于根据所述键数据的哈希值,在共享内存的哈希存储区域中确定所述键数据对应的目标哈希存储单元;键存储模块,用于将所述键数据存储至所述共享内存的键存储区域中的目标键存储单元,所述目标键存储单元与所述目标哈希存储单元具有关联;值存储模块,用于将所述值数据存储至所述共享内存的值存储区域中的目标值存储单元,所述目标键存储单元的指针指向所述目标值存储单元。
可选的,所述装置还包括:内存配置模块,用于将所述共享内存划分为所述哈希存储区域、所述键存储区域和所述值存储区域,向所述哈希存储区域的每个存储单元分别写入不同的预设哈希值,得到多个哈希存储单元,将所述键存储区域的存储单元确定为键存储单元,以及将所述值存储区域的存储单元确定为值存储单元。
可选的,所述哈希存储区域包括N个存储单元,所述预设哈希值包括0到N-1,N为不小于2的正整数;所述键数据的哈希值为所述键数据对N取模。
可选的,所述键存储模块通过执行以下方法确定所述目标键存储单元:在所述键存储区域中将一空闲的键存储单元确定为所述目标键存储单元;将所述目标键存储单元关联至所述目标哈希存储单元。
可选的,所述键存储模块,还用于将所述目标键存储单元添加至所述目标哈希存储单元的指针所指向的单向链表。
可选的,所述键存储区域中包括一空闲键指示单元,所述空闲键指示单元的指针指向第一个空闲的键存储单元,所述空闲的键存储单元的任意两个相邻单元中前一个单元的指针指向后一个单元。
可选的,所述键存储模块,还用于当所述目标键存储单元中的键数据被删除时,解除所述目标键存储单元和所述目标哈希存储单元的关联。
可选的,所述值存储模块通过执行以下方法确定所述目标值存储单元:根据所述值数据的数据量确定所需的值存储单元数量,在所述值存储区域中将对应数量的空闲的值存储单元确定为所述目标值存储单元;将所述目标键存储单元的指针指向所述目标值存储单元中的第一个单元,所述目标值存储单元的任意两个相邻单元中前一个单元的指针指向后一个单元。
可选的,所述值存储模块,还用于当所述目标值存储单元中的值数据被删除时,解除由所述目标键存储单元指向所述目标值存储单元的指针。
可选的,所述装置还包括:数据恢复模块,用于当对所述共享内存中的数据进行操作时,将操作信息记录到操作日志中,以及当所述共享内存发生异常时,根据所述操作日志恢复所述共享内存中的数据。
可选的,所述共享内存包括第一共享内存和第二共享内存,所述第一共享内存和第二共享内存之一作为写入共享内存,另一作为读取共享内存;所述装置还包括:数据读取模块,用于当有数据读取请求时,从所述读取共享内存读取数据;数据更新模块,用于当有数据更新请求时,将更新后的数据写入所述写入共享内存,并将所述写入共享内存作为新的读取共享内存,将所述读取共享内存作为新的写入共享内存。
可选的,所述装置还包括:数据读取模块,用于当通过所述键数据查找所述值数据时,根据所述键数据的哈希值,在所述哈希存储区域中确定所述目标哈希存储单元,从所述目标哈希存储单元所关联的键存储单元中,查找所述键数据所在的所述目标键存储单元,并从所述目标键存储单元的指针所指向的所述目标值存储单元中,获取所述值数据。
根据本公开的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一种键值数据存储方法。
根据本公开的第四方面,提供一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行上述任意一种键值数据存储方法。
本公开的示例性实施方式具有以下有益效果:
通过构建哈希存储区域、键存储区域和值存储区域的一维地址存储空间,可以将键值数据方便地存储到共享内存中,且在查找数据时,可以根据键数据唯一地查找到所需的值数据,从而解决了共享内存场景下无法有效存储键值数据的问题,有利于不同的业务进程直接访问数据,而无需在每次使用前加载数据,也无需通过网络访问,因此提高了效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本示例性实施方式中一种键值数据存储方法的子流程图;
图2示出本示例性实施方式中一种共享内存的结构;
图3示出本示例性实施方式中一种键值数据存储方法的流程图;
图4示出本示例性实施方式中一种哈希存储区域的结构;
图5示出本示例性实施方式中一种键存储区域的结构;
图6示出本示例性实施方式中一种值存储区域的结构
图7示出本示例性实施方式中另一种键值数据存储方法的子流程图
图8示出本示例性实施方式中一种键值数据存储装置的结构框图;
图9示出本示例性实施方式中一种用于实现上述方法的计算机可读存储介质;
图10示出本示例性实施方式中一种用于实现上述方法的电子设备。
具体实施方式
现在将参考附图更全面地描述示例性实施方式。然而,示例性实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例性实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。
本公开的示例性实施方式首先提供一种键值数据存储方法,用于在共享内存中存储键值数据,以便于后续不同的业务进程进行数据查找。该方法的执行主体可以是业务服务器,也可以是终端设备。
在存储数据前,可以先对共享内存的结构进行配置。以业务服务器为例,在运行业务进程前,首先在内存中申请共享内存,共享内存为一维地址的存储空间,由内存单元按照一维方向排列组成,通常记录首个内存单元的地址以及后面每个内存单元相对于首个内存单元的偏移量,以此确定每个内存单元的地址。申请共享内存后,可以执行图1所示的方法以配置共享内存的结构:
步骤S110,将共享内存划分为哈希存储区域、键存储区域和值存储区域。
步骤S120,向哈希存储区域的每个存储单元分别写入不同的预设哈希值,得到多个哈希存储单元;
步骤S130,将键存储区域的存储单元确定为键存储单元;
步骤S140,将值存储区域的存储单元确定为值存储单元。
如图2所示,哈希存储区域、键存储区域和值存储区域为共享内存的三个子区域,其基本存储单元都是共享内存的内存单元,本质上是相同的,只是后续存放的数据类型不同,本示例性实施方式将哈希存储区域的存储单元称为哈希存储单元,用于存储预设哈希值,将键存储区域的存储单元称为键存储单元,用于存储键值数据的键,将值存储区域的存储单元称为值存储单元,用于存储键值数据的值。
根据实际应用需求,可以确定哈希存储区域、键存储区域和值存储区域所需空间的比例关系,进而决定分别划分多少共享内存空间到三个区域。例如,根据使用的哈希算法,确定哈希冲突的概率,以此确定哈希存储区域和键存储区域的比例,再根据场景中键值数据的特点确定键数据和值数据的大小比例(如在文章搜索场景中,该比例可能是KB:GB级别),即为键存储区域和值存储区域的比例,从而确定了三个区域的比例关系,可以根据共享内存的大小计算三个区域的大小,或者先根据需要存储的键值数据总数确定键存储区域的大小(键存储区域的存储单元数=所能存储的键值数据总条数),再根据比例关系计算另两个区域的大小。
在划分时,以哈希存储区域为例,可以从共享内存分出一段连续的内存单元形成哈希存储区域,也可以分出多段不连续的内存单元形成哈希存储区域,键存储区域和值存储区域同样也可以由连续或不连续的内存单元组成,本公开对此不做限定。对共享区域的划分可以具体包括以下几种具体实施方式:
(1)在共享内存中配置一张关于存储单元地址的列表,记录哪些存储单元属于哈希存储区域,哪些属于键存储区域,哪些属于值存储区域。但是在未存储数据的情况下,三个区域之间不存在关联关系。
(2)通过指针配置哈希存储区域、键存储区域和值存储区域的层级关系,例如:通过单向链表,将一部分键存储单元链接到一个哈希存储单元,另一部分键存储单元链接到另一个哈希存储单元……再将一部分值存储单元链接到一个键存储单元,另一部分值存储单元链接到另一个键存储单元……从而在一维地址的基础上,配置了三类存储单元之间的层级与关联关系,与上述划分方式(1)不同的是,在未存储数据的情况下,三个区域之间就已经存在关联关系。
本示例性实施方式中,无论采取哪种划分方式,在划分出哈希存储区域后,可以向其中的每个存储单元分别写入不同的预设哈希值,从而得到上述哈希存储单元。预设哈希值用于后续存储数据时作为一种索引信息,相当于对共享内存划分子集,因此哈希存储单元的功能类似于哈希桶。下面提供一种预设哈希值的设置方式:如果哈希存储区域包括N个存储单元(N为不小于2的正整数),则可以将N的余数作为预设哈希值,包括0到N-1,分别写入N个存储单元中。
对于键存储区域和值存储区域,在划分后无需写入数据,当然也可以写入一部分必要的配置数据,例如记录存储单元地址的列表等,键存储单元和值存储单元基本为空闲状态。
基于上述配置的共享内存,键值数据存储方法的流程可以参考图3所示,包括步骤S310~S340:
步骤S310,获取待存储数据,包括成对的键数据和值数据。
其中,待存储数据可以是业务进程向共享内存中加载的数据,例如:在搜索场景中,服务器端需要预先离线存储文章对应的特征信息,某篇文章可以用整数的键数据表示索引,对应的特征信息可以表示为字符串形式的值数据,由此构成了成对的键值数据,为待存储数据。本示例性实施方式中,对于向共享内存加载的任意键值数据,都可以作为待存储数据,启动图3的方法流程。
步骤S320,根据键数据的哈希值,在共享内存的哈希存储区域中确定该键数据对应的目标哈希存储单元。
本示例性实施方式对键数据进行哈希运算,得到哈希值,例如采用正整数N的余数作为哈希存储单元的预设哈希值时,可以将键数据对N取模,以得到键数据的哈希值,然后将该哈希值与每个哈希存储单元的预设哈希值匹配,如果匹配到哈希值相同的哈希存储单元,则为目标哈希存储单元,表示待存储数据关联到目标哈希存储单元。此外,也可以采用MD5等其他哈希算法,相应的可以对哈希存储单元的预设哈希值进行调整,以使键数据的哈希值能够对应于预设哈希值,本公开对此不做限定。
步骤S130,将键数据存储至共享内存的键存储区域中的目标键存储单元,目标键存储单元与目标哈希存储单元具有关联。
目标键存储单元是本示例性实施方式中所确定的、用于存储上述键数据的特定的一个键存储单元,具体而言,目标键存储单元可以通过以下两种方案确定:
方案一、基于上述的共享内存划分方式(1),在划分后的初始阶段,哈希存储单元和键存储单元之间不存在任何关联,随着数据存储的进行,逐渐建立两者的关联。以存储上述键数据为例,在存储键数据的过程中,建立目标键存储单元和目标哈希存储单元的关联,具体包括:在键存储区域中将一空闲的键存储单元确定为目标键存储单元;将目标键存储单元关联至目标哈希存储单元。其中,空闲的键存储单元是指未存储任何数据的键存储单元,空闲键存储单元与任何哈希存储单元之间事先不存在关联。本示例性实施方式中,可以选取任一空闲键存储单元,作为目标键存储单元,将其与目标哈希存储单元建立关联。在该过程中,选取空闲的键存储单元后,可以先将键数据写入其中,再将该存储单元关联至目标哈希存储单元,也可以先将该存储单元关联至目标哈希存储单元,再将键数据写入其中,本公开对此先后顺序不做限定。
进一步的,在将目标键存储单元关联至目标哈希存储单元时,可以将目标键存储单元添加至目标哈希存储单元的指针所指向的单向链表,该单向链表是由关联到目标哈希存储单元的所有键存储单元顺次连接形成的链表。参考图4举例说明,哈希存储单元A的预设哈希值为A,哈希存储单元B的预设哈希值为B,在共享内存配置后的初始阶段,尚未存储任何数据,哈希存储单元A和B均未关联任何键存储单元;在存储数据时,如果键的哈希值为A,则选取任一空闲键存储单元,如图中的键存储单元A1,将哈希存储单元A的指针指向键存储单元A1,形成单向链表,并将键写入键存储单元A1;后续如果再存储哈希值为A的键,依次将键存储单元链接到该单向链表之后;对于哈希值为B的键,其情况类似,也在哈希存储单元B之后形成了单向链表。由此,在每个哈希存储单元之后,都有一条单向链表,链表上的每个键存储单元中所存储的键,其哈希值等于哈希存储单元的预设哈希值。
本示例性实施方式提供两种管理和维护空闲键存储单元的方法:
一种是在键存储区域中配置一张空闲键存储单元列表,记录所有的空闲键存储单元地址信息,例如可以是相对于共享内存首个存储单元的地址偏移量,则可以通过该列表快速发现空闲键存储单元。
另一种是通过空闲键存储单元之间的单向链表进行管理。如图5所示,键存储区域中可以将一个存储单元设置为空闲键指示单元,其可以位于键存储区域的任意位置,空闲键指示单元的指针指向第一个空闲的键存储单元,空闲的键存储单元中,任意两个相邻单元中前一个单元的指针指向后一个单元,即从空闲键指示单元开始,形成了由空闲键存储单元顺次连接的单向链表,通过该链表可以较为容易地找到空闲键存储单元。
需要补充的是,当目标键存储单元中的键数据被删除时,可以解除目标键存储单元和目标哈希存储单元的关联,此时目标键存储单元恢复为空闲的键存储单元;由此,哈希存储单元所关联的键存储单元都是已写入数据的,空闲的键存储单元不与任何哈希存储单元关联,可视为由所有哈希存储单元“公用”的键存储单元。在删除目标键存储单元中的键数据后,可以将目标键存储单元重新添加到空闲键存储单元的单向链表中。
方案二、基于上述的共享内存划分方式(2),在划分后即通过指针确定了哈希存储单元、键存储单元和值存储单元之间的层级和关联关系,则在确定目标哈希存储单元后,可以查找与其关联的键存储单元,从中选取一个空闲的键存储单元,通常可以按照目标哈希存储单元所指向的键存储单元,顺次找到第一个空闲的单元,作为目标键存储单元。换而言之,在这种情况下,目标键存储单元和目标哈希存储单元的关联是预先存在的,并不是在存储数据的过程中形成的。
步骤S140,将值数据存储至共享内存的值存储区域中的目标值存储单元,目标键存储单元的指针指向目标值存储单元。
目标值存储单元是本示例性实施方式中所确定的、用于存储上述值数据的特定的一个或多个(通常是多个)值存储单元,与步骤S130中确定目标键存储单元类似,目标值存储单元也可以通过以下两种方案确定(为了区别于上述方案一和方案二,以下两种方案用方案三和方案四表示):
方案三、基于上述的共享内存划分方式(1),在划分后的初始阶段,键存储单元和值存储单元之间不存在任何关联,随着数据存储的进行,逐渐建立两者的关联。以存储上述值数据为例,在存储值数据的过程中,建立目标值存储单元和目标键存储单元的关联,具体包括:根据值数据的数据量确定所需的值存储单元数量,在值存储区域中将对应数量的空闲的值存储单元确定为目标值存储单元;将目标键存储单元的指针指向目标值存储单元中的第一个单元,目标值存储单元的任意两个相邻单元中前一个单元的指针指向后一个单元。
其中,空闲的值存储单元是指未存储任何数据的值存储单元,空闲值存储单元与任何键存储单元之间事先不存在指针指向的关联。本示例性实施方式中,参考上述图5所示,假设目标键存储单元为键存储单元A1,根据值数据计算出需要M个值存储单元,可以选取任意M个空闲值存储单元,分别为值存储单元A11、A12、A13……将键存储单元A1的指针指向值存储单元A11,值存储单元A11的指针指向A12……从而形成以键存储单元A1为起始的单向链表,值数据在值存储单元A11、A12、A13中按顺序存储。在该过程中,选取空闲的值存储单元后,可以先将值数据写入其中,再将目标键存储单元指向该值存储单元,也可以先将目标键存储单元指向该值存储单元,再将值数据写入其中,本公开对此先后顺序不做限定。
由图5所示,本示例性实施方式中,键存储单元上设置有两个指针:一个指针用于在哈希存储单元下的单向链表中,指向下一个键哈希值相同的键存储单元;另一个指针用于在本键存储单元下的单向链表中,指向存放对应值数据的值存储单元。
本示例性实施方式提供两种管理和维护空闲值存储单元的方法:
一种是在值存储区域中配置一张空闲值存储单元列表,记录所有的空闲值存储单元地址信息,例如可以是相对于共享内存首个存储单元的地址偏移量,则可以通过该列表快速发现空闲值存储单元。
另一种是通过空闲值存储单元之间的单向链表进行管理。如图6所示,值存储区域中可以将一个存储单元设置为空闲值指示单元,其可以位于值存储区域的任意位置,空闲值指示单元的指针指向第一个空闲的值存储单元,空闲的值存储单元中,任意两个相邻单元中前一个单元的指针指向后一个单元,即从空闲值指示单元开始,形成了由空闲值存储单元顺次连接的单向链表,通过该链表可以较为容易地找到空闲值存储单元。
需要补充的是,当目标值存储单元中的值数据被删除时,可以解除由目标键存储单元指向目标值存储单元的指针,即解除目标值存储单元和目标键存储单元的关联,此时目标值存储单元恢复为空闲的值存储单元;由此,键存储单元所关联的值存储单元都是已写入数据的,空闲的值存储单元不与任何键存储单元关联,可视为由所有键存储单元“公用”的值存储单元。在删除目标值存储单元中的值数据后,可以将目标值存储单元重新添加到空闲值存储单元的单向链表中。
方案四、基于上述的共享内存划分方式(2),在划分后即通过指针确定了哈希存储单元、键存储单元和值存储单元之间的层级和关联关系,则在确定目标键存储单元后,可以查找其指针所指向的值存储单元,目标值存储单元。换而言之,在这种情况下,目标值存储单元和目标键存储单元的关联是预先存在的,并不是在存储数据的过程中形成的。
通过上述方法在共享内存中存储键值数据,在查找数据时,例如业务进程需要根据键数据查找值数据,其事先不知道值数据在共享内存中的存储地址,则可以通过图7所示的方法实现:
步骤S710,当通过键数据查找值数据时,根据键数据的哈希值,在哈希存储区域中确定目标哈希存储单元;
步骤S720,从目标哈希存储单元所关联的键存储单元中,查找键数据所在的目标键存储单元;
步骤S730,从目标键存储单元的指针所指向的目标值存储单元中,获取值数据。
其中,目标哈希存储单元的预设哈希值和待查找键数据的哈希值相同,通过匹配确定键数据对应的目标哈希存储单元;目标键存储单元所存储的键数据和待查找的键数据相同,在目标哈希存储单元指向的单向链表中,顺次查找每个键存储单元的键数据和待查找的键数据是否相同,相同的即为目标键存储单元;再从目标键存储单元所指向的目标值存储单元中,读取所需的值数据,通常从目标键存储单元所指向的第一个值存储单元开始,按照单向链表顺次读取所有的数据,组合起来即为所需的值数据。可见,上述数据查找过程可视为数据存储过程的反向过程,在事先不知道值数据地址的情况下,也可以较为容易地查找到数据,满足共享内存中不同业务进程共享数据的需求。
基于上述说明,本示例性实施方式中,通过构建哈希存储区域、键存储区域和值存储区域的一维地址存储空间,可以将键值数据方便地存储到共享内存中,且在查找数据时,可以根据键数据唯一地查找到所需的值数据,从而解决了共享内存场景下无法有效存储键值数据的问题,有利于不同的业务进程直接访问数据,而无需在每次使用前加载数据,也无需通过网络访问,因此提高了效率。
在一示例性实施方式中,键值数据存储方法还可以包括以下步骤:
当对共享内存中的数据进行操作时,将操作信息记录到操作日志中;
当共享内存发生异常时,根据操作日志恢复共享内存中的数据。
其中,操作日志通常位于磁盘文件上,具有非易失性,可以包括操作码(如0:添加,1:修改,2:删除),所操作的数据的键的长度,键数据,值的长度,值数据等,另外也可以包括共享内存中数据的备份信息或快照等,操作日志的文件组织方式可以是操作信息记录连续存放。当服务器重启或出现其他异常时,如果导致共享内存中的数据丢失,则可以根据操作日志的内容,重建共享内存中的数据。例如:加载最近一次备份的数据信息,然后根据备份后的每一条操作日志进行操作回放,从而恢复数据。
在一示例性实施方式中,可以申请两个共享内存,分别为第一共享内存和第二共享内存,均包括哈希存储区域、键存储区域和值存储区域的结构。在实际应用中,可以将第一共享内存和第二共享内存之一作为写入共享内存,另一作为读取共享内存;当有数据读取请求时,从上述读取共享内存读取数据;当有数据更新请求时,将更新后的数据写入上述写入共享内存,并将上述写入共享内存作为新的读取共享内存,将上述读取共享内存作为新的写入共享内存。换而言之,第一共享内存和第二共享内存是交替使用的,在同一时间,一个内存仅用于加载数据,为上述写入共享内存,一个内存仅用于访问数据,为上述读取共享内存。在写入共享内存中的数据更新后,将两个共享内存的角色交换。通过这样的方式,可以形成共享内存的缓冲,避免共享内存同时进行数据加载与访问,进一步提高效率。
本公开的示例性实施方式还提供了一种键值数据存储装置,如图8所示,该装置800可以包括:数据获取模块810,用于获取待存储数据,包括成对的键数据和值数据;哈希确定模块820,用于根据键数据的哈希值,在共享内存的哈希存储区域中确定键数据对应的目标哈希存储单元;键存储模块830,用于将键数据存储至共享内存的键存储区域中的目标键存储单元,目标键存储单元与目标哈希存储单元具有关联;值存储模块840,用于将值数据存储至共享内存的值存储区域中的目标值存储单元,目标键存储单元的指针指向目标值存储单元。
在一示例性实施方式中,键值数据存储装置800还可以包括:内存配置模块(图中未示出),用于将共享内存划分为哈希存储区域、键存储区域和值存储区域,向哈希存储区域的每个存储单元分别写入不同的预设哈希值,得到多个哈希存储单元,将键存储区域的存储单元确定为键存储单元,以及将值存储区域的存储单元确定为值存储单元。
在一示例性实施方式中,哈希存储区域可以包括N个存储单元,预设哈希值包括0到N-1,N为不小于2的正整数;上述键数据的哈希值可以是键数据对N取模。
在一示例性实施方式中,键存储模块830可以通过执行以下方法确定目标键存储单元:在键存储区域中将一空闲的键存储单元确定为目标键存储单元;将目标键存储单元关联至目标哈希存储单元。
在一示例性实施方式中,键存储模块830还可以用于将目标键存储单元添加至目标哈希存储单元的指针所指向的单向链表。
在一示例性实施方式中,键存储区域中可以包括一空闲键指示单元,空闲键指示单元的指针指向第一个空闲的键存储单元,空闲的键存储单元的任意两个相邻单元中前一个单元的指针指向后一个单元。
在一示例性实施方式中,键存储模块830还可以用于当目标键存储单元中的键数据被删除时,解除目标键存储单元和目标哈希存储单元的关联。
在一示例性实施方式中,值存储模块840可以通过执行以下方法确定目标值存储单元:根据值数据的数据量确定所需的值存储单元数量,在值存储区域中将对应数量的空闲的值存储单元确定为目标值存储单元;将目标键存储单元的指针指向目标值存储单元中的第一个单元,目标值存储单元的任意两个相邻单元中前一个单元的指针指向后一个单元。
在一示例性实施方式中,值存储模块840还可以用于当目标值存储单元中的值数据被删除时,解除由目标键存储单元指向目标值存储单元的指针。
在一示例性实施方式中,键值数据存储装置800还可以包括:数据恢复模块图中未示出),用于当对共享内存中的数据进行操作时,将操作信息记录到操作日志中,以及当共享内存发生异常时,根据操作日志恢复共享内存中的数据。
在一示例性实施方式中,共享内存可以包括第一共享内存和第二共享内存,第一共享内存和第二共享内存之一作为写入共享内存,另一作为读取共享内存;键值数据存储装置800还可以包括:数据读取模块(图中未示出),用于当有数据读取请求时,从上述读取共享内存读取数据;数据更新模块(图中未示出),用于当有数据更新请求时,将更新后的数据写入上述写入共享内存,并将上述写入共享内存作为新的读取共享内存,将上述读取共享内存作为新的写入共享内存。
在一示例性实施方式中,键值数据存储装置800还可以包括:数据读取模块(图中未示出),用于当通过键数据查找值数据时,根据键数据的哈希值,在哈希存储区域中确定目标哈希存储单元,从目标哈希存储单元所关联的键存储单元中,查找键数据所在的目标键存储单元,并从目标键存储单元的指针所指向的目标值存储单元中,获取值数据。
上述装置中未披露的方案细节内容可以参见方法部分的实施例内容,因而不再赘述。
所属技术领域的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
本公开的示例性实施方式还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。
参考图9所示,描述了根据本公开的示例性实施方式的用于实现上述方法的程序产品900,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本公开的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
本公开的示例性实施方式还提供了一种能够实现上述方法的电子设备。下面参照图10来描述根据本公开的这种示例性实施方式的电子设备1000。图10显示的电子设备1000仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图10所示,电子设备1000可以以通用计算设备的形式表现。电子设备1000的组件可以包括但不限于:上述至少一个处理单元1010、上述至少一个存储单元1020、连接不同系统组件(包括存储单元1020和处理单元1010)的总线1030和显示单元1040。
存储单元1020存储有程序代码,程序代码可以被处理单元1010执行,使得处理单元1010执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。例如,处理单元1010可以执行图1、图3或图7所示的方法步骤等。
存储单元1020可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)1021和/或高速缓存存储单元1022,还可以进一步包括只读存储单元(ROM)1023。
存储单元1020还可以包括具有一组(至少一个)程序模块1025的程序/实用工具1024,这样的程序模块1025包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线1030可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备1000也可以与一个或多个外部设备1100(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备1000交互的设备通信,和/或与使得该电子设备1000能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1050进行。并且,电子设备1000还可以通过网络适配器1060与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器1060通过总线1030与电子设备1000的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备1000使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例性实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开示例性实施方式的方法。
此外,上述附图仅是根据本公开示例性实施方式的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的示例性实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限。
Claims (15)
1.一种键值数据存储方法,其特征在于,包括:
获取待存储数据,包括成对的键数据和值数据;
根据所述键数据的哈希值,在共享内存的哈希存储区域中确定所述键数据对应的目标哈希存储单元;
将所述键数据存储至所述共享内存的键存储区域中的目标键存储单元,所述目标键存储单元与所述目标哈希存储单元具有关联;
将所述值数据存储至所述共享内存的值存储区域中的目标值存储单元,所述目标键存储单元的指针指向所述目标值存储单元。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将所述共享内存划分为所述哈希存储区域、所述键存储区域和所述值存储区域;
向所述哈希存储区域的每个存储单元分别写入不同的预设哈希值,得到多个哈希存储单元;
将所述键存储区域的存储单元确定为键存储单元;
将所述值存储区域的存储单元确定为值存储单元。
3.根据权利要求2所述的方法,其特征在于,所述哈希存储区域包括N个存储单元,所述预设哈希值包括0到N-1,N为不小于2的正整数;
所述键数据的哈希值为所述键数据对N取模。
4.根据权利要求1所述的方法,其特征在于,所述目标键存储单元通过以下步骤确定:
在所述键存储区域中将一空闲的键存储单元确定为所述目标键存储单元;
将所述目标键存储单元关联至所述目标哈希存储单元。
5.根据权利要求4所述的方法,其特征在于,所述将所述目标键存储单元关联至所述目标哈希存储单元,包括:
将所述目标键存储单元添加至所述目标哈希存储单元的指针所指向的单向链表。
6.根据权利要求4所述的方法,其特征在于,所述键存储区域中包括一空闲键指示单元,所述空闲键指示单元的指针指向第一个空闲的键存储单元,所述空闲的键存储单元的任意两个相邻单元中前一个单元的指针指向后一个单元。
7.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当所述目标键存储单元中的键数据被删除时,解除所述目标键存储单元和所述目标哈希存储单元的关联。
8.根据权利要求1所述的方法,其特征在于,所述目标值存储单元通过以下步骤确定:
根据所述值数据的数据量确定所需的值存储单元数量,在所述值存储区域中将对应数量的空闲的值存储单元确定为所述目标值存储单元;
将所述目标键存储单元的指针指向所述目标值存储单元中的第一个单元,所述目标值存储单元的任意两个相邻单元中前一个单元的指针指向后一个单元。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
当所述目标值存储单元中的值数据被删除时,解除由所述目标键存储单元指向所述目标值存储单元的指针。
10.根据权利要求1-9任一项所述的方法,其特征在于,所述方法还包括:
当对所述共享内存中的数据进行操作时,将操作信息记录到操作日志中;
当所述共享内存发生异常时,根据所述操作日志恢复所述共享内存中的数据。
11.根据权利要求1所述的方法,其特征在于,所述共享内存包括第一共享内存和第二共享内存;
所述方法还包括:
将所述第一共享内存和第二共享内存之一作为写入共享内存,另一作为读取共享内存;
当有数据读取请求时,从所述读取共享内存读取数据;
当有数据更新请求时,将更新后的数据写入所述写入共享内存,并将所述写入共享内存作为新的读取共享内存,将所述读取共享内存作为新的写入共享内存。
12.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当通过所述键数据查找所述值数据时,根据所述键数据的哈希值,在所述哈希存储区域中确定所述目标哈希存储单元;
从所述目标哈希存储单元所关联的键存储单元中,查找所述键数据所在的所述目标键存储单元;
从所述目标键存储单元的指针所指向的所述目标值存储单元中,获取所述值数据。
13.一种键值数据存储装置,其特征在于,包括:
数据获取模块,用于获取待存储数据,包括成对的键数据和值数据;
哈希确定模块,用于根据所述键数据的哈希值,在共享内存的哈希存储区域中确定所述键数据对应的目标哈希存储单元;
键存储模块,用于将所述键数据存储至所述共享内存的键存储区域中的目标键存储单元,所述目标键存储单元与所述目标哈希存储单元具有关联;
值存储模块,用于将所述值数据存储至所述共享内存的值存储区域中的目标值存储单元,所述目标键存储单元的指针指向所述目标值存储单元。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-12任一项所述的方法。
15.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1-12任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910506763.6A CN111177143B (zh) | 2019-06-12 | 2019-06-12 | 键值数据存储方法、装置、存储介质与电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910506763.6A CN111177143B (zh) | 2019-06-12 | 2019-06-12 | 键值数据存储方法、装置、存储介质与电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111177143A true CN111177143A (zh) | 2020-05-19 |
CN111177143B CN111177143B (zh) | 2024-04-12 |
Family
ID=70655333
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910506763.6A Active CN111177143B (zh) | 2019-06-12 | 2019-06-12 | 键值数据存储方法、装置、存储介质与电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111177143B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111881317A (zh) * | 2020-07-31 | 2020-11-03 | 北京达佳互联信息技术有限公司 | 基于键值系统的数据存储方法、装置、电子设备及介质 |
CN112947856A (zh) * | 2021-02-05 | 2021-06-11 | 彩讯科技股份有限公司 | 一种内存数据的管理方法、装置、计算机设备及存储介质 |
CN113420191A (zh) * | 2020-12-17 | 2021-09-21 | 阿里巴巴集团控股有限公司 | 数据存储方法和装置、数据查询方法和装置、数据结构、电子设备及计算机可读存储介质 |
CN113609090A (zh) * | 2021-08-06 | 2021-11-05 | 杭州网易云音乐科技有限公司 | 数据存储方法及装置、计算机可读存储介质、电子设备 |
CN117271395A (zh) * | 2023-11-22 | 2023-12-22 | 民航成都信息技术有限公司 | 一种数据缓存方法、装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101315628A (zh) * | 2007-06-01 | 2008-12-03 | 华为技术有限公司 | 内存数据库系统及实现内存数据库的方法和装置 |
CN105630612A (zh) * | 2014-10-31 | 2016-06-01 | 腾讯科技(深圳)有限公司 | 进程更新方法和装置 |
-
2019
- 2019-06-12 CN CN201910506763.6A patent/CN111177143B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101315628A (zh) * | 2007-06-01 | 2008-12-03 | 华为技术有限公司 | 内存数据库系统及实现内存数据库的方法和装置 |
CN105630612A (zh) * | 2014-10-31 | 2016-06-01 | 腾讯科技(深圳)有限公司 | 进程更新方法和装置 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111881317A (zh) * | 2020-07-31 | 2020-11-03 | 北京达佳互联信息技术有限公司 | 基于键值系统的数据存储方法、装置、电子设备及介质 |
CN113420191A (zh) * | 2020-12-17 | 2021-09-21 | 阿里巴巴集团控股有限公司 | 数据存储方法和装置、数据查询方法和装置、数据结构、电子设备及计算机可读存储介质 |
CN112947856A (zh) * | 2021-02-05 | 2021-06-11 | 彩讯科技股份有限公司 | 一种内存数据的管理方法、装置、计算机设备及存储介质 |
CN112947856B (zh) * | 2021-02-05 | 2024-05-03 | 彩讯科技股份有限公司 | 一种内存数据的管理方法、装置、计算机设备及存储介质 |
CN113609090A (zh) * | 2021-08-06 | 2021-11-05 | 杭州网易云音乐科技有限公司 | 数据存储方法及装置、计算机可读存储介质、电子设备 |
CN117271395A (zh) * | 2023-11-22 | 2023-12-22 | 民航成都信息技术有限公司 | 一种数据缓存方法、装置、电子设备及存储介质 |
CN117271395B (zh) * | 2023-11-22 | 2024-02-06 | 民航成都信息技术有限公司 | 一种数据缓存方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111177143B (zh) | 2024-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102240557B1 (ko) | 데이터 저장 방법, 장치 및 시스템 | |
CN111177143B (zh) | 键值数据存储方法、装置、存储介质与电子设备 | |
CN109086388B (zh) | 区块链数据存储方法、装置、设备及介质 | |
US10649897B2 (en) | Access request processing method and apparatus, and computer device | |
US10489289B1 (en) | Physical media aware spacially coupled journaling and trim | |
CN113568582B (zh) | 数据管理方法、装置和存储设备 | |
US20190325048A1 (en) | Transaction encoding and transaction persistence according to type of persistent storages | |
CN109918352B (zh) | 存储器系统和存储数据的方法 | |
US10838944B2 (en) | System and method for maintaining a multi-level data structure | |
CN113806300A (zh) | 数据存储方法、系统、装置、设备及存储介质 | |
EP3449372B1 (en) | Fault-tolerant enterprise object storage system for small objects | |
US11157456B2 (en) | Replication of data in a distributed file system using an arbiter | |
CN114153394A (zh) | 一种数据存储管理方法、装置及设备 | |
US10877881B2 (en) | In-place garbage collection of a sharded, replicated distributed state machine based on mergeable operations | |
US20230124036A1 (en) | In-place garbage collection for state machine replication | |
CN114936010B (zh) | 数据处理方法、装置、设备及介质 | |
CN114924911B (zh) | Windows操作系统有效数据备份方法、装置、设备和存储介质 | |
US10209909B1 (en) | Storage element cloning in presence of data storage pre-mapper | |
US11803469B2 (en) | Storing data in a log-structured format in a two-tier storage system | |
CN115617802A (zh) | 一种全量快照快速生成方法、装置、电子设备及存储介质 | |
CN111444114B (zh) | 一种非易失性内存中数据的处理方法、装置及系统 | |
CN109491620B (zh) | 存储数据重写方法、装置、服务器及存储介质 | |
CN112084141A (zh) | 一种全文检索系统扩容方法、装置、设备及介质 | |
CN114490540B (zh) | 数据存储方法、介质、装置和计算设备 | |
US11500590B2 (en) | Method, device and computer program product for data writing |
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 |