CN106096023B - 数据读取方法、数据写入方法及数据服务器 - Google Patents

数据读取方法、数据写入方法及数据服务器 Download PDF

Info

Publication number
CN106096023B
CN106096023B CN201610473734.0A CN201610473734A CN106096023B CN 106096023 B CN106096023 B CN 106096023B CN 201610473734 A CN201610473734 A CN 201610473734A CN 106096023 B CN106096023 B CN 106096023B
Authority
CN
China
Prior art keywords
data
target
value
key
index information
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
CN201610473734.0A
Other languages
English (en)
Other versions
CN106096023A (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201610473734.0A priority Critical patent/CN106096023B/zh
Publication of CN106096023A publication Critical patent/CN106096023A/zh
Application granted granted Critical
Publication of CN106096023B publication Critical patent/CN106096023B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables

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)
  • Storage Device Security (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例提供了一种数据读取方法,应用于数据服务器,其中,数据服务器存储有哈希表和链表,其中,哈希表用于存储键值的索引信息,链表用于存储与索引信息对应的多个区域的数据。该数据读取方法通过计算目标键值对应的目标哈希值;确定哈希表中与目标哈希值相关联的索引信息为目标索引信息;获取与目标索引信息对应的目标数据,并将目标数据发送至终端。可见,本方案采用哈希加链表的方式,简化了内存管理逻辑,读取速度快。

Description

数据读取方法、数据写入方法及数据服务器
技术领域
本发明涉及数据处理技术领域,更具体地说,涉及一种数据读取方法、数据写入方法及数据服务器。
背景技术
随着大数据时代的到来,数据量不断增加,数据库的访问量也不断增大,用户对数据的访问速度要求也越来越高。通常,为了提高数据的访问速度,需要将要访问的数据写入数据服务器的内存,再进行访问。
目前,采用两层哈希表的结构实现数据的读取和写入,其中,第一层哈希表存储Key的索引,第二层存储Field的索引,发明人发现,该数据存储方式,在数据写入时,要求每一个Key新建时,需要分配一个连续的内存空间,用于创建第二层哈希结构,使得内存管理逻辑非常繁重。而且,采用此方式,在同时读取多个Field值时,需要计算多次哈希,数据读取速度慢。
因此,如何快速读取数据成为本领域技术人员亟待解决的问题。
发明内容
有鉴于此,本发明实施例提供数据读取方法、数据写入方法及数据服务器,通过哈希加链表的方式,简化了内存管理逻辑,读取速度快。
为实现上述目的,本发明实施例提供如下技术方案:
一种数据读取方法,应用于数据服务器,
数据服务器存储有哈希表和链表,所述哈希表用于存储键值的索引信息,所述链表用于存储与所述索引信息对应的多个区域的数据;
计算目标键值对应的目标哈希值;
确定所述哈希表中与所述目标哈希值相关联的索引信息为目标索引信息;
获取与所述目标索引信息对应的目标数据。
一种数据写入方法,应用于数据服务器,
数据服务器存储有哈希表和链表,所述哈希表用于存储键值的索引信息,所述链表用于存储与所述索引信息对应的多个区域的数据;
判断所述索引信息中是否包含目标键值,如果是,将所述目标键值对应的多个区域的数据进行存储;如果否,将所述索引信息中的键值赋值为目标键值,并对所述目标键值对应的多个区域的数据进行存储。
一种数据服务器,包括:
创建模块,用于存储哈希表和链表,所述哈希表用于存储键值的索引信息,所述链表用于存储与所述索引信息对应的多个区域的数据;
第一计算模块,用于计算目标键值对应的目标哈希值;
第一确定模块,用于确定所述哈希表中与所述目标哈希值相关联的索引信息为目标索引信息;
第一获取模块,用于获取与所述目标索引信息对应的目标数据。
基于上述技术方案,本发明实施例提供了一种数据读取方法,应用于数据服务器,其中,数据服务器存储有哈希表和链表,其中,哈希表用于存储键值的索引信息,链表用于存储与索引信息对应的多个区域的数据。该数据读取方法通过计算目标键值对应的目标哈希值;确定哈希表中与目标哈希值相关联的索引信息为目标索引信息;获取与目标索引信息对应的目标数据,并将目标数据发送至终端。可见,本方案采用哈希加链表的方式,简化了内存管理逻辑,读取速度快。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的数据处理系统的结构框图;
图2为本发明实施例提供的数据处理系统的信令流程图;
图3为本发明实施例提供的数据处理系统的又一流程图;
图4为本发明实施例提供的数据读取方法的流程图;
图5为本发明实施例提供的数据读取方法的又一流程图;
图6为本发明实施例提供的数据服务器的结构示意图;
图7为本发明实施例提供的数据服务器的又一结构示意图;
图8为本发明实施例提供的服务器的硬件结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都对应本发明保护的范围。
本发明实施例提供了一种数据读取方法,应用于数据服务器,其中,数据服务器存储有哈希表和链表,其中,哈希表用于存储键值的索引信息,链表用于存储与索引信息对应的多个区域的数据。该数据读取方法通过计算目标键值对应的目标哈希值;确定哈希表中与目标哈希值相关联的索引信息为目标索引信息;获取与目标索引信息对应的目标数据,并将目标数据发送至终端。可见,本方案采用哈希加链表的方式,简化了内存管理逻辑,读取速度快。
图1为本发明实施例提供的数据处理系统的结构框图,本发明实施例提供的数据读取方法以及数据写入方法可基于图1所示系统实现,参照图1,本发明实施例提供的数据处理系统可以包括:服务器10,至少一个终端20;
服务器10可以为网络侧设置的用于数据处理的设备,服务器10可以为单台服务器,也可以为由多台服务器组成的服务器群组;
至少一个终端20为用户侧的用于提交数据查询请求的设备,如手机、平板电脑、笔记本电脑等。
基于图1所示系统,图2示出了本发明实施例提供的数据处理系统的信令流程图,结合图1和图2所示,该流程可以包括:
S10、终端发送数据查询请求至服务器。
S11、服务器接收所述数据查询请求。
S12、建立哈希表和链表。
其中,所述哈希表用于存储键值Key的索引信息,所述键值的索引信息可以包括键值、所述键值的修改时间以及数据偏移指针,所述数据偏移指针为与所述键值对应的区域的数据在所述链表中的位置。
具体的,哈希表可以使用二维数组保存,如一个桶长为m、桶深为n的哈希表,用形如hash[n][m]的二位数组保存。即该二维数组的结点定义为:
struct THashElem{
char key[128];//Key值
uint32_t modify_time;//修改时间
uint32_t position;//数据在Field数据链表的位置
}。
另外,还会保存一个长度为n的递减素数数组mod[n],其中,mod[0]为小于m的最大素数。具体的,mod是用来计算每个哈希值所映射的位置。例如某一个Key计算出来的哈希值是k=18932,哈希表第一行的长度是mod[0]=9973,则k对mod[0]取模得到的值8959为k在第一行的位置。
又由于哈希表每一行的长度必须要不一样,以保证当k在上一行冲突时,在下一行可以映射到不同的位置,因此,mod[n]为递减数组。
而链表采用一维数组,链表用于存储与所述索引信息对应的多个区域Field的数据。
数据中每个Field根据FieldName排序,并以FieldLen/FieldName/ValueLen/ValueType/ValueBuf方式紧缩存储。其中,FieldLen为Field的长度,在本实施例中,该Field的长度为4字节;FieldName:为Field的名称;ValueLen为Field对应值的长度,也是4字节;ValueType为Field对应值的类型,如整数、字符串、数组等,本实施例中ValueType也选用4字节;ValueBuf为Field对应值的具体空间。具体的,数组的下标代表链表的位置。即上述哈希表对结点的定义里的THashElem.position就是此链表数组的下标值。
数组中每个结点定义为:
struct TLinkElem{
uint32_t next_positon;
char buffer[512];
};
每个Key对应的数据部分,可能多个结点链接成的数据链表组成。其中每个数据链表包括一个表头部分,定义如下:
struct TLinkBufHead{
char key[128];//Key的值
uint32_t crc;//数据空间的crc校验值
uint32_t buffer_len;//数据空间长度
};
数据的每个Field均以FieldLen/FieldName/ValueLen/ValueType/ValueBuf的方式紧缩存储,并且按FieldName的值从小到大排序。
S13、计算目标键值对应的目标哈希值。
此处,可以通过预设算法计算Key值对应的哈希值,例如采用FNV算法,当然,采用其他算法也可以。
S14、确定所述哈希表中与所述目标哈希值相关联的索引信息为目标索引信息。
S15、获取与所述目标索引信息对应的目标数据。
需要说明的是,此处可以通过获取所述索引信息中根据所述目标哈希值得到的键值。再获取与所述键值对应的数据偏移指针,根据所述数据偏移指针,确定所述目标数据。
其中,服务器在获取所述索引信息中根据所述目标哈希值得到的键值时,可以通过在获取所述目标哈希值在所述哈希表中每i行的位置j后,获取目标位置hash[i][j]的键值与所述目标键值相同的键值。
服务器在获取与所述键值对应的数据偏移指针,根据所述数据偏移指针,确定所述目标数据时,可以通过获取所述目标位置hash[i][j]的数据偏移指针的数值;根据所述数据偏移指针的数值,确定所述键值对应的数据链表的首结点的位置;再根据预设的数据空间的长度以及所述首结点的位置,获取第一链表数据;最后遍历所述第一链表数据,判断所述第一链表数据的区域名与目标数据是否一致,如果是,确定所述第一链表数据为目标数据。
S16、将所述目标数据发送至所述终端。
现结合一具体实例,对本方案提供的数据处理系统在实现数据读取的工作原理进行说明,例如,现在需要查询一个Key值为k,Field为f1、f2、f3的值(其中f1、f2、f3按字母由小到大排序),操作如下:
1、先用FNV算法计算k对应的哈希值,假设哈希值为h。
2、对哈希表每一行i(i从0开始),计算h在该行的位置,假设值为j。
3、判断hash[i][j]的key字段与k是否一致。是则继续,否则增加i的值,返回操作步骤2。
4、取出hash[i][j]的position字段的值,假设为p。则link[p]为k对应的数据链表首结点的位置。
5、从link[p]中取出buffer部分,解析出TLinkBufHead,并根据buffer_len获取整个链表的数据部分。
6、依次遍历整个数据部分,先取出4个字节作为FieldLen的值,取出FieldLen个字节作为FieldName的值。判断FieldName与f1是否一致,是则继续,否则重复执行本步骤,直至找到FieldName的值与f1相同。
7、取出4字节作为ValueLen的值,取出ValueLen个字节作为ValueType和ValueBuf的值,此值即为f1的值。
继续步骤7,查询f2、f3的值。
上面介绍了本数据处理系统读取数据的处理流程,本实施例还提供了一种数据写入的处理流程,如图3所示,具体为:
步骤S21、服务器判断所述索引信息中是否包含目标键值,如果是,将所述目标键值对应的多个区域的数据进行存储;如果否,将所述索引信息中的键值赋值为目标键值,并对所述目标键值对应的多个区域的数据进行存储。
其中,服务器将所述目标键值对应的多个区域的数据进行存储,具体可以按照预设字段压缩所述多个区域的数据,并计算每个所述区域的数据的目标长度。之后获取所述链表中长度大于所述目标长度的结点,将压缩后的数据存储到所述链表的数据空间。
具体的,该服务器还可以获取与所述目标键值相关联的目标哈希值在所述哈希表中每i行的位置j;
将所述键值对应的数据链表的首结点的位置赋值为目标位置hash[i][j]的数据偏移指针的数值。
现结合一具体实例,对本数据写入流程进行说明,如下:
假设哈希表使用名为hash的二维数组保存,Field数据链表使用名为link的一维数组保存。
现在需要写入一个Key值为k,Field为f1、f2、f3的值(其中f1、f2、f3按字母由小到大排序),操作如下:
1、判断k在hash中是否存在。
其具体实现步骤参见上述数据读取流程中的步骤1-4,如果存在,是则将f1、f2、f3按FieldLen/FieldName/ValueLen/ValueType/ValueBuf紧缩存储到临时空间t内,并计算其总大小,假设为l。
如果不存在,则判断hash[i][j]的key值是否为空,是则将hash[i][j]的key值赋值为k,position值赋值为0;否则查找下一个空结点。
从link中的空闲结点中,取出总大小大于l的结点,并组成数据链表。并将临时空间t的数据保存在数据链表的buf空间内。同时设置链表的表头TLinkBufHead的key字段为k,crc字段赋值为根据t计算的crc校验值,buffer_len字段赋值为l。
2、将hash[i][j]的position字段赋值为数据链表首结点的下标值。如果赋值之前,position字段为0,则返回成功,如果否,则删除hash[i][j]原position字段对应的link的数据链表的内容。
采用本实施例提供的数据处理系统,能够快速的实现数据读取或写入,尤其是针对一个Key对应多个Field的情况,如,缓存视频数据时,Key可以是此影片的ID,Field可以包括影片的标题、海报、剧集列表、明星、剧照等。对于影片字段名这类数据,每一个Key需要缓存的Field字段相似的场景,Field数据使用链表的方式代替哈希表,可以减少查询的次数。
例如,Key中需要缓存的总Field个数为20,需要查询的Field个数为15。用本方案,即采用链表的方式,查询次数为20,而现有技术中,采用哈希表的方式查询的次数为15*ln(20)=34。相比可知,本方案采用哈希加链表的方式,简化了内存管理逻辑,读取速度快。
下面以服务器的角度对本发明实施例提供的数据读取方法进行介绍,下文描述的数据读取方法可与上文描述的信令流程内容相互参照。
图4为本发明实施例提供的数据读取方法的流程图,该方法可应用于服务器,包括:
步骤S101、计算目标键值对应的目标哈希值;
步骤S102、确定所述哈希表中与所述目标哈希值相关联的索引信息为目标索引信息;
步骤S103、获取与所述目标索引信息对应的目标数据。
需要说明的是,本数据读取方法基于数据服务器的硬件架构实现,其中,数据服务器存储有哈希表和链表,哈希表用于存储键值的索引信息,链表用于存储与所述索引信息对应的多个区域的数据。当然,该哈希表和链表可以是在执行上述数据读取方法之前进行构建,并存储于数据服务器中。
优选的,所述键值的索引信息包括键值、所述键值的修改时间以及数据偏移指针,所述数据偏移指针为与所述键值对应的区域的数据在所述链表中的位置;
所述确定所述哈希表中与所述目标哈希值相关联的索引信息为目标索引信息包括:
获取所述索引信息中根据所述目标哈希值得到的键值;
所述获取与所述目标索引信息对应的目标数据包括:
获取与所述键值对应的数据偏移指针,根据所述数据偏移指针,确定所述目标数据。
优选的,所述获取所述索引信息中根据所述目标哈希值得到的键值包括:
获取所述目标哈希值在所述哈希表中每i行的位置j;
获取目标位置hash[i][j]的键值与所述目标键值相同的键值。
优选的,所述获取与所述键值对应的数据偏移指针,根据所述数据偏移指针,确定所述目标数据包括:
获取所述目标位置hash[i][j]的数据偏移指针的数值;
根据所述数据偏移指针的数值,确定所述键值对应的数据链表的首结点的位置;
根据预设的数据空间的长度以及所述首结点的位置,获取第一链表数据;
遍历所述第一链表数据,判断所述第一链表数据的区域名与目标数据是否一致,如果是,确定所述第一链表数据为目标数据。
请参阅图5,为本实施例提供的一种数据写入方法的流程图,该数据写入方法应用于数据服务器,具体包括:
步骤S201、判断所述索引信息中是否包含目标键值,如果是,将所述目标键值对应的多个区域的数据进行存储;如果否,将所述索引信息中的键值赋值为目标键值,并对所述目标键值对应的多个区域的数据进行存储。
优选的,所述将所述目标键值对应的多个区域的数据进行存储包括:
按照预设字段压缩所述多个区域的数据,并计算每个所述区域的数据的目标长度;
获取所述链表中长度大于所述目标长度的结点,将压缩后的数据存储到所述链表的数据空间。
优选的,当所述索引信息中不否包含所述目标键值,将所述索引信息中的键值赋值为目标键值之后,所述并对所述目标键值对应的多个区域的数据进行存储包括:
获取与所述目标键值相关联的目标哈希值在所述哈希表中每i行的位置j;
将所述键值对应的数据链表的首结点的位置赋值为目标位置hash[i][j]的数据偏移指针的数值。
其方法实施例的工作原理可参见上述系统实施例。
下面对本发明实施例提供的服务器进行介绍,下文描述的服务器可与上文以服务器角度描述的数据读取方法和数据写入系统相互对应参照。
图6为本发明实施例提供的服务器的结构框图,参照图6,该服务器可以包括:
第一计算模块20,用于计算目标键值对应的目标哈希值;
第一确定模块30,用于确定所述哈希表中与所述目标哈希值相关联的索引信息为目标索引信息;
第一获取模块40,用于获取与所述目标索引信息对应的目标数据。
可选的,还可以包括创建模块,用于存储哈希表和链表,所述哈希表用于存储键值的索引信息,所述链表用于存储与所述索引信息对应的多个区域的数据。
可选的,如图7所示,所述第一确定模块30包括第一获取单元301,用于获取所述索引信息中根据所述目标哈希值得到的键值;
第一获取模块40包括第二获取单元401,用于获取与所述键值对应的数据偏移指针,根据所述数据偏移指针,确定所述目标数据。
有选的,所述第一获取单元包括:
第一获取子单元,用于获取所述目标哈希值在所述哈希表中每i行的位置j;
第二获取子单元,用于获取目标位置hash[i][j]的键值与所述目标键值相同的键值。
优选的,所述第二获取单元包括:
第三获取子单元,用于获取所述目标位置hash[i][j]的数据偏移指针的数值;
第一确定子单元,用于根据所述数据偏移指针的数值,确定所述键值对应的数据链表的首结点的位置;
第四获取子单元,用于根据预设的数据空间的长度以及所述首结点的位置,获取第一链表数据;
第一判断子单元,用于遍历所述第一链表数据,判断所述第一链表数据的区域名与目标数据是否一致,如果是,确定所述第一链表数据为目标数据。
优选的,还包括,
第一判断模块,用于判断所述索引信息中是否包含目标键值,如果是,将所述目标键值对应的多个区域的数据进行存储;如果否,将所述索引信息中的键值赋值为目标键值,并对所述目标键值对应的多个区域的数据进行存储。
优选的,所述第一判断模块包括:
压缩单元,用于按照预设字段压缩所述多个区域的数据,并计算每个所述区域的数据的目标长度;
第三获取单元,用于获取所述链表中长度大于所述目标长度的结点,将压缩后的数据存储到所述链表的数据空间。
优选的,所述第一判断模块包括:
第四获取单元,用于获取与所述目标键值相关联的目标哈希值在所述哈希表中每i行的位置j;
赋值单元,用于将所述键值对应的数据链表的首结点的位置赋值为目标位置hash[i][j]的数据偏移指针的数值。
本发明实施例提供的服务器的硬件结构可如图8所示,包括:处理器1,通信接口2,存储器3和通信总线4;
其中处理器1、通信接口2、存储器3通过通信总线4完成相互间的通信;
可选的,通信接口2可以为通信模块的接口,如GSM模块的接口;
处理器1,用于执行程序;
存储器3,用于存放程序;
程序可以包括程序代码,所述程序代码包括计算机操作指令。
处理器1可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
其中,程序可具体用于:
存储哈希表和链表,所述哈希表用于存储键值的索引信息,所述链表用于存储与所述索引信息对应的多个区域的数据;
计算目标键值对应的目标哈希值;
确定所述哈希表中与所述目标哈希值相关联的索引信息为目标索引信息;
获取与所述目标索引信息对应的目标数据。
或,
存储哈希表和链表,所述哈希表用于存储键值的索引信息,所述链表用于存储与所述索引信息对应的多个区域的数据;
判断所述索引信息中是否包含目标键值,如果是,将所述目标键值对应的多个区域的数据进行存储;如果否,将所述索引信息中的键值赋值为目标键值,并对所述目标键值对应的多个区域的数据进行存储。
综上所述,本发明实施例提供了一种数据读取方法,应用于数据服务器,其中,数据服务器存储有哈希表和链表,其中,哈希表用于存储键值的索引信息,链表用于存储与索引信息对应的多个区域的数据。该数据读取方法通过计算目标键值对应的目标哈希值;确定哈希表中与目标哈希值相关联的索引信息为目标索引信息;获取与目标索引信息对应的目标数据,并将目标数据发送至终端。可见,本方案采用哈希加链表的方式,简化了内存管理逻辑,读取速度快。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (9)

1.一种数据读取方法,应用于数据服务器,其特征在于,所述数据服务器存储有哈希表和链表,所述哈希表用于存储键值的索引信息,所述键值的索引信息包括键值、所述键值的修改时间以及数据偏移指针,所述链表用于存储与所述索引信息对应的多个区域的数据,其中,一个键值对应多个区域,所述数据读取方法包括:
计算目标键值对应的目标哈希值;
获取所述目标哈希值在所述哈希表中每i行的位置j;
获取目标位置hash[i][j]的键值与所述目标键值相同的键值;
获取所述目标位置hash[i][j]的数据偏移指针的数值;
根据所述数据偏移指针的数值,确定所述键值对应的数据链表的首结点的位置;
根据预设的数据空间的长度以及所述首结点的位置,获取第一链表数据;
遍历所述第一链表数据,判断所述第一链表数据的区域名与目标数据是否一致,如果是,确定所述第一链表数据为目标数据。
2.根据权利要求1所述的数据读取方法,其特征在于,
所述数据偏移指针为与所述键值对应的区域的数据在所述链表中的位置。
3.一种数据写入方法,应用于数据服务器,其特征在于,所述数据服务器存储有哈希表和链表,所述哈希表用于存储键值的索引信息,所述键值的索引信息包括键值、所述键值的修改时间以及数据偏移指针,所述链表用于存储与所述索引信息对应的多个区域的数据,其中,一个键值对应多个区域,所述数据写入方法包括:
判断所述索引信息中是否包含目标键值,包括:计算目标键值对应的目标哈希值;获取所述目标哈希值在所述哈希表中每i行的位置j;获取目标位置hash[i][j]的键值与所述目标键值相同的键值;获取所述目标位置hash[i][j]的数据偏移指针的数值;根据所述数据偏移指针的数值,确定所述键值对应的数据链表的首结点的位置;根据预设的数据空间的长度以及所述首结点的位置,获取第一链表数据;遍历所述第一链表数据,判断所述第一链表数据的区域名与目标数据是否一致,如果是,确定所述第一链表数据为目标数据,
如果所述索引信息中包含目标键值,将所述目标键值对应的多个区域的数据进行存储;如果所述索引信息中没有包含目标键值,将所述索引信息中的键值赋值为目标键值,并对所述目标键值对应的多个区域的数据进行存储。
4.根据权利要求3所述的数据写入方法,其特征在于,
所述将所述目标键值对应的多个区域的数据进行存储包括:
按照预设字段压缩所述多个区域的数据,并计算每个所述区域的数据的目标长度;
获取所述链表中长度大于所述目标长度的结点,将压缩后的数据存储到所述链表的数据空间。
5.根据权利要求4所述的数据写入方法,其特征在于,当所述索引信息中不否包含所述目标键值,将所述索引信息中的键值赋值为目标键值之后,并对所述目标键值对应的多个区域的数据进行存储包括:
获取与所述目标键值相关联的目标哈希值在所述哈希表中每i行的位置j;
将所述键值对应的数据链表的首结点的位置赋值为目标位置hash[i][j]的数据偏移指针的数值。
6.一种数据服务器,其特征在于,包括:
创建模块,用于存储哈希表和链表,所述哈希表用于存储键值的索引信息,所述键值的索引信息包括键值、所述键值的修改时间以及数据偏移指针,所述链表用于存储与所述索引信息对应的多个区域的数据,其中,一个键值对应多个区域;
第一计算模块,用于计算目标键值对应的目标哈希值;
第一确定模块,所述第一确定模块包括第一获取单元,所述第一获取单元包括:
第一获取子单元,用于获取所述目标哈希值在所述哈希表中每i行的位置j;
第二获取子单元,用于获取目标位置hash[i][j]的键值与所述目标键值相同的键值;
第一获取模块,所述第一获取模块包括第二获取单元,所述第二获取单元包括:
第三获取子单元,用于获取所述目标位置hash[i][j]的数据偏移指针的数值;
第一确定子单元,用于根据所述数据偏移指针的数值,确定所述键值对应的数据链表的首结点的位置;
第四获取子单元,用于根据预设的数据空间的长度以及所述首结点的位置,获取第一链表数据;
第一判断子单元,用于遍历所述第一链表数据,判断所述第一链表数据的区域名与目标数据是否一致,如果是,确定所述第一链表数据为目标数据。
7.根据权利要求6所述的数据服务器,其特征在于,还包括,
第一判断模块,用于判断所述索引信息中是否包含目标键值,如果是,将所述目标键值对应的多个区域的数据进行存储;如果否,将所述索引信息中的键值赋值为目标键值,并对所述目标键值对应的多个区域的数据进行存储。
8.根据权利要求7所述的数据服务器,其特征在于,所述第一判断模块包括:
压缩单元,用于按照预设字段压缩所述多个区域的数据,并计算每个所述区域的数据的目标长度;
第三获取单元,用于获取所述链表中长度大于所述目标长度的结点,将压缩后的数据存储到所述链表的数据空间。
9.根据权利要求8所述的数据服务器,其特征在于,所述第一判断模块包括:
第四获取单元,用于获取与所述目标键值相关联的目标哈希值在所述哈希表中每i行的位置j;
赋值单元,用于将所述键值对应的数据链表的首结点的位置赋值为目标位置hash[i][j]的数据偏移指针的数值。
CN201610473734.0A 2016-06-24 2016-06-24 数据读取方法、数据写入方法及数据服务器 Active CN106096023B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610473734.0A CN106096023B (zh) 2016-06-24 2016-06-24 数据读取方法、数据写入方法及数据服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610473734.0A CN106096023B (zh) 2016-06-24 2016-06-24 数据读取方法、数据写入方法及数据服务器

Publications (2)

Publication Number Publication Date
CN106096023A CN106096023A (zh) 2016-11-09
CN106096023B true CN106096023B (zh) 2019-03-08

Family

ID=57253761

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610473734.0A Active CN106096023B (zh) 2016-06-24 2016-06-24 数据读取方法、数据写入方法及数据服务器

Country Status (1)

Country Link
CN (1) CN106096023B (zh)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106790762B (zh) * 2017-01-11 2022-05-24 腾讯科技(深圳)有限公司 域名解析方法和装置
CN108874804B (zh) * 2017-05-09 2020-01-14 广东神马搜索科技有限公司 数据存储方法、数据查询方法及装置
CN108255958B (zh) * 2017-12-21 2022-05-03 百度在线网络技术(北京)有限公司 数据查询方法、装置和存储介质
CN108280229B (zh) * 2018-02-26 2022-01-25 腾讯科技(深圳)有限公司 内存数据读写方法和装置
CN108734166B (zh) * 2018-05-23 2022-03-11 深圳市茁壮网络股份有限公司 一种新闻标题检测方法及装置
CN109101635B (zh) * 2018-08-16 2020-09-11 广州小鹏汽车科技有限公司 一种基于Redis Hash结构的数据处理方法及装置
CN111200479B (zh) * 2018-11-19 2022-04-12 福建天泉教育科技有限公司 传输数据的校验方法、存储介质
CN109902092B (zh) * 2019-02-22 2020-05-05 广州荔支网络技术有限公司 一种数据存储系统的操作方法、装置和移动终端
CN110222015B (zh) * 2019-06-19 2021-07-09 北京泰迪熊移动科技有限公司 一种文件数据的读取、查询方法、装置及可读存储介质
CN110764705B (zh) * 2019-10-22 2023-08-04 北京锐安科技有限公司 一种数据的读写方法、装置、设备和存储介质
CN111639076B (zh) * 2020-05-14 2023-12-22 民生科技有限责任公司 一种跨平台高效键值存储方法
CN111858586B (zh) * 2020-07-06 2024-04-09 北京天空卫士网络安全技术有限公司 一种数据处理的方法和装置
CN111832692A (zh) * 2020-07-14 2020-10-27 Oppo广东移动通信有限公司 数据处理方法、装置、终端及存储介质
CN112153696B (zh) * 2020-09-25 2023-04-28 Oppo广东移动通信有限公司 Rlc sdu分段处理方法、装置及终端
CN113064884B (zh) * 2020-12-02 2023-09-05 上海金融期货信息技术有限公司 基于自定义哈希的双源行情去重方法和系统
CN112947856B (zh) * 2021-02-05 2024-05-03 彩讯科技股份有限公司 一种内存数据的管理方法、装置、计算机设备及存储介质
CN113096284B (zh) * 2021-03-19 2022-08-30 福建新大陆通信科技股份有限公司 一种ctid门禁授权信息的核验方法
CN112948642A (zh) * 2021-03-30 2021-06-11 四川九洲电器集团有限责任公司 一种嵌入式哈希表及其操作方法、遍历方法和装置
CN113254627B (zh) * 2021-04-16 2023-07-25 国网河北省电力有限公司经济技术研究院 数据读取方法、装置及终端
CN115507857B (zh) * 2022-11-23 2023-03-14 常州唯实智能物联创新中心有限公司 高效机器人运动路径规划方法及系统
CN116028677B (zh) * 2023-03-14 2023-08-29 阿里云计算有限公司 数据操作方法以及系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100468400C (zh) * 2005-09-30 2009-03-11 腾讯科技(深圳)有限公司 一种提高搜索信息速度的方法及系统
CN103226591B (zh) * 2013-04-15 2016-08-31 厦门亿联网络技术股份有限公司 一种支持多关键字快速访问方法和装置
US10339109B2 (en) * 2013-07-15 2019-07-02 International Business Machines Corporation Optimizing hash table structure for digest matching in a data deduplication system

Also Published As

Publication number Publication date
CN106096023A (zh) 2016-11-09

Similar Documents

Publication Publication Date Title
CN106096023B (zh) 数据读取方法、数据写入方法及数据服务器
CN105468642A (zh) 数据的存储方法及装置
WO2018121430A1 (zh) 文件存储和索引方法、装置、介质、设备及读取文件的方法
CN112380149A (zh) 基于节点内存的数据处理方法、装置、设备以及介质
CN106682110B (zh) 一种基于哈希格网索引的影像文件存储和管理系统及方法
US8903874B2 (en) File system directory attribute correction
CN108021333B (zh) 随机读写数据的系统、装置及方法
US10817203B1 (en) Client-configurable data tiering service
CN110287201A (zh) 数据访问方法、装置、设备及存储介质
CN111198856A (zh) 文件管理方法、装置、计算机设备和存储介质
CN109471843A (zh) 一种元数据缓存方法、系统及相关装置
US11868328B2 (en) Multi-record index structure for key-value stores
CN105653209A (zh) 一种对象存储数据传输方法及装置
CN107145449A (zh) 存储设备和存储方法
US7424574B1 (en) Method and apparatus for dynamic striping
CN110245129A (zh) 一种分布式全局数据去重方法和装置
CN111158606B (zh) 存储方法、装置、计算机设备和存储介质
US7386692B1 (en) Method and apparatus for quantized deadline I/O scheduling
CN106951190A (zh) 数据存储及访问方法、节点和服务器集群
CN114466031B (zh) 一种cdn系统节点配置方法、装置、设备及存储介质
CN113360095B (zh) 硬盘数据管理方法、装置、设备及介质
US8549041B2 (en) Converter traversal using power of two-based operations
CN112988911B (zh) 区块链数据存储方法及装置、电子设备
CN104537023A (zh) 一种反向索引记录的存储方法及装置
CN105046162B (zh) 在内容可寻址存储系统中维护并使用子对父映射的缓存

Legal Events

Date Code Title Description
C06 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