CN104809183A - 一种数据读取及写入的方法和装置 - Google Patents

一种数据读取及写入的方法和装置 Download PDF

Info

Publication number
CN104809183A
CN104809183A CN201510185480.8A CN201510185480A CN104809183A CN 104809183 A CN104809183 A CN 104809183A CN 201510185480 A CN201510185480 A CN 201510185480A CN 104809183 A CN104809183 A CN 104809183A
Authority
CN
China
Prior art keywords
data record
index
data
record
virtual address
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
CN201510185480.8A
Other languages
English (en)
Other versions
CN104809183B (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.)
Beijing QIYI Century Science and Technology Co Ltd
Original Assignee
Beijing QIYI Century Science and 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 Beijing QIYI Century Science and Technology Co Ltd filed Critical Beijing QIYI Century Science and Technology Co Ltd
Priority to CN201510185480.8A priority Critical patent/CN104809183B/zh
Publication of CN104809183A publication Critical patent/CN104809183A/zh
Application granted granted Critical
Publication of CN104809183B publication Critical patent/CN104809183B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

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

Abstract

本发明实施例提供了一种数据读取及写入的方法和装置,其中所述数据读取方法包括:接收数据读取请求,所述数据读取请求包括目标数据记录标识;当在预设的关系数据表中匹配到所述目标数据记录标识时,获得与所述目标数据记录标识对应的目标数据记录虚拟地址;其中,所述关系数据表包括多个数据记录标识与对应的数据记录的虚拟地址的关联关系;计算所述目标数据记录虚拟地址对应的物理地址,其中,所述物理地址中存储数据记录标识与对应的数据内容的键值对;从所述物理地址中获得与所述目标数据记录标识对应的数据内容。本发明可以提高数据处理效率。

Description

一种数据读取及写入的方法和装置
技术领域
本发明涉及数据存储技术领域,特别是涉及一种数据读取方法,一种数据写入方法,一种数据读取装置和一种数据写入装置。
背景技术
可靠性及可扩展性的海量数据存储对互联网公司来说是一个巨大的挑战,传统的数据库往往很难满足该需求,并且很多时候对于特定的系统绝大部分的检索都是基于主键的的查询,在这种情况下使用关系型数据库将使得效率低下,并且扩展也将成为未来很大的难题。在这样的情况下,使用Key-value存储将会是一个很好的选择。
然而,目前大部分的Key-value存储系统都用于分布式环境中,数据通过socket传输,数据处理效率低下。
发明内容
本发明实施例所要解决的技术问题是提供一种数据读取方法及一种数据写入方法,提高数据处理效率。
相应的,本发明实施例还提供了一种数据读取装置及一种数据写入装置,用以保证上述方法的实现及应用。
为了解决上述问题,本发明公开了一种数据读取方法,所述方法包括:
接收数据读取请求,所述数据读取请求包括目标数据记录标识;
当在预设的关系数据表中匹配到所述目标数据记录标识时,获得与所述目标数据记录标识对应的目标数据记录虚拟地址;其中,所述关系数据表包括多个数据记录标识与对应的数据记录的虚拟地址的关联关系;
计算所述目标数据记录虚拟地址对应的物理地址,其中,所述物理地址中存储数据记录标识与对应的数据内容的键值对;
从所述物理地址中获得与所述目标数据记录标识对应的数据内容。
优选地,所述关系数据表保存在共享内存中。
优选地,所述关系数据表包括数据头、索引记录以及数据记录;
所述数据头进一步包括索引根节点,空闲数据记录索引根节点,空闲索引记录根节点;
其中,所述索引根节点用于记录数据记录标识及对应的已使用的索引节点的虚拟地址;
所述索引记录用于记录所述索引节点的信息,所述索引节点的信息包括数据记录标识与对应的数据记录的虚拟地址;
所述数据记录用于记录已写入的数据记录标识和对应的数据内容;
所述空闲数据记录索引根节点用于记录未使用的数据记录的虚拟地址;
所述空闲索引记录根节点用于记录未使用的索引节点的虚拟地址。
优选地,所述虚拟地址包括高16位及低16位两部分,所述高16位中记录对应的索引节点的地址相对数据头的偏移,所述低16位中记录所述索引节点内部的偏移。
优选地,在所述当在预设的关系数据表中匹配到所述目标数据记录标识时,获得与所述目标数据记录标识对应的目标数据记录虚拟地址的步骤之前,还包括:
在所述索引根节点中匹配所述目标数据记录标识,获取对应的索引节点的虚拟地址;
计算所述索引节点的虚拟地址对应的索引节点物理地址;
在所述索引节点物理地址中获得所述索引节点中记录的数据记录标识与所述数据记录虚拟地址的关联关系。
优选地,采用如下公式计算所述目标数据记录虚拟地址对应的物理地址:
物理地址=(所述共享内存基地址+所述数据头大小+当前数据记录的位置*每条数据记录的大小+offset in record)。
优选地,所述方法还包括:
封装所述共享内存的数据访问接口。
本发明还公开了一种数据写入方法,所述方法包括:
接收数据写入请求,所述数据写入请求包括目标数据记录标识及对应的数据内容;
判断在预设的关系数据表中是否匹配到所述目标数据记录标识,其中,所述关系数据表包括多个数据记录标识与对应的数据记录的虚拟地址的关联关系,所述关系数据表还包括空闲索引资源;
若是,则获得与所述目标数据记录标识对应的目标数据记录虚拟地址,计算所述目标数据记录虚拟地址对应的物理地址,并将所述目标数据的数据内容写入所述物理地址中的对应位置;
若否,则获取所述空闲索引资源,并将所述目标数据记录标识及对应的数据内容写入所述空闲索引资源中。
优选地,所述关系数据表保存在共享内存中。
优选地,所述关系数据表包括数据头、索引记录以及数据记录;所述数据头进一步包括索引根节点,空闲数据记录索引根节点,空闲索引记录根节点;
其中,所述索引根节点用于记录数据记录标识及对应的已使用的索引节点的虚拟地址;
所述索引记录用于记录所述已使用索引节点的信息,所述已使用索引节点的信息包括数据记录标识与对应的数据记录的虚拟地址;
所述数据记录用于记录已写入的数据记录标识和对应的数据内容;
所述空闲数据记录索引根节点用于记录未使用的数据记录的虚拟地址;
所述空闲索引记录根节点用于记录未使用的索引节点的虚拟地址。
优选地,所述空闲索引资源包括所述空闲索引记录根节点及所述空闲数据记录根节点;所述获取所述空闲索引资源,并将所述目标数据记录标识及对应的数据内容写入所述空闲索引资源中的步骤包括:
从所述空闲索引记录根节点中选取一虚拟地址,将所述虚拟地址对应的索引节点作为新索引节点;
从所述空闲数据记录根节点中选取一虚拟地址,将所述虚拟地址对应的数据记录作为新的数据记录;
将所述目标数据记录标识及对应的数据内容写入所述新的数据记录中;
在所述新索引节点下记录所述的目标数据记录标识及所述新的数据记录的虚拟地址。
优选地,所述方法还包括:
当从所述空闲索引记录根节点中选取一虚拟地址后,更新所述空闲索引记录根节点指向下一虚拟地址;
当从所述空闲数据记录根节点中选取一虚拟地址后,更新所述空闲数据记录根节点指向下一虚拟地址。
优选地,所述虚拟地址包括高16位及低16位两部分,所述高16位中记录对应的索引节点的地址相对数据头的偏移,所述低16位中记录所述索引节点内部的偏移。
优选地,采用如下公式计算所述目标数据记录虚拟地址对应的物理地址:
物理地址=(所述共享内存基地址+所述数据头大小+当前数据记录的位置*每条数据记录的大小+offset in record)。
优选地,所述方法还包括:
封装所述共享内存的数据访问接口。
本发明还公开了一种数据读取装置,所述装置包括:
请求接收模块,用于接收数据读取请求,所述数据读取请求包括目标数据记录标识;
虚拟地址获取模块,用于在预设的关系数据表中匹配到所述目标数据记录标识时,获得与所述目标数据记录标识对应的目标数据记录虚拟地址;其中,所述关系数据表包括多个数据记录标识与对应的数据记录的虚拟地址的关联关系;
物理地址计算模块,用于计算所述目标数据记录虚拟地址对应的物理地址,其中,所述物理地址中存储数据记录标识与对应的数据内容的键值对;
数据读取模块,用于从所述物理地址中获得与所述目标数据记录标识对应的数据内容。
优选地,所述关系数据表保存在共享内存中。
优选地,所述关系数据表包括数据头、索引记录以及数据记录;
所述数据头进一步包括索引根节点,空闲数据记录索引根节点,空闲索引记录根节点;
其中,所述索引根节点用于记录数据记录标识及对应的已使用的索引节点的虚拟地址;
所述索引记录用于记录所述索引节点的信息,所述索引节点的信息包括数据记录标识与对应的数据记录的虚拟地址;
所述数据记录用于记录已写入的数据记录标识和对应的数据内容;
所述空闲数据记录索引根节点用于记录未使用的数据记录的虚拟地址;
所述空闲索引记录根节点用于记录未使用的索引节点的虚拟地址。
优选地,所述虚拟地址包括高16位及低16位两部分,所述高16位中记录对应的索引节点的地址相对数据头的偏移,所述低16位中记录所述索引节点内部的偏移。
优选地,所述装置还包括:
地址获取模块,用于在所述索引根节点中匹配所述目标数据记录标识,获取对应的索引节点的虚拟地址;
计算模块,用于计算所述索引节点的虚拟地址对应的索引节点物理地址;
关系获得模块,用于在所述索引节点物理地址中获得所述索引节点中记录的数据记录标识与所述数据记录虚拟地址的关联关系。
优选地,采用如下公式计算所述目标数据记录虚拟地址对应的物理地址:
物理地址=(所述共享内存基地址+所述数据头大小+当前数据记录的位置*每条数据记录的大小+offset in record)。
优选地,所述装置还包括:
封装模块,用于封装所述共享内存的数据访问接口。
本发明还公开了一种数据写入装置,所述装置包括:
请求接收模块,用于接收数据写入请求,所述数据写入请求包括目标数据记录标识及对应的数据内容;
判断模块,用于判断在预设的关系数据表中是否匹配到所述目标数据记录标识,其中,所述关系数据表包括多个数据记录标识与对应的数据记录的虚拟地址的关联关系,所述关系数据表还包括空闲索引资源;
第一写入模块,用于在判定在预设的关系数据表中匹配到所述目标数据记录标识时,获得与所述目标数据记录标识对应的目标数据记录虚拟地址,计算所述目标数据记录虚拟地址对应的物理地址,并将所述目标数据的数据内容写入所述物理地址中的对应位置;
第二写入模块,用于在判定在预设的关系数据表中没有匹配到所述目标数据记录标识时,获取所述空闲索引资源,并将所述目标数据记录标识及对应的数据内容写入所述空闲索引资源中。
优选地,所述关系数据表保存在共享内存中。
优选地,所述关系数据表包括数据头、索引记录以及数据记录;所述数据头进一步包括索引根节点,空闲数据记录索引根节点,空闲索引记录根节点;
其中,所述索引根节点用于记录数据记录标识及对应的已使用的索引节点的虚拟地址;
所述索引记录用于记录所述已使用索引节点的信息,所述已使用索引节点的信息包括数据记录标识与对应的数据记录的虚拟地址;
所述数据记录用于记录已写入的数据记录标识和对应的数据内容;
所述空闲数据记录索引根节点用于记录未使用的数据记录的虚拟地址;
所述空闲索引记录根节点用于记录未使用的索引节点的虚拟地址。
优选地,所述空闲索引资源包括所述空闲索引记录根节点及所述空闲数据记录根节点;所述第二写入模块包括:
第一选取子模块,用于从所述空闲索引记录根节点中选取一虚拟地址,将所述虚拟地址对应的索引节点作为新索引节点;
第二选取子模块,用于从所述空闲数据记录根节点中选取一虚拟地址,将所述虚拟地址对应的数据记录作为新的数据记录;
写入子模块,用于将所述目标数据记录标识及对应的数据内容写入所述新的数据记录中;
更新子模块,用于在所述新索引节点下记录所述的目标数据记录标识及所述新的数据记录的虚拟地址。
优选地,所述装置还包括:
第一更新模块,用于更新所述空闲索引记录根节点指向下一虚拟地址;
第二更新模块,用于更新所述空闲数据记录根节点指向下一虚拟地址。
优选地,所述虚拟地址包括高16位及低16位两部分,所述高16位中记录对应的索引节点的地址相对数据头的偏移,所述低16位中记录所述索引节点内部的偏移。
优选地,采用如下公式计算所述目标数据记录虚拟地址对应的物理地址:
物理地址=(所述共享内存基地址+所述数据头大小+当前数据记录的位置*每条数据记录的大小+offset in record)。
优选地,所述装置还包括:
封装模块,用于封装所述共享内存的数据访问接口。
与现有技术相比,本发明实施例包括以下优点:
本发明实施例在接收到包括目标数据记录标识的数据访问请求时(包括读取请求及写入请求),在关系数据表中匹配到该目标数据记录标识时,获得与所述目标数据记录标识对应的目标数据记录虚拟地址;并根据虚拟地址与物理地址中的映射关系对数据进行读写处理,数据处理通过地址映射进行,无需通过socket,避免了socket协议栈的开销,并且提高了数据处理效率。
附图说明
图1是本发明的一种数据读取方法实施例的步骤流程图;
图2是本发明的一种数据读取方法实施例的关系数据表内存结构示意图;
图3是本发明的一种数据写入方法实施例的步骤流程图;
图4是本发明的一种数据读取装置实施例的结构框图;
图5是本发明的一种数据写入装置实施例的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
参照图1,示出了本发明的一种数据读取方法实施例的步骤流程图,本发明实施例可应用于单机系统中,具体可以包括如下步骤:
步骤101,接收数据读取请求,所述数据读取请求包括目标数据记录标识;
本发明实施例中,进程可以通过发出数据读取请求来请求读取目标数据记录,其中,该数据读取请求包括该目标数据记录标识。目标数据记录标识可以为标识目标数据记录的参数,例如,数字编号“1”,姓名“张三”等等。
在具体实现中,本发明实施例可以提供CIpcKeyValue对象,CIpcKeyValue对象可以提供Get、Add等方法,调用Get方法即读取数据,调用Add方法即写入数据。进程可以通过调用CIpcKeyValue对象的Get方法来进行目标数据记录的读取。
步骤102,当在预设的关系数据表中匹配到所述目标数据记录标识时,获取与所述目标数据记录标识对应的数据记录虚拟地址;
本发明实施例设置有关系数据表,该关系数据表可以包括多个数据记录标识及与该数据记录标识对应的数据记录虚拟地址的关联关系。当接收到数据读取请求以后,可以在该关系数据表中匹配该目标数据记录标识,若匹配成功,则获得对应的目标数据记录虚拟地址。
应用于本发明实施例,可以将该关系数据表保存在共享内存中,以供多个进程共享使用。其中,共享内存是被多个进程共享的一部分物理内存,共享内存允许两个或多个进程共享同一块内存(这块内存会映射到各个进程独立的地址空间)从而使得这些进程可以相互通信。
在单机系统中,内存数据和文件数据完全一致,因此本发明实施例可以基于文件映射file mapping实现共享内存,其中,文件映象file mapping是由一个文件到一块内存的映射,文件映射的一个重要应用就是用来支持永久命名的共享内存。要在两个进程之间共享内存,可以在一个进程中创建一个文件并映射之,然后另一个进程可以通过打开和映射此文件把它作为共享的内存来使用。
关系数据表在共享内存中的内存结构可以如图2所示,关系数据表可以包括数据头header、索引记录index record以及数据记录key-value record(或写成key/value record),而数据头header进一步可以包括索引根节点indexroot,空闲数据记录索引根节点free record index root,空闲索引记录根节点free index record root。
其中,索引根节点用于记录数据记录标识及对应的已使用的索引节点的虚拟地址;
索引记录index record用于记录索引节点index的信息,索引节点如图2所示的index1、index2、……、indexn、indexn+1,等等。在一种实施方式中,本发明实施例的索引节点index可以采用平衡二叉树结构,索引节点index的信息可以包括索引key名称(即数据记录标识)、指向数据记录key-valuerecord的指针(即数据记录key-value record的地址)、指向左子树的虚拟地址(VA)的指针、指向右子树的虚拟地址(VA)的指针等信息。
在本发明实施例中,索引节点index中记录的数据记录key-value record的地址为自定义的虚拟地址VA(Virtual Address Space),虚拟地址并不真实存在于计算机中。其中,虚拟地址可以包括高16位及低16位两部分,所述高16位中记录对应的索引节点的地址相对数据头的偏移,所述低16位中记录所述索引节点内部的偏移,即虚拟地址VA=index record<<16+offset inrecord,index record<<16为高16位,表示对应的索引节点的地址相对数据头的偏移;offset in record为低16位,表示所述索引节点内部的偏移。
需要说明的是,该自定义的虚拟地址VA与进程无关。
数据记录key-value record用于存储数据记录,即记录已写入的数据记录标识key和对应的数据内容value。作为一种示例,数据记录key-value record的结构可以如下表1所示。
表1
数据内容value信息的结构如表2所示,包括value总长度、头部长度、自定义头数据、数据类型、数据内容等。
表2
在本发明实施例中,通过file mapping将文件直接映射为共享内存key-value存储,并在程序退出时,把数据存储到磁盘里,以便在需要时直接通过file mapping从磁盘恢复数据,不用做任何改动,恢复速度快,保证数据持久化。
空闲数据记录索引根节点free record index root用于记录未使用(即空闲的)的key/value record的虚拟地址。
空闲索引记录根节点free index record root用于记录未使用的index的虚拟地址,例如,如图2中,如果index2未使用,则将free index record root指向index2地址。
基于上述的关系数据表在共享内存中的内存结构说明,在本发明实施例的一种优选实施例中,在执行步骤102之前,还可以执行如下步骤:
步骤(1),在所述索引根节点中匹配所述目标数据记录标识,获取对应的索引节点的虚拟地址;
当获得目标数据标识(即key名称)后,可以在索引根节点index root中查找该key名称,若查找成功,则获得对应的索引节点index的虚拟地址。
步骤(2),计算所述索引节点index的虚拟地址对应的索引节点物理地址;
物理地址空间是实在的存在于计算机中的一个实体,在每一台计算机中保持唯一独立性。在具体实现中,从虚拟地址中可以获得对应的索引节点内部偏移量offset in record,根据该索引节点内部偏移量offset in record可以采用如下公式将虚拟地址转化为物理地址:物理地址=(共享内存基地址+header大小+当前数据记录的位置*每条数据记录的大小+offset in record)。
从上述公式可以看出,当不同进程请求读取相同的数据时,是从相同的物理地址中读取数据的,不需要做任何额外处理,使得本机其它进程直接根据共享内存获取索引便可快速读取数据,实现跨进程快速读取数据。
步骤(3),在所述索引节点物理地址中获得所述索引节点中记录的数据记录标识与所述数据记录虚拟地址的关联关系。
计算得到索引节点的物理地址后,从该物理地址中获得该索引节点记录的数据记录标识与所述数据记录虚拟地址的关联关系,此时,继续执行步骤102,判定该索引节点存储的数据记录标识与目标数据记录标识是否相同,若相同,则将该数据记录虚拟地址作为目标数据记录虚拟地址。
例如,进程需要查找key为“李三”的value,假设共享内存的基地址为x,在索引根节点中匹配“李三”对应的索引节点index的虚拟地址0x00000100,索引节点为index2,从索引节点index的虚拟地址0x00000100中可知index2记录内偏移为256(即离行首地址256字节),得到虚拟地址0x00000100对应的物理地址是(x+header大小+0*n+256),其中,n为一行即一条记录的大小。从上述解得的物理地址中获得index2中记录的数据记录标识与所述数据记录虚拟地址的关联关系,假设上述数据记录虚拟地址为0x00010000,对应的数据记录为图2第一个key-value record,则虚拟地址0x00010000的实际物理地址为(x+header大小+1*n+0)。
步骤103,计算所述目标数据记录虚拟地址对应的物理地址,其中,所述物理地址中存储数据记录标识与对应的数据内容的键值对;
在具体实现中,可以按照上述步骤(2)的方法计算目标数据记录虚拟地址对应的物理地址,在该物理地址中,存储数据记录标识与对应的数据内容的键值对。
步骤104,从所述物理地址中获得与所述目标数据记录标识对应的数据内容。
若数据记录标识与对应的数据内容的键值对中的数据记录标识与目标数据记录标识相同,则将该键值对中的数据内容作为目标数据记录的数据内容,并将该数据内容返回发出请求的进程。
由于操作系统(例如linux系统)上共享内存的系统API不同,使得在不同的系统上需要调用不同的系统api,为了克服这种差异,本发明实施例还可以包括如下步骤:
封装所述共享内存的数据访问接口。
其中,数据访问调用接口可以包括打开Open,新建Create,读取GetData,写入AddData,映射Map,解除映射UMap等方法。本发明通过封装共享内存的数据访问调用接口,外提供统一的数据访问调用接口。
需要说明的是,因为单机系统对共享内存的读写是通过固定的api(OpenFileMapping打开共享内存,MapViewOfFile获取共享内存的数据地址,UnmapViewOfFile关闭共享内存)完成的,可以直接调用这些api,则可以不用再此基础上进行封装。
需要说明的是,在上述步骤102至104的数据处理过程中,利用操作系统虚拟内存的特性,无需提前分配物理内存,按需提交物理内存。具体来说,在分配到物理内存后并不立刻把对应文件的内容加载到物理内存,而是当访问到具体数据时才为该数据分配物理内存(比如取出index root,就会将indexroot数据加载到物理内存中),访问得越多加载到物理内存的才越多,访问得少则加载到物理内存的数据也少。
本发明实施例通过共享内存直接获取数据记录的地址,并根据该地址获取到数据内容,避免了socket协议栈的开销。
参照图3,示出了本发明的一种数据写入方法实施例的步骤流程图,本发明实施例可应用于单机系统中,具体可以包括如下步骤:
步骤301,接收数据写入请求,所述数据写入请求包括目标数据记录标识及对应的数据内容;
本发明实施例中,进程通过发出数据写入请求来请求写入目标数据记录,其中,该数据写入请求包括该目标数据记录标识及对应的数据内容。目标数据记录标识可以为标识目标数据记录的参数,例如,数字编号“1”,姓名“张三”等等。
在具体实现中,本发明实施例可以提供CIpcKeyValue对象,CIpcKeyValue对象可以提供Get、Add等方法,调用Get方法即读取数据,调用Add方法即写入数据。进程可以通过调用CIpcKeyValue对象的Add方法来进行目标数据记录的写入。
步骤302,判断在预设的关系数据表中是否匹配到所述目标数据记录标识,若是,则执行步骤303,若否,则执行步骤304;其中,所述关系数据表包括多个数据记录标识与对应的数据记录的虚拟地址的关联关系,所述关系数据表还包括空闲索引资源;
本发明实施例设置有关系数据表,该关系数据表可以包括多个数据记录标识及与该数据记录标识对应的数据记录虚拟地址的关联关系。当接收到数据读取请求以后,可以在该关系数据表中匹配该目标数据记录标识。
应用于本发明实施例,可以将该关系数据表保存在共享内存中,以供多个进程共享使用。
关系数据表在共享内存中的内存结构可以如图2所示,关系数据表可以包括数据头header、索引记录index record以及数据记录key-value record(或写成key/value record),而数据头header进一步可以包括索引根节点indexroot,空闲数据记录索引根节点free record index root,空闲索引记录根节点free index record root(空闲数据记录索引根节点free record index root与空闲索引记录根节点free index record root为空闲索引资源)。
其中,索引根节点用于记录数据记录标识及对应的已使用的索引节点的虚拟地址;
索引记录index record用于用于记录索引节点index的信息,索引节点如图2所示的index1、index2、……、indexn、indexn+1,等等。在一种实施方式中,本发明实施例的索引节点index可以采用平衡二叉树结构,索引节点index的信息可以包括索引key名称(即数据记录标识)、指向数据记录key-value record的指针(即数据记录key-value record的地址)、指向左子树的虚拟地址(VA)的指针、指向右子树的虚拟地址(VA)的指针等信息。
在本发明实施例中,索引节点index中记录的数据记录key-value record的地址为自定义的虚拟地址VA(Virtual Address Space),虚拟地址并不真实存在于计算机中。其中,虚拟地址可以包括高16位及低16位两部分,所述高16位中记录对应的索引节点的地址相对数据头的偏移,所述低16位中记录所述索引节点内部的偏移,即虚拟地址VA=index record<<16+offset inrecord,index record<<16为高16位,表示对应的索引节点的地址相对数据头的偏移;offset in record为低16位,表示所述索引节点内部的偏移。。
需要说明的是,该自定义的虚拟地址VA与进程无关。
数据记录key-value record用于存储数据记录,即记录已写入的数据记录标识key和对应的数据内容value信息。作为一种示例,数据记录key-valuerecord的结构可以如下表1所示。
表1
数据内容value信息的结构如表2所示,包括value总长度、头部长度、自定义头数据、数据类型、数据内容等。
表2
空闲数据记录索引根节点free record index root用于记录未使用(即空闲的)的key/value record的虚拟地址。
空闲索引记录根节点free index record root用于记录未使用的index的虚拟地址,例如,如图2中,如果index2未使用,则将free index record root指向index2地址。
步骤303,获得与所述目标数据记录标识对应的目标数据记录虚拟地址,计算所述目标数据记录虚拟地址对应的物理地址,并将所述目标数据的数据内容写入所述物理地址中的对应位置;
基于上述的关系数据表在共享内存中的内存结构说明,在本发明实施例的一种优选实施例中,在执行步骤303之前,还可以执行如下步骤:
步骤(1),在所述索引根节点中匹配所述目标数据记录标识,获取对应的索引节点的虚拟地址;
当获得目标数据标识(即key名称)后,可以在索引根节点index root中查找该key名称,若查找成功,则获得对应的索引根节点index的虚拟地址。
步骤(2),计算所述索引节点index的虚拟地址对应的索引节点物理地址;
物理地址空间是实在的存在于计算机中的一个实体,在每一台计算机中保持唯一独立性。在具体实现中,从虚拟地址中可以获得对应的索引节点内部偏移量offset in record,根据该索引节点内部偏移量offset in record可以采用如下公式将虚拟地址转化为物理地址:物理地址=(共享内存基地址+header大小+当前数据记录的位置*每条数据记录的大小+offset in record)。
从上述公式可以看出,当不同进程请求写入相同的数据时,是将数据写入相同的物理地址中,不需要做任何额外处理,,使得本机其它进程直接根据共享内存获取索引便可快速写入数据,实现跨进程快速写入数据。
步骤(3),在所述索引节点物理地址中获得所述索引节点中记录的数据记录标识与所述数据记录虚拟地址的关联关系。
计算得到索引节点的物理地址后,从该物理地址中获得该索引节点记录的数据记录标识与所述数据记录虚拟地址的关联关系,此时,继续执行步骤303,将该匹配的数据记录虚拟地址作为目标数据记录虚拟地址。
在具体实现中,可以按照上述步骤(2)的方法计算目标数据记录虚拟地址对应的物理地址,并将所述目标数据的数据内容按照上表2的结构写入该物理地址对应的位置。
步骤304,获取所述空闲索引资源,并将所述目标数据记录标识及对应的数据内容写入所述空闲索引资源中。
当在步骤302判定为否的情况,执行步骤304。在本发明实施例的一种优选实施例中,步骤304可以包括如下子步骤:
子步骤S21,从所述空闲索引记录根节点中选取一虚拟地址,将所述虚拟地址对应的索引节点作为新索引节点;
在实际中,执行步骤S21以后,还可以执行如下子步骤:
更新所述空闲索引记录根节点指向下一虚拟地址。
子步骤S22,从所述空闲数据记录根节点中选取一虚拟地址,将所述虚拟地址对应的数据记录作为新的数据记录;
在实际中,执行步骤S22以后,还可以执行如下子步骤:
更新所述空闲数据记录根节点指向下一虚拟地址。
子步骤S23,将所述目标数据记录标识及对应的数据内容写入所述新的数据记录中;
子步骤S24,在所述新索引节点下记录所述的目标数据记录标识及所述新的数据记录的虚拟地址。
具体而言,如果判定在预设的关系数据表中没有匹配到所述目标数据记录标识,则可以取出header里的空闲索引记录根节点free index record root所指向的一虚拟地址,将该虚拟地址对应的索引节点作为新索节点(命名为newIndexNode),并更新free index record root指向下一个虚拟地址。然后取出header里free record index root(空闲数据记录根节点)所指向的一虚拟地址,将该虚拟地址对应的数据记录命名为newRecord,将目标数据记录标识key及对应的数据内容value存储到newRecord,并更新free record index root指向下一虚拟地址,最后将newIndexNode的节点的值更新为key名称和newReocrd地址,最后返回。
由于操作系统(例如linux系统)上共享内存的系统API不同,使得在不同的系统上需要调用不同的系统api,为了克服这种差异,本发明实施例还可以包括如下步骤:
封装所述共享内存的数据访问接口。
其中,数据访问接口可以包括打开Open,新建Create,读取GetData,写入AddData,映射Map,解除映射UMap等方法。本发明通过封装共享内存的数据访问调用接口,外提供统一的数据访问调用接口。
需要说明的是,因为单机系统对共享内存的读写是通过固定的api(OpenFileMapping打开共享内存,MapViewOfFile获取共享内存的数据地址,UnmapViewOfFile关闭共享内存)完成的,可以直接调用这些api,则可以不用再此基础上进行封装。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图4,示出了本发明一种数据读取装置实施例的结构框图,具体可以包括如下模块:
请求接收模块401,用于接收数据读取请求,所述数据读取请求包括目标数据记录标识;
虚拟地址获取模块402,用于在预设的关系数据表中匹配到所述目标数据记录标识时,获得与所述目标数据记录标识对应的目标数据记录虚拟地址;其中,所述关系数据表包括多个数据记录标识与对应的数据记录的虚拟地址的关联关系;
物理地址计算模块403,用于计算所述目标数据记录虚拟地址对应的物理地址,其中,所述物理地址中存储数据记录标识与对应的数据内容的键值对;
数据读取模块404,用于从所述物理地址中获得与所述目标数据记录标识对应的数据内容。
在本发明实施例的一种优选实施例中,所述关系数据表保存在共享内存中。
在本发明实施例的一种优选实施例中,所述关系数据表包括数据头、索引记录以及数据记录;
所述数据头进一步包括索引根节点,空闲数据记录索引根节点,空闲索引记录根节点;
其中,所述索引根节点用于记录数据记录标识及对应的已使用的索引节点的虚拟地址;
所述索引记录用于记录所述索引节点的信息,所述索引节点的信息包括数据记录标识与对应的数据记录的虚拟地址;
所述数据记录用于记录已写入的数据记录标识和对应的数据内容;
所述空闲数据记录索引根节点用于记录未使用的数据记录的虚拟地址;
所述空闲索引记录根节点用于记录未使用的索引节点的虚拟地址。
在本发明实施例的一种优选实施例中,所述虚拟地址包括高16位及低16位两部分,所述高16位中记录对应的索引节点的地址相对数据头的偏移,所述低16位中记录所述索引节点内部的偏移。
在本发明实施例的一种优选实施例中,还包括:
地址获取模块,用于在所述索引根节点中匹配所述目标数据记录标识,获取对应的索引节点的虚拟地址;
计算模块,用于计算所述索引节点的虚拟地址对应的索引节点物理地址;
关系获得模块,用于在所述索引节点物理地址中获得所述索引节点中记录的数据记录标识与所述数据记录虚拟地址的关联关系。
在本发明实施例的一种优选实施例中,采用如下公式计算所述目标数据记录虚拟地址对应的物理地址:
物理地址=(所述共享内存基地址+所述数据头大小+当前数据记录的位置*每条数据记录的大小+offset in record)。
在本发明实施例的一种优选实施例中,还包括:
封装模块,用于封装所述共享内存的数据访问接口。
对于装置实施例而言,由于其与图1所述方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
参照图5,示出了本发明一种数据写入装置实施例的结构框图,具体可以包括如下模块:
请求接收模块501,用于接收数据写入请求,所述数据写入请求包括目标数据记录标识及对应的数据内容;
判断模块502,用于判断在预设的关系数据表中是否匹配到所述目标数据记录标识,其中,所述关系数据表包括多个数据记录标识与对应的数据记录的虚拟地址的关联关系,所述关系数据表还包括空闲索引资源;
第一写入模块503,用于在判定在预设的关系数据表中匹配到所述目标数据记录标识时,获得与所述目标数据记录标识对应的目标数据记录虚拟地址,计算所述目标数据记录虚拟地址对应的物理地址,并将所述目标数据的数据内容写入所述物理地址中的对应位置;
第二写入模块504,用于在判定在预设的关系数据表中没有匹配到所述目标数据记录标识时,获取所述空闲索引资源,并将所述目标数据记录标识及对应的数据内容写入所述空闲索引资源中。
在本发明实施例的一种优选实施例中,所述关系数据表保存在共享内存中。
在本发明实施例的一种优选实施例中,所述关系数据表包括数据头、索引记录以及数据记录;所述数据头进一步包括索引根节点,空闲数据记录索引根节点,空闲索引记录根节点;
其中,所述索引根节点用于记录数据记录标识及对应的已使用的索引节点的虚拟地址;
所述索引记录用于记录所述已使用索引节点的信息,所述已使用索引节点的信息包括数据记录标识与对应的数据记录的虚拟地址;
所述数据记录用于记录已写入的数据记录标识和对应的数据内容;
所述空闲数据记录索引根节点用于记录未使用的数据记录的虚拟地址;
所述空闲索引记录根节点用于记录未使用的索引节点的虚拟地址。
在本发明实施例的一种优选实施例中,所述空闲索引资源包括所述空闲索引记录根节点及所述空闲数据记录根节点;所述第二写入模块包括:
第一选取子模块,用于从所述空闲索引记录根节点中选取一虚拟地址,将所述虚拟地址对应的索引节点作为新索引节点;
第二选取子模块,用于从所述空闲数据记录根节点中选取一虚拟地址,将所述虚拟地址对应的数据记录作为新的数据记录;
写入子模块,用于将所述目标数据记录标识及对应的数据内容写入所述新的数据记录中;
更新子模块,用于在所述新索引节点下记录所述的目标数据记录标识及所述新的数据记录的虚拟地址。
在本发明实施例的一种优选实施例中,还包括:
第一更新模块,用于更新所述空闲索引记录根节点指向下一虚拟地址;
第二更新模块,用于更新所述空闲数据记录根节点指向下一虚拟地址。
在本发明实施例的一种优选实施例中,所述虚拟地址包括高16位及低16位两部分,所述高16位中记录对应的索引节点的地址相对数据头的偏移,所述低16位中记录所述索引节点内部的偏移。
在本发明实施例的一种优选实施例中,采用如下公式计算所述目标数据记录虚拟地址对应的物理地址:
物理地址=(所述共享内存基地址+所述数据头大小+当前数据记录的位置*每条数据记录的大小+offset in record)。
在本发明实施例的一种优选实施例中,还包括:
封装模块,用于封装所述共享内存的数据访问接口。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种数据读取及写入的方法和装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (30)

1.一种数据读取方法,其特征在于,所述方法包括:
接收数据读取请求,所述数据读取请求包括目标数据记录标识;
当在预设的关系数据表中匹配到所述目标数据记录标识时,获得与所述目标数据记录标识对应的目标数据记录虚拟地址;其中,所述关系数据表包括多个数据记录标识与对应的数据记录的虚拟地址的关联关系;
计算所述目标数据记录虚拟地址对应的物理地址,其中,所述物理地址中存储数据记录标识与对应的数据内容的键值对;
从所述物理地址中获得与所述目标数据记录标识对应的数据内容。
2.根据权利要求1所述的方法,其特征在于,所述关系数据表保存在共享内存中。
3.根据权利要求2所述的方法,其特征于,所述关系数据表包括数据头、索引记录以及数据记录;
所述数据头进一步包括索引根节点,空闲数据记录索引根节点,空闲索引记录根节点;
其中,所述索引根节点用于记录数据记录标识及对应的已使用的索引节点的虚拟地址;
所述索引记录用于记录所述索引节点的信息,所述索引节点的信息包括数据记录标识与对应的数据记录的虚拟地址;
所述数据记录用于记录已写入的数据记录标识和对应的数据内容;
所述空闲数据记录索引根节点用于记录未使用的数据记录的虚拟地址;
所述空闲索引记录根节点用于记录未使用的索引节点的虚拟地址。
4.根据权利要求3所述的方法,其特征在于,所述虚拟地址包括高16位及低16位两部分,所述高16位中记录对应的索引节点的地址相对数据头的偏移,所述低16位中记录所述索引节点内部的偏移。
5.根据权利要求4所述的方法,其特征在于,在所述当在预设的关系数据表中匹配到所述目标数据记录标识时,获得与所述目标数据记录标识对应的目标数据记录虚拟地址的步骤之前,还包括:
在所述索引根节点中匹配所述目标数据记录标识,获取对应的索引节点的虚拟地址;
计算所述索引节点的虚拟地址对应的索引节点物理地址;
在所述索引节点物理地址中获得所述索引节点中记录的数据记录标识与所述数据记录虚拟地址的关联关系。
6.根据权利要求4所述的方法,其特征在于,采用如下公式计算所述目标数据记录虚拟地址对应的物理地址:
物理地址=(所述共享内存基地址+所述数据头大小+当前数据记录的位置*每条数据记录的大小+offset in record)。
7.根据权利要求2所述的方法,其特征在于,还包括:
封装所述共享内存的数据访问接口。
8.一种数据写入方法,其特征在于,所述方法包括:
接收数据写入请求,所述数据写入请求包括目标数据记录标识及对应的数据内容;
判断在预设的关系数据表中是否匹配到所述目标数据记录标识,其中,所述关系数据表包括多个数据记录标识与对应的数据记录的虚拟地址的关联关系,所述关系数据表还包括空闲索引资源;
若是,则获得与所述目标数据记录标识对应的目标数据记录虚拟地址,计算所述目标数据记录虚拟地址对应的物理地址,并将所述目标数据的数据内容写入所述物理地址中的对应位置;
若否,则获取所述空闲索引资源,并将所述目标数据记录标识及对应的数据内容写入所述空闲索引资源中。
9.根据权利要求8所述的方法,其特征在于,所述关系数据表保存在共享内存中。
10.根据权利要求9所述的方法,其特征于,所述关系数据表包括数据头、索引记录以及数据记录;所述数据头进一步包括索引根节点,空闲数据记录索引根节点,空闲索引记录根节点;
其中,所述索引根节点用于记录数据记录标识及对应的已使用的索引节点的虚拟地址;
所述索引记录用于记录所述已使用索引节点的信息,所述已使用索引节点的信息包括数据记录标识与对应的数据记录的虚拟地址;
所述数据记录用于记录已写入的数据记录标识和对应的数据内容;
所述空闲数据记录索引根节点用于记录未使用的数据记录的虚拟地址;
所述空闲索引记录根节点用于记录未使用的索引节点的虚拟地址。
11.根据权利要求10所述的方法,其特征在于,所述空闲索引资源包括所述空闲索引记录根节点及所述空闲数据记录根节点;所述获取所述空闲索引资源,并将所述目标数据记录标识及对应的数据内容写入所述空闲索引资源中的步骤包括:
从所述空闲索引记录根节点中选取一虚拟地址,将所述虚拟地址对应的索引节点作为新索引节点;
从所述空闲数据记录根节点中选取一虚拟地址,将所述虚拟地址对应的数据记录作为新的数据记录;
将所述目标数据记录标识及对应的数据内容写入所述新的数据记录中;
在所述新索引节点下记录所述的目标数据记录标识及所述新的数据记录的虚拟地址。
12.根据权利要求11所述的方法,其特征在于,还包括:
当从所述空闲索引记录根节点中选取一虚拟地址后,更新所述空闲索引记录根节点指向下一虚拟地址;
当从所述空闲数据记录根节点中选取一虚拟地址后,更新所述空闲数据记录根节点指向下一虚拟地址。
13.根据权利要求10或11或12所述的方法,其特征在于,所述虚拟地址包括高16位及低16位两部分,所述高16位中记录对应的索引节点的地址相对数据头的偏移,所述低16位中记录所述索引节点内部的偏移。
14.根据权利要求13所述的方法,其特征在于,采用如下公式计算所述目标数据记录虚拟地址对应的物理地址:
物理地址=(所述共享内存基地址+所述数据头大小+当前数据记录的位置*每条数据记录的大小+offset in record)。
15.根据权利要求11所述的方法,其特征在于,还包括:
封装所述共享内存的数据访问接口。
16.一种数据读取装置,其特征在于,所述装置包括:
请求接收模块,用于接收数据读取请求,所述数据读取请求包括目标数据记录标识;
虚拟地址获取模块,用于在预设的关系数据表中匹配到所述目标数据记录标识时,获得与所述目标数据记录标识对应的目标数据记录虚拟地址;其中,所述关系数据表包括多个数据记录标识与对应的数据记录的虚拟地址的关联关系;
物理地址计算模块,用于计算所述目标数据记录虚拟地址对应的物理地址,其中,所述物理地址中存储数据记录标识与对应的数据内容的键值对;
数据读取模块,用于从所述物理地址中获得与所述目标数据记录标识对应的数据内容。
17.根据权利要求16所述的装置,其特征在于,所述关系数据表保存在共享内存中。
18.根据权利要求17所述的装置,其特征于,所述关系数据表包括数据头、索引记录以及数据记录;
所述数据头进一步包括索引根节点,空闲数据记录索引根节点,空闲索引记录根节点;
其中,所述索引根节点用于记录数据记录标识及对应的已使用的索引节点的虚拟地址;
所述索引记录用于记录所述索引节点的信息,所述索引节点的信息包括数据记录标识与对应的数据记录的虚拟地址;
所述数据记录用于记录已写入的数据记录标识和对应的数据内容;
所述空闲数据记录索引根节点用于记录未使用的数据记录的虚拟地址;
所述空闲索引记录根节点用于记录未使用的索引节点的虚拟地址。
19.根据权利要求18所述的装置,其特征在于,所述虚拟地址包括高16位及低16位两部分,所述高16位中记录对应的索引节点的地址相对数据头的偏移,所述低16位中记录所述索引节点内部的偏移。
20.根据权利要求19所述的装置,其特征在于,还包括:
地址获取模块,用于在所述索引根节点中匹配所述目标数据记录标识,获取对应的索引节点的虚拟地址;
计算模块,用于计算所述索引节点的虚拟地址对应的索引节点物理地址;
关系获得模块,用于在所述索引节点物理地址中获得所述索引节点中记录的数据记录标识与所述数据记录虚拟地址的关联关系。
21.根据权利要求19所述的装置,其特征在于,采用如下公式计算所述目标数据记录虚拟地址对应的物理地址:
物理地址=(所述共享内存基地址+所述数据头大小+当前数据记录的位置*每条数据记录的大小+offset in record)。
22.根据权利要求17所述的装置,其特征在于,还包括:
封装模块,用于封装所述共享内存的数据访问接口。
23.一种数据写入装置,其特征在于,所述装置包括:
请求接收模块,用于接收数据写入请求,所述数据写入请求包括目标数据记录标识及对应的数据内容;
判断模块,用于判断在预设的关系数据表中是否匹配到所述目标数据记录标识,其中,所述关系数据表包括多个数据记录标识与对应的数据记录的虚拟地址的关联关系,所述关系数据表还包括空闲索引资源;
第一写入模块,用于在判定在预设的关系数据表中匹配到所述目标数据记录标识时,获得与所述目标数据记录标识对应的目标数据记录虚拟地址,计算所述目标数据记录虚拟地址对应的物理地址,并将所述目标数据的数据内容写入所述物理地址中的对应位置;
第二写入模块,用于在判定在预设的关系数据表中没有匹配到所述目标数据记录标识时,获取所述空闲索引资源,并将所述目标数据记录标识及对应的数据内容写入所述空闲索引资源中。
24.根据权利要求23所述的装置,其特征在于,所述关系数据表保存在共享内存中。
25.根据权利要求24所述的装置,其特征于,所述关系数据表包括数据头、索引记录以及数据记录;所述数据头进一步包括索引根节点,空闲数据记录索引根节点,空闲索引记录根节点;
其中,所述索引根节点用于记录数据记录标识及对应的已使用的索引节点的虚拟地址;
所述索引记录用于记录所述已使用索引节点的信息,所述已使用索引节点的信息包括数据记录标识与对应的数据记录的虚拟地址;
所述数据记录用于记录已写入的数据记录标识和对应的数据内容;
所述空闲数据记录索引根节点用于记录未使用的数据记录的虚拟地址;
所述空闲索引记录根节点用于记录未使用的索引节点的虚拟地址。
26.根据权利要求25所述的装置,其特征在于,所述空闲索引资源包括所述空闲索引记录根节点及所述空闲数据记录根节点;所述第二写入模块包括:
第一选取子模块,用于从所述空闲索引记录根节点中选取一虚拟地址,将所述虚拟地址对应的索引节点作为新索引节点;
第二选取子模块,用于从所述空闲数据记录根节点中选取一虚拟地址,将所述虚拟地址对应的数据记录作为新的数据记录;
写入子模块,用于将所述目标数据记录标识及对应的数据内容写入所述新的数据记录中;
更新子模块,用于在所述新索引节点下记录所述的目标数据记录标识及所述新的数据记录的虚拟地址。
27.根据权利要求26所述的装置,其特征在于,还包括:
第一更新模块,用于更新所述空闲索引记录根节点指向下一虚拟地址;
第二更新模块,用于更新所述空闲数据记录根节点指向下一虚拟地址。
28.根据权利要求25或26或27所述的装置,其特征在于,所述虚拟地址包括高16位及低16位两部分,所述高16位中记录对应的索引节点的地址相对数据头的偏移,所述低16位中记录所述索引节点内部的偏移。
29.根据权利要求28所述的装置,其特征在于,采用如下公式计算所述目标数据记录虚拟地址对应的物理地址:
物理地址=(所述共享内存基地址+所述数据头大小+当前数据记录的位置*每条数据记录的大小+offset in record)。
30.根据权利要求26所述的装置,其特征在于,还包括:
封装模块,用于封装所述共享内存的数据访问接口。
CN201510185480.8A 2015-04-17 2015-04-17 一种数据读取及写入的方法和装置 Active CN104809183B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510185480.8A CN104809183B (zh) 2015-04-17 2015-04-17 一种数据读取及写入的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510185480.8A CN104809183B (zh) 2015-04-17 2015-04-17 一种数据读取及写入的方法和装置

Publications (2)

Publication Number Publication Date
CN104809183A true CN104809183A (zh) 2015-07-29
CN104809183B CN104809183B (zh) 2018-06-22

Family

ID=53694005

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510185480.8A Active CN104809183B (zh) 2015-04-17 2015-04-17 一种数据读取及写入的方法和装置

Country Status (1)

Country Link
CN (1) CN104809183B (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106919633A (zh) * 2016-06-08 2017-07-04 阿里巴巴集团控股有限公司 数据的读取方法及装置
CN107729159A (zh) * 2017-09-29 2018-02-23 华为技术有限公司 一种共享内存的地址映射方法及装置
CN108614671A (zh) * 2016-12-12 2018-10-02 北京忆恒创源科技有限公司 基于命名空间的键-数据访问方法与固态存储设备
CN108614669A (zh) * 2016-12-12 2018-10-02 北京忆恒创源科技有限公司 解决哈希冲突的键-数据访问方法与固态存储设备
CN109471894A (zh) * 2018-10-29 2019-03-15 深圳市瑞驰信息技术有限公司 一种新型分散式文件与对象统一存储的系统及方法
CN110134660A (zh) * 2019-05-22 2019-08-16 苏州浪潮智能科技有限公司 一种数据访问方法、装置、设备及计算机可读存储介质
CN111258956A (zh) * 2019-03-22 2020-06-09 深圳市远行科技股份有限公司 一种面向远端海量数据文件预读的方法及设备
CN111382200A (zh) * 2018-12-29 2020-07-07 北京中交兴路信息科技有限公司 信息加载方法、装置、服务器及存储介质
CN111737315A (zh) * 2020-06-15 2020-10-02 中国工商银行股份有限公司 地址模糊匹配方法及装置
CN112100107A (zh) * 2019-06-17 2020-12-18 广州慧睿思通信息科技有限公司 一种usb数据传输方法、装置及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101315628A (zh) * 2007-06-01 2008-12-03 华为技术有限公司 内存数据库系统及实现内存数据库的方法和装置
CN103473314A (zh) * 2013-09-11 2013-12-25 北京思特奇信息技术股份有限公司 一种基于共享内存的键值对存储方法及装置
US20140122828A1 (en) * 2012-11-01 2014-05-01 Mellanox Technologies Ltd. Sharing address translation between CPU and peripheral devices

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101315628A (zh) * 2007-06-01 2008-12-03 华为技术有限公司 内存数据库系统及实现内存数据库的方法和装置
US20140122828A1 (en) * 2012-11-01 2014-05-01 Mellanox Technologies Ltd. Sharing address translation between CPU and peripheral devices
CN103473314A (zh) * 2013-09-11 2013-12-25 北京思特奇信息技术股份有限公司 一种基于共享内存的键值对存储方法及装置

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106919633A (zh) * 2016-06-08 2017-07-04 阿里巴巴集团控股有限公司 数据的读取方法及装置
CN108614671A (zh) * 2016-12-12 2018-10-02 北京忆恒创源科技有限公司 基于命名空间的键-数据访问方法与固态存储设备
CN108614669A (zh) * 2016-12-12 2018-10-02 北京忆恒创源科技有限公司 解决哈希冲突的键-数据访问方法与固态存储设备
CN108614671B (zh) * 2016-12-12 2023-02-28 北京忆恒创源科技股份有限公司 基于命名空间的键-数据访问方法与固态存储设备
CN108614669B (zh) * 2016-12-12 2023-02-17 北京忆恒创源科技股份有限公司 解决哈希冲突的键-数据访问方法与固态存储设备
CN107729159A (zh) * 2017-09-29 2018-02-23 华为技术有限公司 一种共享内存的地址映射方法及装置
CN109471894B (zh) * 2018-10-29 2021-12-24 深圳市瑞驰信息技术有限公司 一种新型分散式文件与对象统一存储的系统及方法
CN109471894A (zh) * 2018-10-29 2019-03-15 深圳市瑞驰信息技术有限公司 一种新型分散式文件与对象统一存储的系统及方法
CN111382200A (zh) * 2018-12-29 2020-07-07 北京中交兴路信息科技有限公司 信息加载方法、装置、服务器及存储介质
CN111258956A (zh) * 2019-03-22 2020-06-09 深圳市远行科技股份有限公司 一种面向远端海量数据文件预读的方法及设备
CN110134660A (zh) * 2019-05-22 2019-08-16 苏州浪潮智能科技有限公司 一种数据访问方法、装置、设备及计算机可读存储介质
CN112100107A (zh) * 2019-06-17 2020-12-18 广州慧睿思通信息科技有限公司 一种usb数据传输方法、装置及系统
CN111737315A (zh) * 2020-06-15 2020-10-02 中国工商银行股份有限公司 地址模糊匹配方法及装置
CN111737315B (zh) * 2020-06-15 2023-08-11 中国工商银行股份有限公司 地址模糊匹配方法及装置

Also Published As

Publication number Publication date
CN104809183B (zh) 2018-06-22

Similar Documents

Publication Publication Date Title
CN104809183A (zh) 一种数据读取及写入的方法和装置
CN110457319B (zh) 区块链状态数据存储方法及装置、电子设备
CN110334154B (zh) 基于区块链的分级存储方法及装置、电子设备
US10235093B1 (en) Restoring snapshots in a storage system
US20180349396A1 (en) Managing I/O Operations in a Storage Network
CN103136243B (zh) 基于云存储的文件系统去重方法及装置
KR102028252B1 (ko) 자율 메모리 아키텍처
CN109656923A (zh) 一种数据处理方法、装置、电子设备及存储介质
WO2017020668A1 (zh) 一种物理磁盘的共享方法及装置
CN104503745A (zh) 一种生成应用渠道包的方法和装置
CN103425785A (zh) 数据存储系统及其用户数据存储、读取方法
CN103853714A (zh) 一种数据处理方法和装置
CN107817946A (zh) 用于混合存储设备读写数据的方法以及装置
CN102937993B (zh) 一种用于访问关键字的方法及装置
CN112988761B (zh) 区块链数据存储方法及装置、电子设备
CN111459948B (zh) 一种基于中心化块链式账本的交易完整性验证方法
CN109947729A (zh) 一种实时数据分析方法及装置
CN104615459A (zh) 一种MoCA设备参数配置方法及装置
CN101783814A (zh) 海量存储系统的元数据存储方法
CN111427845B (zh) 一种交互式建模分析算子数据交换方法
CN104391947A (zh) 海量gis数据实时处理方法及系统
CN106294700A (zh) 一种日志的存储与读取方法及装置
CN112905607B (zh) 区块链数据存储方法及装置、电子设备
CN105354310B (zh) 基于MapReduce的地图瓦片存储布局优化方法
CN106407345A (zh) 一种脏数据更新方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
EXSB Decision made by sipo to initiate substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant