CN111831691B - 一种数据读写方法及装置、电子设备、存储介质 - Google Patents
一种数据读写方法及装置、电子设备、存储介质 Download PDFInfo
- Publication number
- CN111831691B CN111831691B CN201910458391.4A CN201910458391A CN111831691B CN 111831691 B CN111831691 B CN 111831691B CN 201910458391 A CN201910458391 A CN 201910458391A CN 111831691 B CN111831691 B CN 111831691B
- Authority
- CN
- China
- Prior art keywords
- read
- target data
- data
- writing
- memory
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 59
- 230000003068 static effect Effects 0.000 claims description 32
- 238000004590 computer program Methods 0.000 claims description 6
- 238000004891 communication Methods 0.000 claims description 4
- 238000005516 engineering process Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 10
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 239000002699 waste material Substances 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请涉及数据读写技术领域,尤其涉及一种数据读写方法及装置、电子设备、存储介质。本申请通过根据接收的用户端发送的数据读取请求中携带的关键字,可以在内存中查找与关键字对应的目标数据,若在内存中没有查找到目标数据,进一步地,可以在磁盘中查找目标数据,若在磁盘中查找到目标数据,将读取到的目标数据以及关键字对应写入内存中的高速缓存模块,若在磁盘中没有查找到目标数据,将关键字和预设标记值对应写入高速缓存模块,这样,用户端再次发送携带有该关键字的数据读取请求时,都可以直接从高速缓存模块获得读取结果,可以大大减少用户端读取磁盘的次数,可以在合理使用高速缓存模块同时,提高数据读取操作的性能。
Description
技术领域
本申请涉及数据读写技术领域,尤其涉及一种数据读写方法及装置、电子设备、存储介质。
背景技术
在大多数服务场景中通常读的流量大于写的流量,所以在高并发读的场景中,对读的性能要求较高。但是,不管是在读操作还是写操作的场景,一方面高速缓存模块的大小是有限的,而且高速缓存模块存储空间一般会远小于磁盘;另一方面对于磁盘中不存在的数据,如果用户端多次访问磁盘,读的性能将进一步降低。因此,如何在内存中合理使用高速缓存模块以提高数据读取操作的性能是目前亟待解决的问题。
发明内容
有鉴于此,本申请实施例的目的在于提供一种数据读写方法及装置、电子设备、存储介质,可以大大减少用户端读取磁盘的次数,可以在合理使用高速缓存模块同时,提高数据读取操作的性能。
本申请主要包括以下几个方面:
第一方面,本申请实施例提供一种数据读写方法,所述数据读写方法包括:
接收用户端发送的数据读取请求;
根据所述数据读取请求中携带的关键字,在内存中查找与所述关键字对应的目标数据,若在所述内存中没有查找到所述目标数据,则在磁盘中查找所述目标数据;
若在所述磁盘中查找到所述目标数据,则将读取到的所述目标数据以及所述关键字对应写入所述内存中的高速缓存模块,并将读取到的所述目标数据发送至所述用户端;
若在所述磁盘中没有查找到所述目标数据,将所述关键字和预设标记值对应写入所述高速缓存模块,并将未读取到所述目标数据的读取结果发送至所述用户端。
在一种可能的实施方式中,所述数据读写方法还包括:
若在所述内存中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端。
在一种可能的实施方式中,所述在所述内存中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端,包括:
在所述内存中的可读写跳跃表中查找所述目标数据,若在所述可读写跳跃表中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端;
若在所述可读写跳跃表中没有查找到所述目标数据,则在所述内存中的只读跳跃表中查找所述目标数据,若在所述只读跳跃表中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端;
若在所述只读跳跃表中没有查找到所述目标数据,则在所述高速缓存模块中查找所述目标数据,若在所述高速缓存模块中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端。
在一种可能的实施方式中,所述在磁盘中查找所述目标数据,包括:
在所述磁盘中的静态排序表中查找所述目标数据。
在一种可能的实施方式中,所述数据读写方法还包括:
若再次接收到携带有所述关键字的数据读取请求,并在所述内存中的可读写跳跃表和所述内存中的只读跳跃表都没有查找到与所述关键字对应的目标数据后,在所述高速缓存模块中查找所述目标数据;
若根据所述关键字在所述高速缓存模块中查找到所述目标数据,将读取到的所述目标数据发送至所述用户端;
若根据所述关键字在所述高速缓存模块中查找到所述预设标记值,将未读取到所述目标数据的读取结果发送至所述用户端。
在一种可能的实施方式中,所述数据读写方法还包括:
接收所述用户端发送的数据写入请求;
将所述数据写入请求中携带的键值对写入所述内存中的可读写跳跃表和所述磁盘中的预写式日志;
其中,所述键值对包括关键字和与关键字对应的数据。
在一种可能的实施方式中,所述将所述数据写入请求中携带的键值对写入所述内存中的可读写跳跃表,包括:
计算写入所述键值对后的可读写跳跃表占用的第一存储空间;
判断所述第一存储空间是否小于或等于第一预设数值;
若所述第一存储空间小于或等于所述第一预设数值,则将所述键值对写入可读写跳跃表;
若所述第一存储空间大于所述第一预设数值,则放弃写入,并将可读写跳跃表转换为只读跳跃表,同时新建一个可读写跳跃表,将所述键值对写入新建的可读写跳跃表。
在一种可能的实施方式中,在所述将可读写跳跃表转换为只读跳跃表之后,所述数据读写方法还包括:
获取只读跳跃表的数量;
判断只读跳跃表的数量是否等于第二预设数值;
若只读跳跃表的数量等于所述第二预设数值,将至少一个只读跳跃表中的数据写入所述磁盘中的静态排序表,并删除所述至少一个只读跳跃表。
在一种可能的实施方式中,在所述将至少一个只读跳跃表中的数据写入磁盘中的静态排序表之后,所述数据读写方法还包括:
将所述预写式日志中与所述至少一个只读跳跃表中相同的键值对删除。
在一种可能的实施方式中,在所述将至少一个只读跳跃表中的数据写入磁盘中的静态排序表之后,所述数据读写方法还包括:
将所述高速缓存模块中与所述至少一个只读跳跃表中相同的键值对删除。
在一种可能的实施方式中,所述数据读写方法还包括:
检测所述高速缓存模块占用的第二存储空间是否大于或等于第三预设数值;
若所述第二存储空间大于或等于所述第三预设数值,则根据页面置换算法删除预设数量的键值对。
第二方面,本申请实施例还提供一种数据读写装置,所述数据读写装置包括:
第一接收模块,用于接收用户端发送的数据读取请求;
查找模块,用于根据所述第一接收模块接收的所述数据读取请求中携带的关键字,在内存中查找与所述关键字对应的目标数据,若在所述内存中没有查找到所述目标数据,则在磁盘中查找所述目标数据;
第一发送模块,用于若在所述磁盘中查找到所述目标数据,则将读取到的所述目标数据以及所述关键字对应写入所述内存中的高速缓存模块,并将读取到的所述目标数据发送至所述用户端;
第二发送模块,用于若在所述磁盘中没有查找到所述目标数据,将所述关键字和预设标记值对应写入所述高速缓存模块,并将未读取到所述目标数据的读取结果发送至所述用户端。
在一种可能的实施方式中,所述数据读写装置还包括:
第三发送模块,用于若在所述内存中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端。
在一种可能的实施方式中,所述第三发送模块包括:
第一发送单元,用于在所述内存中的可读写跳跃表中查找所述目标数据,若在所述可读写跳跃表中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端;
第二发送单元,用于若在所述可读写跳跃表中没有查找到所述目标数据,则在所述内存中的只读跳跃表中查找所述目标数据,若在所述只读跳跃表中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端;
第三发送单元,用于若在所述只读跳跃表中没有查找到所述目标数据,则在所述高速缓存模块中查找所述目标数据,若在所述高速缓存模块中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端。
在一种可能的实施方式中,所述查找模块,用于根据以下步骤在磁盘中查找所述目标数据:
在所述磁盘中的静态排序表中查找所述目标数据。
在一种可能的实施方式中,所述查找模块,还用于若再次接收到携带有所述关键字的数据读取请求,并在所述内存中的可读写跳跃表和所述内存中的只读跳跃表都没有查找到与所述关键字对应的目标数据后,在所述高速缓存模块中查找所述目标数据;
所述第一发送模块,还用于若根据所述关键字在所述高速缓存模块中查找到所述目标数据,将读取到的所述目标数据发送至所述用户端;
所述第二发送模块,还用于若根据所述关键字在所述高速缓存模块中查找到所述预设标记值,将未读取到所述目标数据的读取结果发送至所述用户端。
在一种可能的实施方式中,所述数据读写装置还包括:
第二接收模块,用于接收所述用户端发送的数据写入请求;
写入模块,用于将所述第二接收模块接收的所述数据写入请求中携带的键值对写入所述内存中的可读写跳跃表和所述磁盘中的预写式日志;
其中,所述键值对包括关键字和与关键字对应的数据。
在一种可能的实施方式中,所述写入模块,用于根据以下步骤将所述键值对写入所述可读写跳跃表:
计算写入所述键值对后的可读写跳跃表占用的第一存储空间;
判断所述第一存储空间是否小于或等于第一预设数值;
若所述第一存储空间小于或等于所述第一预设数值,则将所述键值对写入可读写跳跃表;
若所述第一存储空间大于所述第一预设数值,则放弃写入,并将可读写跳跃表转换为只读跳跃表,同时新建一个可读写跳跃表,将所述键值对写入新建的可读写跳跃表。
在一种可能的实施方式中,所述数据读写装置还包括:
获取模块,用于获取只读跳跃表的数量;
判断模块,用于判断只读跳跃表的数量是否等于第二预设数值;
第一删除模块,用于若只读跳跃表的数量等于所述第二预设数值,将至少一个只读跳跃表中的数据写入所述磁盘中的静态排序表,并删除所述至少一个只读跳跃表。
在一种可能的实施方式中,所述第一删除模块,还用于:
将所述预写式日志中与所述至少一个只读跳跃表中相同的键值对删除。
在一种可能的实施方式中,所述第一删除模块,还用于:
将所述高速缓存模块中与所述至少一个只读跳跃表中相同的键值对删除。
在一种可能的实施方式中,所述数据读写装置还包括:
检测模块,用于检测所述高速缓存模块占用的第二存储空间是否大于或等于第三预设数值;
第二删除模块,用于若所述第二存储空间大于或等于所述第三预设数值,则根据页面置换算法删除预设数量的键值对。
第三方面,本申请实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过所述总线进行通信,所述机器可读指令被所述处理器运行时执行上述第一方面或第一方面中任一种可能的实施方式中所述的数据读写方法的步骤。
第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述第一方面或第一方面中任一种可能的实施方式中所述的数据读写方法的步骤。
本申请实施例中,通过根据接收的用户端发送的数据读取请求中携带的关键字,可以在内存中查找与关键字对应的目标数据,若在内存中没有查找到目标数据,进一步地,可以在磁盘中查找目标数据,若在磁盘中查找到目标数据,将读取到的目标数据以及关键字对应写入内存中的高速缓存模块,若在磁盘中没有查找到目标数据,将关键字和预设标记值对应写入高速缓存模块,这样,用户端再次发送携带有该关键字的数据读取请求时,都可以直接从高速缓存模块获得读取结果,可以大大减少用户端读取磁盘的次数,可以在合理使用高速缓存模块同时,提高数据读取操作的性能。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请实施例一所提供的一种数据读写方法的流程图;
图2示出了本申请实施例二所提供的另一种数据读写方法的流程图;
图3示出了本申请实施例三所提供的一种数据读写装置的功能模块图之一;
图4示出了本申请实施例三所提供的一种数据读写装置的功能模块图之二;
图5示出了本申请实施例三所提供的一种数据读写装置中第三发送模块的功能模块图;
图6示出了本申请实施例四所提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中的附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应当理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的全部其他实施例,都属于本申请保护的范围。
为了使得本领域技术人员能够使用本申请内容,结合特定应用场景“数据读写服务场景”,给出以下实施方式,对于本领域技术人员来说,在不脱离本申请的精神和范围的情况下,可以将这里定义的一般原理应用于其他实施例和应用场景。
本申请实施例下述方法、装置、电子设备或计算机可读存储介质可以应用于任何需要进行数据读写的服务场景,本申请实施例并不对具体的应用场景作限制,任何使用本申请实施例提供的数据读写方法及装置的方案均在本申请保护范围内。
值得注意的是,在本申请提出之前,现有方案中对于嵌入式存储器(RocksDB)中不存在的数据,会多次重复访问磁盘,读的性能较低,而且会将用户端发送的数据写入请求中携带的键值对写入高速缓存模块中,会造成高速缓存模块中的数据量较大,因而无法同时兼顾高速缓存模块的合理使用和保证读操作的性能。
针对上述问题,本申请实施例通过根据接收的用户端发送的数据读取请求中携带的关键字,可以在内存中查找与关键字对应的目标数据,若在内存中没有查找到目标数据,进一步地,可以在磁盘中查找目标数据,若在磁盘中查找到目标数据,将读取到的目标数据以及关键字对应写入内存中的高速缓存模块,若在磁盘中没有查找到目标数据,将关键字和预设标记值对应写入高速缓存模块,这样,用户端再次发送携带有该关键字的数据读取请求时,都可以直接从高速缓存模块获得读取结果,可以大大减少用户端读取磁盘的次数,可以在合理使用高速缓存模块同时,提高数据读取操作的性能。
需要说明的是,本申请应用于嵌入式键值存储器,嵌入式键值存储器包括内存中的可读写跳跃表(memtable)、内存中的只读跳跃表(immutable)、内存中的高速缓存模块(lrucache)、磁盘中的静态排序表(Static Sorted Table)和磁盘中的预写式日志(writeahead log),其中,嵌入式存储器以键值对(key-value)的形式进行数据的存储。
为便于对本申请进行理解,下面结合具体实施例对本申请提供的技术方案进行详细说明。
实施例一
参见图1,图1为本申请实施例一所提供的一种数据读写方法的流程图。如图1所示,本申请实施例提供的数据读写方法,应用于嵌入式键值存储器,包括以下步骤:
S101:接收用户端发送的数据读取请求。
在具体实施中,嵌入式键值存储器可以接收用户端发送的数据读写请求,其中,数据读写请求包括数据写入请求和数据读取请求,即用户端可以向嵌入式键值存储器写入数据,也可以从嵌入式存储器读取数据。
这里,嵌入式存储器以键值对的形式进行数据的存储,这样,通过用户端发送的数据读取请求中携带的关键字,可以根据该关键字在嵌入式存储器中查找出与该关键字对应的目标数据。
S102:根据所述数据读取请求中携带的关键字,在内存中查找与所述关键字对应的目标数据,若在所述内存中没有查找到所述目标数据,则在磁盘中查找所述目标数据。
在具体实施中,可以根据用户端发送的数据读取请求中的关键字,先在内存中查找与关键字对应的目标数据,这里,内存中包括可读写跳跃表、只读跳跃表、高速缓存模块,即可以根据嵌入式键值存储器的查询逻辑依次从内存中的可读写跳跃表、只读跳跃表、高速缓存模块中查找目标数据,若在内存中没有查找到目标数据,才会在磁盘中查找目标数据。
这里,可读写跳跃表存储的是最近写入的数据,一旦可读写跳跃表被写满后,该可读写跳跃表将变为只读跳跃表,其中,只读跳跃表只支持读取,不支持写入。
需要说明的是,本申请中的写入和读取的数据依赖于关键字,所以可以将同一关键字对应的写入和读写放在一个线程进行,这样,即使读取的速度超过写入的速度,用户端仍可以通过同一线程排队的形式,读取到数据。
S103:若在所述磁盘中查找到所述目标数据,则将读取到的所述目标数据以及所述关键字对应写入所述内存中的高速缓存模块,并将读取到的所述目标数据发送至所述用户端。
在具体实施中,若在磁盘中查找到与关键字对应的目标数据后,将目标数据以及关键字对应写入内存中的高速缓存模块,即高速缓存模块中就存储了该关键字以及该关键字对应的目标数据,这样,有用户端再次发送携带有该关键字的数据读取请求时,就可以直接从高速缓存模块读取到目标数据,而不必再从磁盘中读取该目标数据,可以大大减少用户端读取磁盘的次数,由于使用高速缓存模块读取目标数据,还可以提高数据读取操作的性能。
另外,现有方案中采用直写方式或回写方式写入数据,但是不管采用哪种方式进行数据的写入,都会将最近的数据写入高速缓存模块和内存中的可读写跳跃表中,这样,就会造成高速缓存模块中的数据量较大,而且用户端在读取最近的数据时,可以直接从可读写跳跃表中读取,而不必从高速缓存模块中读取,这将造成缓存空间的浪费。对于本申请,高速缓存模块中存储的数据来自磁盘,用户端在从磁盘中读取到数据后,会同时写入高速缓存模块中,这样,用户端再次读取相同数据时,就可以直接从高速缓存模块中读取,可以起到合理使用高速缓存模块,以及保证读操作的性能的作用。
S104:若在所述磁盘中没有查找到所述目标数据,将所述关键字和预设标记值对应写入所述高速缓存模块,并将未读取到所述目标数据的读取结果发送至所述用户端。
在具体实施中,若在磁盘中也没有查找到与关键字对应的目标数据,就说明嵌入式键值存储器中不存在该关键字以及与该关键字对应的目标数据,可以预先设置预设标记值,这里,预设标记值用来标记不存在的关键字,并将不存在的该关键字和预设标记值对应写入高速缓存模块,即高速缓存模块中就存储了该关键字以及该关键字对应的预设标记值,这样,有用户端再次发送携带有该关键字的数据读取请求时,就可以通过高速缓存模块读取到预设标记值,用户端通过读取到预设标记值就可以知晓嵌入式键值存储器不存在与该关键字对应的目标数据,也不必再对磁盘进行读取,可以大大减少用户端读取磁盘的次数,可以减少嵌入式键值存储器的服务压力。
在本申请实施例中,通过根据接收的用户端发送的数据读取请求中携带的关键字,可以在内存中查找与关键字对应的目标数据,若在内存中没有查找到目标数据,进一步地,可以在磁盘中查找目标数据,若在磁盘中查找到目标数据,将读取到的目标数据以及关键字对应写入内存中的高速缓存模块,若在磁盘中没有查找到目标数据,将关键字和预设标记值对应写入高速缓存模块,这样,用户端再次发送携带有该关键字的数据读取请求时,都可以直接从高速缓存模块获得读取结果,可以大大减少用户端读取磁盘的次数,可以在合理使用高速缓存模块同时,提高数据读取操作的性能。
在一种可能的实施方式中,若在所述内存中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端。
在具体实施中,根据嵌入式存储器的查询逻辑,先读取内存,若从内存中无法读取到,再从磁盘中读取,具体地,若根据用户端发送的数据读取请求中携带的关键字,在内存中查找到与该关键字对应的目标数据,则直接将读取到的目标数据发送给用户端,而不必再从磁盘中读取该关键字对应的目标数据,提高数据读取操作的性能。
这里,内存包括可读写跳跃表、只读跳跃表、高速缓存模块,可以从可读写跳跃表、只读跳跃表、高速缓存模块中读取与该关键字对应的目标数据。其中,可读写跳跃表和只读跳跃表中存储的是最近写入的数据,高速缓存模块存储的是从磁盘中写入的用户端请求过的数据。
在一种可能的实施方式中,所述在所述内存中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端,包括以下步骤:
步骤a:在所述内存中的可读写跳跃表中查找所述目标数据,若在所述可读写跳跃表中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端。
在具体实施中,可读写跳跃表中存储的是最近写入的数据,可读写跳跃表的读取优先级最高,先在可读写跳跃表中查找与关键字对应的目标数据,如果在可读写跳跃表中查找到目标数据,直接将读到的目标数据发送至用户端,而不必再读取内存中的其他文件,更不必读取磁盘中的文件。
这里,最近写入的数据存储在可读写跳跃表中,查询最近写入的数据直接查询可读写跳跃表就可以,不需要查询高速缓存模块,所以无需将最近写入的数据也写入高速缓存模块,即不需要对高速缓存模块进行更新。
步骤b:若在所述可读写跳跃表中没有查找到所述目标数据,则在所述内存中的只读跳跃表中查找所述目标数据,若在所述只读跳跃表中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端。
在具体实施中,若在可读写跳跃表中没有查找到目标数据,根据嵌入式键值存储器的内部查询逻辑,则在只读跳跃表中查找目标数据,这里,至少有一个只读跳跃表,在任何一个只读跳跃表查找到目标数据,都将读到的目标数据发送至用户端。
需要说明的是,只读跳跃表只支持读取,不支持写入。
步骤c:若在所述只读跳跃表中没有查找到所述目标数据,则在所述高速缓存模块中查找所述目标数据,若在所述高速缓存模块中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端。
在具体实施中,若在可读写跳跃表和只读跳跃表中都没有查找到目标数据,根据嵌入式键值存储器的内部查询逻辑,则在高速缓存模块中查找目标数据,其中,高速缓存模块中存储的数据来自磁盘,若在高速缓存模块中查找到目标数据,则将读取到的目标数据发送至用户端。
这里,嵌入式键值存储器的内部查询逻辑是优先查询可读写跳跃表,在可读写跳跃表中查询不到数据后,再从只读跳跃表中查询数据,在只读跳跃表中也查找不到数据时,才在高速缓存模块中查询数据,如果在高速缓存模块中仍查询不到数据,最后才从磁盘中查询数据,这样,可以提升读操作的性能。
在一种可能的实施方式中,所述在磁盘中查找所述目标数据,包括:在所述磁盘中的静态排序表中查找所述目标数据。
在具体实施中,磁盘包括静态排序表和预写式日志,本申请将用户端发送的数据写入请求中携带的键值对写入预写式日志中,而静态排序表中的数据来自只读跳跃表,具体地,在只读跳跃表数量达到限制时,将至少一个只读跳跃表中的数据写入静态排序表,同时删除该至少一个只读跳跃表,这样,可以保证磁盘不重复存储数据,提升磁盘的利用率。在从内存中查找不到与关键字对应的目标数据时,就可以从磁盘中的静态排序表中查找目标数据。
在一种可能的实施方式中,所述数据读写方法还包括:若再次接收到携带有所述关键字的数据读取请求,并在所述内存中的可读写跳跃表和所述内存中的只读跳跃表都没有查找到与所述关键字对应的目标数据后,在所述高速缓存模块中查找所述目标数据;若根据所述关键字在所述高速缓存模块中查找到所述目标数据,将读取到的所述目标数据发送至所述用户端;若根据所述关键字在所述高速缓存模块中查找到所述预设标记值,将未读取到所述目标数据的读取结果发送至所述用户端。
在具体实施中,高速缓存模块中存储的数据来自磁盘中的静态排序表,当第一次在内存中查找不到与关键字对应的目标数据,需要在磁盘中继续查找目标数据,针对在磁盘中查找目标数据的不同查询结果,有以下两种情况:
情况一:在磁盘中查找到目标数据后,会将关键字以及关键字对应的目标数据写入高速缓存模块中,这样,有用户端再次发送携带有该关键字的数据读取请求时,可以直接从高速缓存模块读取目标数据,可以大大减少用户端读取磁盘的次数,可以在合理使用高速缓存模块同时,提高数据读取操作的性能。
情况二:在磁盘中没有查找到目标数据后,就说明嵌入式键值存储器中不存在该关键字以及与该关键字对应的目标数据,将不存在的该关键字和预设标记值对应写入高速缓存模块,这样,就可以通过高速缓存模块读取到预设标记值,用户端通过读取到预设标记值就可以知晓嵌入式键值存储器不存在与该关键字对应的目标数据,也不必再对磁盘进行读取,可以大大减少用户端读取磁盘的次数,可以减少嵌入式键值存储器的服务压力。
实施例二
参见图2,图2为本申请实施例二所提供的另一种数据读写方法的流程图。如图2所示,本申请实施例提供的数据读写方法,应用于嵌入式键值存储器,包括以下步骤:
S201:接收所述用户端发送的数据写入请求。
在具体实施中,嵌入式键值存储器可以接收用户端发送的数据读写请求,其中,数据读写请求包括数据写入请求和数据读取请求,即用户端可以向嵌入式键值存储器写入数据,也可以从嵌入式存储器读取数据。
S202:将所述数据写入请求中携带的键值对写入所述内存中的可读写跳跃表和所述磁盘中的预写式日志。
在具体实施中,嵌入式存储器以键值对的形式进行数据的存储,这样,通过用户端发送的数据写入请求中携带的键值对,可以将该键值对写入嵌入式存储器中,具体地,本申请采用一种新的回写形式,只将键值对同时写入内存中的可读写跳跃表和磁盘中的预写式日志,这样,有用户端发送携带有该键值对中的关键字的数据读取请求时,可以直接从可读写跳跃表中读取到该关键字对应的目标数据,而不必再对高速缓存模块进行读取,所以本申请没有将该键值对写入内存中的高速缓存模块,即不对高速缓存模块进行最近写入的数据进行更新,可以减少占用高速缓存模块的存储空间,达到合理利用高速缓存模块的目的。本申请也没有将该键值对写入磁盘中的静态排序表中,即磁盘中不对键值对进行重复存储,可以减少磁盘资源的浪费。
这里,可读写跳跃表和只读跳跃表存储的都是最近写入的数据。
其中,所述键值对包括关键字和与关键字对应的数据。
在一种可能的实施方式中,步骤S202中将所述数据写入请求中携带的键值对写入所述内存中的可读写跳跃表,包括以下步骤:
计算写入所述键值对后的可读写跳跃表占用的第一存储空间;判断所述第一存储空间是否小于或等于第一预设数值;若所述第一存储空间小于或等于所述第一预设数值,则将所述键值对写入可读写跳跃表;若所述第一存储空间大于所述第一预设数值,则放弃写入,并将可读写跳跃表转换为只读跳跃表,同时新建一个可读写跳跃表,将所述键值对写入新建的可读写跳跃表。
在具体实施中,可读写跳跃表存储的是最近写入的数据,当写入的数据足够多的,即可读写跳跃表占用的第一存储空间的大小达到限制时,将不能在可读写跳跃表写入数据,需要重新新建一个可读写跳跃表,原来的可读写跳跃表变为只读跳跃表,只能读取数据,而不能写入数据。
在一种可能的实施方式中,在所述将可读写跳跃表转换为只读跳跃表之后,所述数据读写方法还包括:
获取只读跳跃表的数量;判断只读跳跃表的数量是否等于第二预设数值;若只读跳跃表的数量等于所述第二预设数值,将至少一个只读跳跃表中的数据写入所述磁盘中的静态排序表,并删除所述至少一个只读跳跃表。
在具体实施中,只读跳跃表的数量是有限制的,当只读跳跃表的数量达到限制时,会将至少一个只读跳跃表中的键值对一个一个写入磁盘中的静态排序表,并将该至少一个只读跳跃表删除,这样,可以可读写跳跃表写满后,又可以转换成只读跳跃表,可以保证可读写跳跃表存储的都是最近写入的数据。
这里,可以根据具体需要,比如,根据写入时间确定将数据写入静态排序表的只读跳跃表的个数,可以为一个或多个。
在一种可能的实施方式中,在所述将至少一个只读跳跃表中的数据写入磁盘中的静态排序表之后,所述数据读写方法还包括:将所述预写式日志中与所述至少一个只读跳跃表中相同的键值对删除。
在具体实施中,对于用户端发送的数据写入请求中携带的键值对,同时写入磁盘中的预写式日志和可读写跳跃表,如果将至少一个只读跳跃表中的键值对也写入磁盘中的静态排序表中,这样静态排序表中存储的键值对与预写式日志中就有重复的键值对,所以可以把预写式日志中与该至少一个只读跳跃表中相同的键值对删除,这样,磁盘中的键值对不会重复存储,可以减少磁盘资源的浪费。
在一种可能的实施方式中,在所述将至少一个只读跳跃表中的数据写入磁盘中的静态排序表之后,所述数据读写方法还包括:将所述高速缓存模块中与所述至少一个只读跳跃表中相同的键值对删除。
在具体实施中,高速缓存模块中存储的数据来自磁盘中的静态排序表,在将至少一个只读跳跃表中的键值对也写入磁盘中的静态排序表,对于静态排序表中已经存在的键值对,就相当于对存在的键值对进行更新,而高速缓存模块中与静态表中存在的键值对相同的键值对为更新前的键值对,属于无用的数据,所以需要将高速缓存模块中与至少一个只读跳跃表中相同的键值对删除,可以提升高速缓存模块的读写性能。
这里,高速缓存模块是全局的缓存,是以键值对进行存储的,不是依赖文件形式存储的,数据一旦写入高速缓存模块后,即使磁盘中的一个静态排序表中的数据移动到另一个静态排序表,用户端仍然可以根据关键字在高速缓存模块中查找到与该关键字对应的数据。
在一种可能的实施方式中,所述数据读写方法还包括:检测所述高速缓存模块占用的第二存储空间是否大于或等于第三预设数值;若所述第二存储空间大于或等于所述第三预设数值,则根据页面置换算法删除预设数量的键值对。
在具体实施中,为了保证高速缓存模块的读写性能,可以根据高速缓存模块占空的存储空间的大小来对高速缓存模块中的数据进行清理,具体地,可以采用页面置换算法(Least Recently Used,LRU)对高速缓存模块中的数据进行清理。
这里,页面置换算法可以将最近很少使用的数据进行清理,或者将最先存储在高速缓存模块中的数据进行清理。
实施例三
基于同一申请构思,本申请实施例三中还提供了与实施例一和实施例二提供的数据读写方法对应的数据读写装置,由于本申请实施例中的装置解决问题的原理与本申请上述实施例一和实施例二的数据读写方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参见图3所示,为本申请实施例三提供的一种数据读写装置300的功能模块图之一,参见图4所示,为本申请实施例三提供的一种数据读写装置300的功能模块图之二,参见图5所示,为本申请实施例三提供的一种数据读写装置中第三发送模块305的功能模块图。其中,如图3和如图4所示,数据读写装置300包括:
第一接收模块301,用于接收用户端发送的数据读取请求;
查找模块302,用于根据所述第一接收模块301接收的所述数据读取请求中携带的关键字,在内存中查找与所述关键字对应的目标数据,若在所述内存中没有查找到所述目标数据,则在磁盘中查找所述目标数据;
第一发送模块303,用于若在所述磁盘中查找到所述目标数据,则将读取到的所述目标数据以及所述关键字对应写入所述内存中的高速缓存模块,并将读取到的所述目标数据发送至所述用户端;
第二发送模块304,用于若在所述磁盘中没有查找到所述目标数据,将所述关键字和预设标记值对应写入所述高速缓存模块,并将未读取到所述目标数据的读取结果发送至所述用户端。
本申请实施例中,通过根据第一接收模块301接收的用户端发送的数据读取请求中携带的关键字,可以在内存中通过查找模块302查找与关键字对应的目标数据,若在内存中没有查找到目标数据,进一步地,可以在磁盘中查找目标数据,若在磁盘中查找到目标数据,将读取到的目标数据以及关键字对应写入内存中的高速缓存模块,若在磁盘中没有查找到目标数据,将关键字和预设标记值对应写入高速缓存模块,这样,用户端再次发送携带有该关键字的数据读取请求时,都可以直接从高速缓存模块获得读取结果,可以大大减少用户端读取磁盘的次数,可以在合理使用高速缓存模块同时,提高数据读取操作的性能。
在一种可能的实施方式中,如图4所示,所述数据读写装置300还包括:
第三发送模块305,用于若在所述内存中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端。
在一种可能的实施方式中,如图5所示,所述第三发送模块305包括:
第一发送单元352,用于在所述内存中的可读写跳跃表中查找所述目标数据,若在所述可读写跳跃表中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端;
第二发送单元354,用于若在所述可读写跳跃表中没有查找到所述目标数据,则在所述内存中的只读跳跃表中查找所述目标数据,若在所述只读跳跃表中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端;
第三发送单元356,用于若在所述只读跳跃表中没有查找到所述目标数据,则在所述高速缓存模块中查找所述目标数据,若在所述高速缓存模块中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端。
在一种可能的实施方式中,如图3和如图4所示,所述查找模块302,用于根据以下步骤在磁盘中查找所述目标数据:
在所述磁盘中的静态排序表中查找所述目标数据。
在一种可能的实施方式中,如图3和如图4所示,所述查找模块302,还用于若再次接收到携带有所述关键字的数据读取请求,并在所述内存中的可读写跳跃表和所述内存中的只读跳跃表都没有查找到与所述关键字对应的目标数据后,在所述高速缓存模块中查找所述目标数据;
所述第一发送模块303,还用于若根据所述关键字在所述高速缓存模块中查找到所述目标数据,将读取到的所述目标数据发送至所述用户端;
所述第二发送模块304,还用于若根据所述关键字在所述高速缓存模块中查找到所述预设标记值,将未读取到所述目标数据的读取结果发送至所述用户端。
在一种可能的实施方式中,如图4所示,所述数据读写装置300还包括:
第二接收模块306,用于接收所述用户端发送的数据写入请求;
写入模块307,用于将所述第二接收模块306接收的所述数据写入请求中携带的键值对写入所述内存中的可读写跳跃表和所述磁盘中的预写式日志;
其中,所述键值对包括关键字和与关键字对应的数据。
在一种可能的实施方式中,如图4所示,所述写入模块307,用于根据以下步骤将所述键值对写入所述可读写跳跃表:
计算写入所述键值对后的可读写跳跃表占用的第一存储空间;
判断所述第一存储空间是否小于或等于第一预设数值;
若所述第一存储空间小于或等于所述第一预设数值,则将所述键值对写入可读写跳跃表;
若所述第一存储空间大于所述第一预设数值,则放弃写入,并将可读写跳跃表转换为只读跳跃表,同时新建一个可读写跳跃表,将所述键值对写入新建的可读写跳跃表。
在一种可能的实施方式中,如图4所示,所述数据读写装置300还包括:
获取模块308,用于获取只读跳跃表的数量;
判断模块309,用于判断只读跳跃表的数量是否等于第二预设数值;
第一删除模块310,用于若只读跳跃表的数量等于所述第二预设数值,将至少一个只读跳跃表中的数据写入所述磁盘中的静态排序表,并删除所述至少一个只读跳跃表。
在一种可能的实施方式中,如图4所示,所述第一删除模块310,还用于:
将所述预写式日志中与所述至少一个只读跳跃表中相同的键值对删除。
在一种可能的实施方式中,如图4所示,所述第一删除模块310,还用于:
将所述高速缓存模块中与所述至少一个只读跳跃表中相同的键值对删除。
在一种可能的实施方式中,如图4所示,所述数据读写装置300还包括:
检测模块311,用于检测所述高速缓存模块占用的第二存储空间是否大于或等于第三预设数值;
第二删除模块312,用于若所述第二存储空间大于或等于所述第三预设数值,则根据页面置换算法删除预设数量的键值对。
实施例四
基于同一申请构思,参见图6所示,为本申请实施例四提供的一种电子设备600的结构示意图,包括:处理器610、存储器620和总线630,所述存储器620存储有所述处理器610可执行的机器可读指令,当电子设备600运行时,所述处理器610与所述存储器620之间通过所述总线630进行通信,所述机器可读指令被所述处理器610运行时执行如实施例一和/或实施例二中任一所述的数据读写方法的步骤。
具体地,所述机器可读指令被所述处理器610执行时可以执行如下处理:
接收用户端发送的数据读取请求;
根据所述数据读取请求中携带的关键字,在内存中查找与所述关键字对应的目标数据,若在所述内存中没有查找到所述目标数据,则在磁盘中查找所述目标数据;
若在所述磁盘中查找到所述目标数据,则将读取到的所述目标数据以及所述关键字对应写入所述内存中的高速缓存模块,并将读取到的所述目标数据发送至所述用户端;
若在所述磁盘中没有查找到所述目标数据,将所述关键字和预设标记值对应写入所述高速缓存模块,并将未读取到所述目标数据的读取结果发送至所述用户端。
所述机器可读指令被所述处理器610执行时也可以执行如下处理:
接收所述用户端发送的数据写入请求;
将所述数据写入请求中携带的键值对写入所述内存中的可读写跳跃表和所述磁盘中的预写式日志;
其中,所述键值对包括关键字和与关键字对应的数据。
本申请实施例中,通过根据接收的用户端发送的数据读取请求中携带的关键字,可以在内存中查找与关键字对应的目标数据,若在内存中没有查找到目标数据,进一步地,可以在磁盘中查找目标数据,若在磁盘中查找到目标数据,将读取到的目标数据以及关键字对应写入内存中的高速缓存模块,若在磁盘中没有查找到目标数据,将关键字和预设标记值对应写入高速缓存模块,这样,用户端再次发送携带有该关键字的数据读取请求时,都可以直接从高速缓存模块获得读取结果,可以大大减少用户端读取磁盘的次数,可以在合理使用高速缓存模块同时,提高数据读取操作的性能。
实施例五
基于同一申请构思,本申请实施例五还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述实施例一,和/或实施例二中提供的数据读写方法的步骤。
具体地,所述存储介质能够为通用的存储介质,如移动磁盘、硬盘等,所述存储介质上的计算机程序被运行时,能够执行上述数据读写方法,用户端再次发送携带有该关键字的数据读取请求时,都可以直接从高速缓存模块获得读取结果,可以大大减少用户端读取磁盘的次数,可以在合理使用高速缓存模块同时,提高数据读取操作的性能。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应所述理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者所述技术方案的部分可以以软件产品的形式体现出来,所述计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (13)
1.一种数据读写方法,其特征在于,所述数据读写方法包括:
接收用户端发送的数据读取请求;
根据所述数据读取请求中携带的关键字,在内存中查找与所述关键字对应的目标数据,若在所述内存中没有查找到所述目标数据,则在磁盘中查找所述目标数据;
若在所述磁盘中查找到所述目标数据,则将读取到的所述目标数据以及所述关键字对应写入所述内存中的高速缓存模块,并将读取到的所述目标数据发送至所述用户端;
若在所述磁盘中没有查找到所述目标数据,将所述关键字和预设标记值对应写入所述高速缓存模块,并将未读取到所述目标数据的读取结果发送至所述用户端;
其中,所述在内存中查找与所述关键字对应的目标数据,包括:按照查询逻辑依次从内存中的可读写跳跃表、只读跳跃表和高速缓存模块中查找所述目标数据。
2.根据权利要求1所述的数据读写方法,其特征在于,所述数据读写方法还包括:
若在所述内存中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端。
3.根据权利要求2所述的数据读写方法,其特征在于,所述在所述内存中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端,包括:
在所述内存中的可读写跳跃表中查找所述目标数据,若在所述可读写跳跃表中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端;
若在所述可读写跳跃表中没有查找到所述目标数据,则在所述内存中的只读跳跃表中查找所述目标数据,若在所述只读跳跃表中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端;
若在所述只读跳跃表中没有查找到所述目标数据,则在所述高速缓存模块中查找所述目标数据,若在所述高速缓存模块中查找到所述目标数据,则将读取到的所述目标数据发送至所述用户端。
4.根据权利要求1所述的数据读写方法,其特征在于,所述数据读写方法还包括:
若再次接收到携带有所述关键字的数据读取请求,并在所述内存中的可读写跳跃表和所述内存中的只读跳跃表都没有查找到与所述关键字对应的目标数据后,在所述高速缓存模块中查找所述目标数据;
若根据所述关键字在所述高速缓存模块中查找到所述目标数据,将读取到的所述目标数据发送至所述用户端;
若根据所述关键字在所述高速缓存模块中查找到所述预设标记值,将未读取到所述目标数据的读取结果发送至所述用户端。
5.根据权利要求1所述的数据读写方法,其特征在于,所述数据读写方法还包括:
接收所述用户端发送的数据写入请求;
将所述数据写入请求中携带的键值对写入所述内存中的可读写跳跃表和所述磁盘中的预写式日志;
其中,所述键值对包括关键字和与关键字对应的数据。
6.根据权利要求5所述的数据读写方法,其特征在于,所述将所述数据写入请求中携带的键值对写入所述内存中的可读写跳跃表,包括:
计算写入所述键值对后的可读写跳跃表占用的第一存储空间;
判断所述第一存储空间是否小于或等于第一预设数值;
若所述第一存储空间小于或等于所述第一预设数值,则将所述键值对写入可读写跳跃表;
若所述第一存储空间大于所述第一预设数值,则放弃写入,并将可读写跳跃表转换为只读跳跃表,同时新建一个可读写跳跃表,将所述键值对写入新建的可读写跳跃表。
7.根据权利要求6所述的数据读写方法,其特征在于,在所述将可读写跳跃表转换为只读跳跃表之后,所述数据读写方法还包括:
获取只读跳跃表的数量;
判断只读跳跃表的数量是否等于第二预设数值;
若只读跳跃表的数量等于所述第二预设数值,将至少一个只读跳跃表中的数据写入所述磁盘中的静态排序表,并删除所述至少一个只读跳跃表。
8.根据权利要求7所述的数据读写方法,其特征在于,在所述将至少一个只读跳跃表中的数据写入磁盘中的静态排序表之后,所述数据读写方法还包括:
将所述预写式日志中与所述至少一个只读跳跃表中相同的键值对删除。
9.根据权利要求7所述的数据读写方法,其特征在于,在所述将至少一个只读跳跃表中的数据写入磁盘中的静态排序表之后,所述数据读写方法还包括:
将所述高速缓存模块中与所述至少一个只读跳跃表中相同的键值对删除。
10.根据权利要求5所述的数据读写方法,其特征在于,所述数据读写方法还包括:
检测所述高速缓存模块占用的第二存储空间是否大于或等于第三预设数值;
若所述第二存储空间大于或等于所述第三预设数值,则根据页面置换算法删除预设数量的键值对。
11.一种数据读写装置,其特征在于,所述数据读写装置包括:
第一接收模块,用于接收用户端发送的数据读取请求;
查找模块,用于根据所述第一接收模块接收的所述数据读取请求中携带的关键字,在内存中查找与所述关键字对应的目标数据,若在所述内存中没有查找到所述目标数据,则在磁盘中查找所述目标数据;其中,所述在内存中查找与所述关键字对应的目标数据,包括:按照查询逻辑依次从内存中的可读写跳跃表、只读跳跃表和高速缓存模块中查找所述目标数据;
第一发送模块,用于若在所述磁盘中查找到所述目标数据,则将读取到的所述目标数据以及所述关键字对应写入所述内存中的高速缓存模块,并将读取到的所述目标数据发送至所述用户端;
第二发送模块,用于若在所述磁盘中没有查找到所述目标数据,将所述关键字和预设标记值对应写入所述高速缓存模块,并将未读取到所述目标数据的读取结果发送至所述用户端。
12.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过所述总线进行通信,所述机器可读指令被所述处理器运行时执行如权利要求1至10中任一项所述的数据读写方法的步骤。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1至10中任一项所述的数据读写方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910458391.4A CN111831691B (zh) | 2019-05-29 | 2019-05-29 | 一种数据读写方法及装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910458391.4A CN111831691B (zh) | 2019-05-29 | 2019-05-29 | 一种数据读写方法及装置、电子设备、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111831691A CN111831691A (zh) | 2020-10-27 |
CN111831691B true CN111831691B (zh) | 2024-05-03 |
Family
ID=72912524
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910458391.4A Active CN111831691B (zh) | 2019-05-29 | 2019-05-29 | 一种数据读写方法及装置、电子设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111831691B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112230863A (zh) * | 2020-11-09 | 2021-01-15 | 平安普惠企业管理有限公司 | 用户数据读写方法、装置、电子设备及计算机存储介质 |
CN112506823B (zh) * | 2020-12-11 | 2023-09-29 | 盛立安元科技(杭州)股份有限公司 | 一种fpga数据读写方法、装置、设备及可读存储介质 |
CN113986001A (zh) * | 2021-10-29 | 2022-01-28 | 深圳市航顺芯片技术研发有限公司 | 芯片及控制方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101887398A (zh) * | 2010-06-25 | 2010-11-17 | 浪潮(北京)电子信息产业有限公司 | 一种动态提高服务器输入输出吞吐量的方法和系统 |
CN103809915A (zh) * | 2012-11-05 | 2014-05-21 | 阿里巴巴集团控股有限公司 | 一种磁盘文件的读写方法和装置 |
WO2018077292A1 (zh) * | 2016-10-28 | 2018-05-03 | 北京市商汤科技开发有限公司 | 数据处理方法和系统、电子设备 |
CN108845768A (zh) * | 2018-06-19 | 2018-11-20 | 郑州云海信息技术有限公司 | 一种数据存储方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10891264B2 (en) * | 2015-04-30 | 2021-01-12 | Vmware, Inc. | Distributed, scalable key-value store |
-
2019
- 2019-05-29 CN CN201910458391.4A patent/CN111831691B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101887398A (zh) * | 2010-06-25 | 2010-11-17 | 浪潮(北京)电子信息产业有限公司 | 一种动态提高服务器输入输出吞吐量的方法和系统 |
CN103809915A (zh) * | 2012-11-05 | 2014-05-21 | 阿里巴巴集团控股有限公司 | 一种磁盘文件的读写方法和装置 |
WO2018077292A1 (zh) * | 2016-10-28 | 2018-05-03 | 北京市商汤科技开发有限公司 | 数据处理方法和系统、电子设备 |
CN108845768A (zh) * | 2018-06-19 | 2018-11-20 | 郑州云海信息技术有限公司 | 一种数据存储方法、装置、设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
一个基于日志结构的非易失性内存键值存储系统;游理通;王振杰;黄林鹏;;计算机研究与发展(第09期);全文 * |
磁盘驱动程序预写;肖必武;刘军;;计算机工程与设计(第02期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111831691A (zh) | 2020-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102331986B (zh) | 一种数据库缓存管理方法及一种数据库服务器 | |
CN108268219B (zh) | 一种处理io请求的方法及装置 | |
CN107491523B (zh) | 存储数据对象的方法及装置 | |
US9507821B2 (en) | Mail indexing and searching using hierarchical caches | |
CN107577436B (zh) | 一种数据存储方法及装置 | |
CN110945486B (zh) | 一种存储碎片管理方法及终端 | |
US9727479B1 (en) | Compressing portions of a buffer cache using an LRU queue | |
CN111831691B (zh) | 一种数据读写方法及装置、电子设备、存储介质 | |
CN111198856B (zh) | 文件管理方法、装置、计算机设备和存储介质 | |
CN104794228A (zh) | 一种搜索结果提供方法及装置 | |
CN110888837B (zh) | 对象存储小文件归并方法及装置 | |
CN104572920A (zh) | 一种数据整理方法和装置 | |
CN109976669B (zh) | 一种边缘存储方法、装置和存储介质 | |
CN111913917A (zh) | 一种文件处理方法、装置、设备和介质 | |
CN107133334B (zh) | 基于高带宽存储系统的数据同步方法 | |
CN116909939A (zh) | 基于lsm树的键值分离存储引擎垃圾回收方法、系统及设备 | |
CN112148736A (zh) | 缓存数据的方法、设备及存储介质 | |
CN114610708A (zh) | 一种向量数据处理方法及装置、电子设备及存储介质 | |
CN108021562B (zh) | 应用于分布式文件系统的存盘方法、装置及分布式文件系统 | |
CN115840731A (zh) | 文件处理方法、计算设备及计算机存储介质 | |
CN115114232A (zh) | 一种历史版本对象列举方法、装置及其介质 | |
CN112596949B (zh) | 一种高效率的ssd删除数据恢复方法及系统 | |
CN114281855A (zh) | 数据请求方法、装置、计算机设备、存储介质和程序产品 | |
CN115934583B (zh) | 分级缓存方法、装置及系统 | |
CN108804571B (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 |