一种数据读写方法及装置

文档序号:1888618 发布日期:2021-11-26 浏览:3次 >En<

阅读说明:本技术 一种数据读写方法及装置 (Data reading and writing method and device ) 是由 周涛 于 2021-07-14 设计创作,主要内容包括:本申请涉及数据存储技术领域,特别涉及一种数据读写方法及装置。该方法应用于分布式存储系统,该方法包括:接收客户端发送的多个读写请求;判断当前执行的读写请求为读请求/写请求;若判定当前执行的读写请求为目标读请求,且独占锁未被其它读写请求占用,则执行所述目标读请求,并将下一个读写请求作为当前执行的读写请求,否则,不执行所述目标读请求;若判定当前执行的读写请求为目标写请求,且所述独占锁未被其它读写请求占用,则占用所述独占锁,并执行所述目标写请求。(The present application relates to the field of data storage technologies, and in particular, to a data reading and writing method and apparatus. The method is applied to a distributed storage system and comprises the following steps: receiving a plurality of read-write requests sent by a client; judging whether the currently executed read-write request is a read request/write request; if the currently executed read-write request is judged to be a target read request and the exclusive lock is not occupied by other read-write requests, executing the target read request and taking the next read-write request as the currently executed read-write request, otherwise, not executing the target read request; and if the currently executed read-write request is judged to be the target write request and the exclusive lock is not occupied by other read-write requests, occupying the exclusive lock and executing the target write request.)

一种数据读写方法及装置

技术领域

本申请涉及数据存储技术领域,特别涉及一种数据读写方法及装置。

背景技术

目前很多大型系统及应用都是用分布式部署的,数据一致性问题一直是个比较重要的话题,分布式锁是控制分布式系统之间同步访问共享资源的一种方式,但是往往太多的锁会造成导致系统性能缓慢,用户体验不佳,其典型的使用场景为:不同系统或者是同一系统的不同主机之间,共享了一个或一组数据,那么访问这些数据的时候,需要通过一定的互斥手段来防止彼此的干扰,以保证一致性,传统的实现方式是利用锁的互斥功能实现,当操作数据库数据时,在对应代码中加入锁,保证仅有一个线程对数据库进行操作但是,当每次访问数据的时候,都采用加锁的方法,其余线程便会进入排队等待状态,会造成系统性能缓慢,使得系统性能降低。

发明内容

本申请提供了一种数据读写方法及装置,用以解决现有技术中存在的读写请求处理效率低的问题。

第一方面,本申请提供了一种数据读写方法,应用于分布式存储系统,所述方法包括:

接收客户端发送的多个读写请求;

判断当前执行的读写请求为读请求/写请求;

若判定当前执行的读写请求为目标读请求,且独占锁未被其它读写请求占用,则执行所述目标读请求,并将下一个读写请求作为当前执行的读写请求,否则,不执行所述目标读请求;

若判定当前执行的读写请求为目标写请求,且所述独占锁未被其它读写请求占用,则占用所述独占锁,并执行所述目标写请求。

可选地,所述方法还包括:

若确定所述目标写请求执行完成,则释放所述独占锁。

可选地,执行所述目标读请求的步骤包括:

基于所述目标读请求,确定所要读取的第一数据;

判断缓存存储中是否存在所述第一数据;

若判定所述缓存存储中存在所述第一数据,则从所述缓存存储中读取所述第一数据,并将所述第一数据返回给客户端;

若判定所述缓存存储中不存在所述第一数据,则从后端存储中读取所述第一数据,并将所述第一数据返回给客户端,以及将所述第一数据缓存在所述缓存存储中。

可选地,执行所述目标写请求的步骤包括:

基于所述目标写请求,确定待写入的第二数据;

将所述第二数据写入后端存储中,并更新缓存存储中的所述第二数据。

可选地,所述缓存存储为redis缓存。

第二方面,本申请提供了一种数据读写装置,应用于分布式存储系统,所述装置包括:

接收单元,用于接收客户端发送的多个读写请求;

判断单元,用于判断当前执行的读写请求为读请求/写请求;

执行单元,若所述判断单元判定当前执行的读写请求为目标读请求,且独占锁未被其它读写请求占用,则所述执行单元用于执行所述目标读请求,并将下一个读写请求作为当前执行的读写请求,否则,所述执行单元不执行所述目标读请求;

若所述判断单元判定当前执行的读写请求为目标写请求,且所述独占锁未被其它读写请求占用,则所述执行单元用于占用所述独占锁,并执行所述目标写请求。

可选地,所述装置还包括确定单元和释放单元:

若所述确定单元确定所述目标写请求执行完成,则所述释放单元用于释放所述独占锁。

可选地,执行所述目标读请求时,所述执行单元具体用于:

基于所述目标读请求,确定所要读取的第一数据;

判断缓存存储中是否存在所述第一数据;

若判定所述缓存存储中存在所述第一数据,则从所述缓存存储中读取所述第一数据,并将所述第一数据返回给客户端;

若判定所述缓存存储中不存在所述第一数据,则从后端存储中读取所述第一数据,并将所述第一数据返回给客户端,以及将所述第一数据缓存在所述缓存存储中。

可选地,执行所述目标写请求时,所述执行单元具体用于:

基于所述目标写请求,确定待写入的第二数据;

将所述第二数据写入后端存储中,并更新缓存存储中的所述第二数据。

可选地,所述缓存存储为redis缓存。

第三方面,本申请实施例提供一种数据读写装置,应用于分布式存储系统,该数据读写装置包括:

存储器,用于存储程序指令;

处理器,用于调用所述存储器中存储的程序指令,按照获得的程序指令执行如上述第一方面中任一项所述的方法的步骤。

第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使所述计算机执行如上述第一方面中任一项所述方法的步骤。

综上可知,本申请实施例提供的应用于分布式存储系统的数据读写方法,接收客户端发送的多个读写请求;判断当前执行的读写请求为读请求/写请求;若判定当前执行的读写请求为目标读请求,且独占锁未被其它读写请求占用,则执行所述目标读请求,并将下一个读写请求作为当前执行的读写请求,否则,不执行所述目标读请求;若判定当前执行的读写请求为目标写请求,且所述独占锁未被其它读写请求占用,则占用所述独占锁,并执行所述目标写请求。

采用本申请实施例提供的数据读写方法,在执行多线程任务时,只有在执行写线程时,才阻塞其他线程,在执行读线程时,无需阻塞其它线程,在实现了分布式读写锁系统的阻塞功能的同时,允许多线程运行,提升了系统性能。

附图说明

为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其他的附图。

图1为本申请实施例提供的一种数据读写方法的详细流程图;

图2为本申请实施例提供的一种数据读写装置的结构示意图;

图3为本申请实施例提供的一种数据读写设备的结构示意图。

具体实施方式

在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

示例性的,参阅图1所示,为本申请实施例提供的一种数据读写方法的详细流程图,该方法应用于分布式存储系统,该方法包括以下步骤:

步骤100:接收客户端发送的多个读写请求。

本申请实施例中,分布式存储系统指的是基于redis存储集群的分布式存储系统,首先,搭建redis集群环境,分布式存储系统开启多线程运行状态,即可以并列执行多个数据处理线程。

那么,分布式存储系统接收到多个客户端发送的读写请求时,即可针对每一读写请求生成对应的读写线程,实际应用中,依据各读写线程的生成时间,将各读写线程排列在待处理队列中。本申请实施例中,多线程同时执行指的是,在处理一个线程时,若其它线程仍满足处理条件,仍可处理该其它线程,此时,就无需等待当前处理的线程处理完成之后再处理该其它线程。

步骤110:判断当前执行的读写请求为读请求/写请求。

由上可知,多个读写请求分别对应的读写线程维护在待处理队列中,将待处理队列个第一个读写线程作为当前执行的读写请求对应的线程,判断该线程(读请求)是读线程还是写线程(写请求)。

步骤120:若判定当前执行的读写请求为目标读请求,且独占锁未被其它读写请求占用,则执行所述目标读请求,并将下一个读写请求作为当前执行的读写请求,否则,不执行所述目标读请求。

本申请实施例中,若判定当前执行的读写请求为读请求时,进一步的,判断预设的独占锁是否已被其它读写请求占用,若判定独占锁未被其它读写请求占用,则执行该读请求。

本申请实施例中,在执行一个写请求时,需占用独占锁,用于阻止其余线程的执行。

具体地,本申请实施例中,在执行所述目标读请求时,一种较佳地实现方式为:

基于所述目标读请求,确定所要读取的第一数据;

判断缓存存储中是否存在所述第一数据;

若判定所述缓存存储中存在所述第一数据,则从所述缓存存储中读取所述第一数据,并将所述第一数据返回给客户端;

若判定所述缓存存储中不存在所述第一数据,则从后端存储中读取所述第一数据,并将所述第一数据返回给客户端,以及将所述第一数据缓存在所述缓存存储中。

也就是说,为了提升数据读的效率,将预设数据缓存至缓存存储中,如,将客户端已读的指定数据缓存至缓存存储中,和/或,将写入的指定数据缓存至缓存存储中。那么,在读取一个数据时,首先判断缓存存储中是否缓存有该数据,若存在,则直接从缓存中读取该数据,若不存在,则需要从后端存储中读取该数据,在读取该数据的同时,可以将该数据缓存在缓存存储中。

进一步的,本申请实施例中,在确定执行一个读请求时,由于读请求无需占用独占锁,此时还可以执行其它读写请求,那么,此时,就可以将队列中该读请求的下一个读写请求作为当前执行的读写请求。

需要说明的是,本申请实施例中,当独占锁已被其它写请求占用时,就不再执行队列中其它读写请求,直至该写请求执行完成,释放独占锁后,再执行队列中的其它读写请求。

步骤130:若判定当前执行的读写请求为目标写请求,且所述独占锁未被其它读写请求占用,则占用所述独占锁,并执行所述目标写请求。

具体的,本申请实施例中,在执行所述目标写请求时,一种较佳地实现方式为:

基于所述目标写请求,确定待写入的第二数据;

将所述第二数据写入后端存储中,并更新缓存存储中的所述第二数据。

即,若目标写请求为更新第二数据的请求,此时,缓存存储中已缓存有第二数据,则在更新后端存储的第二数据之后,更新缓存存储中缓存的第二数据。若目标写请求为新数据(第二数据)写入的请求,则在将第二数据存储至后端存储的同时,将第二数据缓存在缓存存储中。

下面结合具体应用场景对本申请实施例提供的数据读写方法进行详细说明。本申请实施例提供的一种数据读写方法的详细流程如下:

步骤1、搭建redis集群环境。

步骤2、开启多线程运行状态。

步骤3、判断是否执行写请求,若是则执行步骤4;否则,执行步骤7。

步骤4、获取独占锁,将sync值设置为false,以阻塞其它线程执行。

需要说明的是,若独占锁的sync值为true,则说明独占锁未被占用;若独占锁的sync值为false,则说明独占锁已被占用。

步骤5、执行写请求,重新查询数据库并进行运算,生成redis缓存数据。

步骤6、释放独占锁。

步骤7、判断独占锁是否已被占用,若未被占用,则执行读操作;否则,不执行读操作。

具体的,若缓存存储中存在待读取数据,则直接从缓存存储中读取该待读取数据;若缓存存储中不存在待读取数据,则需要从后端存储中读取该待读取数据,并将该待读取数据缓存至缓存存储中。

示例性的,参阅图2所示,为本申请实施例提供的一种数据读写装置的结构示意图,该装置应用于分布式存储系统,该装置包括:

接收单元20,用于接收客户端发送的多个读写请求;

判断单元21,用于判断当前执行的读写请求为读请求/写请求;

执行单元22,若所述判断单元21判定当前执行的读写请求为目标读请求,且独占锁未被其它读写请求占用,则所述执行单元22用于执行所述目标读请求,并将下一个读写请求作为当前执行的读写请求,否则,所述执行单元22不执行所述目标读请求;

若所述判断单元21判定当前执行的读写请求为目标写请求,且所述独占锁未被其它读写请求占用,则所述执行单元22用于占用所述独占锁,并执行所述目标写请求。

可选地,所述装置还包括确定单元和释放单元:

若所述确定单元确定所述目标写请求执行完成,则所述释放单元用于释放所述独占锁。

可选地,执行所述目标读请求时,所述执行单元22具体用于:

基于所述目标读请求,确定所要读取的第一数据;

判断缓存存储中是否存在所述第一数据;

若判定所述缓存存储中存在所述第一数据,则从所述缓存存储中读取所述第一数据,并将所述第一数据返回给客户端;

若判定所述缓存存储中不存在所述第一数据,则从后端存储中读取所述第一数据,并将所述第一数据返回给客户端,以及将所述第一数据缓存在所述缓存存储中。

可选地,执行所述目标写请求时,所述执行单元22具体用于:

基于所述目标写请求,确定待写入的第二数据;

将所述第二数据写入后端存储中,并更新缓存存储中的所述第二数据。

可选地,所述缓存存储为redis缓存。

以上这些单元可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器(digital singnal processor,简称DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个单元通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(CentralProcessing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些单元可以集成在一起,以片上系统(system-on-a-chip,简称SOC)的形式实现。

进一步地,本申请实施例提供的数据读写装置,从硬件层面而言,所述数据读写装置的硬件架构示意图可以参见图3所示,所述数据读写装置可以包括:存储器30和处理器31,

存储器30用于存储程序指令;处理器31调用存储器30中存储的程序指令,按照获得的程序指令执行上述方法实施例。具体实现方式和技术效果类似,这里不再赘述。

可选地,本申请还提供一种数据读写设备,包括用于执行上述方法实施例的至少一个处理元件(或芯片)。

可选地,本申请还提供一种程序产品,例如计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令用于使该计算机执行上述方法实施例。

这里,机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(RadomAccess Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:实时存储数据的文件系统处理方法、装置、车载终端及商用车

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!

技术分类