CN111708626A - 数据访问方法、装置、计算机设备和存储介质 - Google Patents
数据访问方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN111708626A CN111708626A CN202010552309.7A CN202010552309A CN111708626A CN 111708626 A CN111708626 A CN 111708626A CN 202010552309 A CN202010552309 A CN 202010552309A CN 111708626 A CN111708626 A CN 111708626A
- Authority
- CN
- China
- Prior art keywords
- data
- target memory
- memory block
- state
- idle state
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及数据的存储和读取,具体涉及一种数据访问方法、装置、计算机设备和存储介质。所述方法包括:当触发针对目标内存块的数据读取操作时,基于状态指示数据确定工作状态的目标内存块,并从工作状态的目标内存块读取数据;当触发针对目标内存块的数据更新操作时,基于状态指示数据确定空闲状态的目标内存块;基于数据更新操作,向空闲状态的目标内存块进行全量数据更新;当全量数据更新执行完毕时,通过修改状态指示数据,将空闲状态的目标内存块置为工作状态。采用本方法能够并发执行数据读取操作和数据更新操作。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种数据访问方法、装置、计算机设备和存储介质。
背景技术
随着科学技术的不断发展,系统所面临的并发量与日俱增,在这种并发环境下,容易出现数据安全性问题。例如,当需要同时更新和读取同一数据时,就容易导致更新或读取的数据不一致或者不准确。
目前,主要采用锁机制来控制系统对同一数据的访问,锁机制是指并发状态下的其中一个数据访问任务对待访问的数据申请加锁,在申请加锁成功后再对待访问的数据进行更新处理,并在更新完成后释放锁,在此过程中,其它数据访问任务只能进行等待,而无法对加锁的数据进行读取处理。如此,虽然保证了数据的安全性,但是,当并发量较大时,就会因数据访问任务的等待时间过长,而导致系统的响应速度降低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够并发执行数据读取操作和数据更新操作的数据访问方法、装置、计算机设备和存储介质。
一种数据访问方法,所述方法包括:
当触发针对目标内存块的数据读取操作时,基于状态指示数据确定工作状态的目标内存块,并从所述工作状态的目标内存块读取数据;
当触发针对目标内存块的数据更新操作时,基于所述状态指示数据确定空闲状态的目标内存块;
基于所述数据更新操作,向所述空闲状态的目标内存块进行全量数据更新;
当所述全量数据更新执行完毕时,通过修改所述状态指示数据,将空闲状态的目标内存块置为工作状态。
一种数据访问装置,所述装置包括:
数据读取模块,用于当触发针对目标内存块的数据读取操作时,基于状态指示数据确定工作状态的目标内存块,并从所述工作状态的目标内存块读取数据。
数据更新模块,用于当触发针对目标内存块的数据更新操作时,基于所述状态指示数据确定空闲状态的目标内存块;基于所述数据更新操作,向所述空闲状态的目标内存块进行全量数据更新。
状态指示数据修改模块,用于当所述全量数据更新执行完毕时,通过修改所述状态指示数据,将空闲状态的目标内存块置为工作状态。
在一个实施例中,数据访问装置还包括初始化模块,用于触发环境初始化;在所述环境初始化时,创建两个具有相同存储特征的目标内存块,并创建状态指示数据;其中,所述状态指示数据,指示两个所述目标内存块中的一个目标内存块为工作状态,并指示另一个目标内存块为空闲状态。
在一个实施例中,初始化模块还用于创建一个目标内存块;获取所述目标内存块的存储特征;所述存储特征包括存储空间和存储结构;基于所述存储特征,复制得到另一个目标内存块。
在一个实施例中,数据读取模块还用于将指针变量所存放地址指向的目标内存块,确定为工作状态的目标内存块;所述基于所述状态指示数据确定空闲状态的目标内存块,包括:在配对的两个目标内存块中,将所述指针变量所存放地址未指向的目标内存块,确定为空闲状态的目标内存块。
在一个实施例中,状态指示数据修改模块还用于修改所述指针变量,使得所述指针变量所存放地址指向所述空闲状态的目标内存块。
在一个实施例中,数据更新模块还用于当所述数据更新操作指定数据路径时,获取所述数据路径;按照所述数据路径读取全量数据;将所述空闲状态的目标内存块中的数据全部替换为所述全量数据。
在一个实施例中,数据更新模块还用于当所述数据更新操作指定更新数据时,获取所述更新数据;基于所述更新数据和所述工作状态的目标内存块中的数据,对所述空闲状态的目标内存块进行全量数据更新。
在一个实施例中,数据更新模块还用于当所述数据更新操作为数据插入操作时,基于所述数据插入操作确定待写入数据;将所述待写入数据写入工作状态的目标内存块中;当所述待写入数据写入成功时,将所述工作状态的目标内存块中的数据全量同步至所述空闲状态的目标内存块。
在一个实施例中,上述数据访问装置还包括同步模块,用于当所述工作状态的目标内存块和所述空闲状态的目标内存块数据不一致时,将所述工作状态的目标内存块中的数据同步至空闲状态的目标内存块;当触发所述数据更新操作时,停止所述将所述工作状态的目标内存块中的数据同步至空闲状态的目标内存块的操作。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
当触发针对目标内存块的数据读取操作时,基于状态指示数据确定工作状态的目标内存块,并从所述工作状态的目标内存块读取数据;
当触发针对目标内存块的数据更新操作时,基于所述状态指示数据确定空闲状态的目标内存块;
基于所述数据更新操作,向所述空闲状态的目标内存块进行全量数据更新;
当所述全量数据更新执行完毕时,通过修改所述状态指示数据,将空闲状态的目标内存块置为工作状态。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
当触发针对目标内存块的数据读取操作时,基于状态指示数据确定工作状态的目标内存块,并从所述工作状态的目标内存块读取数据;
当触发针对目标内存块的数据更新操作时,基于所述状态指示数据确定空闲状态的目标内存块;
基于所述数据更新操作,向所述空闲状态的目标内存块进行全量数据更新;
当所述全量数据更新执行完毕时,通过修改所述状态指示数据,将空闲状态的目标内存块置为工作状态。
上述数据访问方法、装置、计算机设备和存储介质,通过工作状态指示数据将配对的两个目标内存块的工作状态进行区分,使得在触发针对目标内存块的数据读取操作时,可以从工作状态的目标内存块读取数据;在触发针对目标内存块的数据更新操作时,可以对空闲状态的目标内存块进行全量数据更新,如此,便能在保证数据安全的前提下,实现数据访问和数据更新的并发操作;此外,在全量数据更新执行完毕时,通过修改状态指示数据,将空闲状态的目标内存块置为工作状态,可以在保证并发的同时,提升所读取数据的实时性。
附图说明
图1为一个实施例中数据访问方法的应用环境图;
图2为一个实施例中数据访问方法的流程示意图;
图3为一个实施例中目标内存块和状态指示数据的示意图;
图4为一个实施例中数据读取操作的原理示意图;
图5为一个实施例中数据更新操作的原理示意图;
图6为一个实施例中状态指示数据修改的原理示意图;
图7为一个具体实施例中数据访问方法的流程示意图;
图8为另一个具体实施例中数据访问方法的流程示意图;
图9为一个实施例中数据访问装置的结构框图;
图10为另一个实施例中数据访问装置的结构框图;
图11为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
图1为一个实施例中数据访问方法的应用环境图,该数据访问方法应用于数据访问系统。该数据访问系统包括终端110和服务器120。终端110和服务器120通过网络连接。终端110运行有业务系统。业务系统用于从服务器120中读取数,以及向服务器120输入更新数据,从而服务器120并发响应业务系统的数据读取需求和数据更新需求。业务系统可以是APP(Application,客户端)、WEB应用(World Wide Web,可以通过全球广域网访问的应用程序)或小程序(Mini Program)等。服务器120具体可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端110以及服务器120可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。服务器120可以单独用于执行本申请实施例中提供的数据访问方法。服务器120也可以与终端110协同执行本申请实施例中提供的数据访问方法。
应当理解,尽管术语第一、第二等可以在此用来描述各种元素,但这些元素不应该受限于这些术语。这些术语仅用来将这些元素彼此区分开。例如,在不脱离本发明范围的前提下,第一线程可以被称为第二线程,并且类似地,第二线程可以被称为第一线程。第一线程和第二线程均为线程,但它们并非同一线程。
在一个实施例中,如图2所示,提供了一种数据访问方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
S202,当触发针对目标内存块的数据读取操作时,基于状态指示数据确定工作状态的目标内存块,并从工作状态的目标内存块读取数据。
其中,数据读取操作是指从目标内存块中读取数据的操作。数据读取操作可以是线程触发操作,比如计算机设备调用一个或多个线程,从而每个线程在调用时,可以针对目标内存块触发数据读取操作。数据读取操作还可以是进程触发操作,比如计算机设备调用一个或多个进程,从而每个进程在调用时,可以针对目标内存块触发数据读取操作。以下以线程触发操作为例进行说明。
目标内存块是指一段由多个存储单元组合而成的具有存储特征的内存空间。不同目标内存块之间的存储特征可以相同,也可以不同。参考图3,图3示出了一个实施例中目标内存块和状态指示数据的示意图。如图3所示,本申请在环境初始化时创建了两个具有相同的存储特征的目标内存块,并将创建的两个目标内存块作为相配对的目标内存块。
存储特征具体可以包括存储空间和存储结构。其中,存储空间是指目标内存块所占用的内存大小,内存空间可以根据需求自由设定,比如可以根据待存储的数据量设置存储空间,又比如,可以根据计算机设备中的内存条的内存规格设置存储空间。
存储结构是指存储于内存中的数据之间的组织关系,存储结构包括顺序存储结构、链接存储结构等。在内存空间的存储结构为顺序存储结构时,计算机设备将逻辑上相邻的数据存储于目标内存块中的内存地址相邻的存储单元中;在内存空间的存储结构为链接存储结构时,计算机设备将逻辑上相邻的数据进行存储,并借助指针变量建立逻辑上相邻的两个数据之间的关联关系。
如图3所示,本申请在环境初始化时创建了状态指示数据,状态指示数据为用于指示目标内存块的工作状态的数据。状态指示数据具体可以是指针变量、键值对、字符串等。
其中,指针变量是指一种用于存放目标内存块的地址的变量,当状态指示数据为指针变量时,可以在配对的两个目标内存块中,将指针变量所指向的目标内存块置为工作状态的目标内存块,将指针变量未指向的目标内存块,置为空闲状态的目标内存块;或者在配对的两个目标内存块中,将指针变量所指向的目标内存块置为空闲状态的目标内存块,将指针变量未指向的目标内存块,置为工作状态的目标内存块。
键值对是指key-value对,其中键Key作为唯一标识符指向值Value。当状态指示数据为指键值对时,计算机设备能够通过限定key-value,确定目标内存块的工作状态。比如限定键key值所指向的值Value为工作状态的目标内存块的内存标识。内存标识是指能够唯一标识一个内存块的信息,如内存块的内存地址、对内存块的内存地址进行编码得到的编号、或创建内存块的时间戳等。
具体地,当需要针对目标内存块读取数据时,计算机设备可以根据数据读取需求调用一个或多个第一线程,从而每个第一线程在被调用之后均可触发、执行针对目标内存块的数据读取操作。比如当运行于计算机设备中的多个业务系统均需读取目标内存块中的目标数据时,计算机设备统计需要读取目标数据的业务系统的数量值,并根据数量值,调用对应数量的第一线程用以触发、执行针对目标内存块的数据读取操作。实际应用中,多个被调用的第一线程可同步执行数据读取操作,也可异步执行数据读取操作,这取决于计算机设备中是否具有多核处理器。
参考图4,图4示出了一个实施例中数据读取操作的原理示意图。如图4所示,当触发针对目标内存块的数据读取操作时,第一线程基于状态指示数据确定工作状态的目标内存块,并从工作状态的目标内存块中读取目标数据。
在一个实施例中,从所述工作状态的目标内存块读取数据具体包括:当数据读取操作指定用户标识时,确定用户标识所对应的目标用户的用户角色;根据用户角色在预置的角色结构树中确定与目标用户对应的角色节点;将目标用户对应的角色节点作为当前层级角色节点,从当前层级角色节点朝着低层级角色节点的方向对角色结构树进行遍历;当前层级角色节点、或者与当前层级角色节点直接或间接相连的一个或多个低层级角色节点具有对所需访问数据的访问权限时,根据所需访问数据的数据标识,从工作状态的目标内存块中读取数据。
其中,角色结构树可以是根据整个集团的组织架构构建得到的,包括多个层级的角色节点以及用于连接角色节点的连接边。容易理解,当前角色节点的层级越高,可表明与当前角色节点相对应的目标用户在集团中的职位就越高。
具体地,计算机设备上运行有一个或多个业务系统。计算机设备监听用户基于业务系统触发的数据访问指令。数据访问指令可以是用户在业务系统进行页面浏览、数据下载、数据转发等数据访问操作而触发生成的指令。数据访问指令携带了用户标识和数据标识。用户标识是能够唯一表征用户身份的信息,如身份证号、手机号等。数据标识是能够唯一标识用户期望访问的目标数据的信息,具体可以是数据编号、基于数据标题或内容生成的哈希值等。
当监听到数据访问指令时,第一线程触发数据读取操作,并根据数据访问指令所携带的用户标识确定所对应目标用户的用户角色。用户角色适用于反映用户权职范围的角色信息。第一线程获取预存储的角色结构树,并根据目标用户的用户角色在角色结构树中明确角色节点。第一线程将目标用户所对应的角色节点作为当前层级角色节点,根据预存储的用户角色与访问权限之间的对应关系,验证对当前层级角色节点所连接的下一层次角色节点是否具有对数据标识所对应目标数据的访问权限。若下一层级组织节点具有对目标数据的访问权限,第一线程停止遍历,判断目标用户具有对目标数据的访问权限,并根据数据标识从工作状态的目标内存块中读取目标数据。若下一层级组织节点不具备对目标数据的访问权限,则对下一层级组织节点的下一层级组织节点是否具有对数据标识所对应目标数据的访问权限进行验证。如此重复,直至发现至少一个与当前层级角色节点直接或间接相连的低层级角色节点具有对目标数据的访问权限为止。若遍历至最低层级的角色节点,仍未发现与当前层级角色节点直接或间接相连、且具有对目标数据的访问权限的低层级组织节点,则判定目标用户不具备对目标数据的访问权限,第一线程暂停从目标内存块中读取目标数据。通过对目标用户是否具有对目标数据的访问权限进行验证,在目标用户具有对目标数据的访问权限时,才执行从目标内存块中读取目标数据的步骤,可以提升数据读取的安全性。
S204,当触发针对目标内存块的数据更新操作时,基于状态指示数据确定空闲状态的目标内存块。
具体地,参考图5,图5示出了一个实施例中数据更新操作的原理示意图。如图5所示,当需要进行数据更新时,计算机设备基于数据更新需求调用一个或多个第二线程,从而每个第二线程在被调用之后均可触发、执行针对目标内存块的数据更新操作。实际应用中,为了提升目标内存块中的数据的安全性,多个被调用的第二线程异步执行数据更新操作。当触发针对目标内存块的数据更新操作时,第二线程获取状态指示数据所指向的目标内存块,并基于所指向的目标内存块确定空闲状态的目标内存块。比如在状态指示数据为键值对,并且限定键key值所指向的值Value为工作状态的目标内存块的内存标识时,第二线程将键key值所指向的值Value确定为工作状态的目标内存块,并在两个相配对的目标内存块中,将键key值未指向的值Value确定为空闲状态的目标内存块。
在一个实施例中,当多于一个的第二线程并发针对目标内存块的数据更新操作时,状态的其中一个第二线程可以对空闲状态的目标内存块中的数据申请加锁,在申请加锁成功后再对空闲状态的目标内存块中的数据进行更新处理;当该第二线程更新处理完毕后,则释放锁。在加锁后,其它第二线程只能进行等待,而无法对加锁的数据进行更新处理,如此提升了数据的安全性,避免多个第二线程并发更新时导致出错。
S206,基于数据更新操作,向空闲状态的目标内存块进行全量数据更新。
具体地,如图5所示,第二线程基于数据更新操作,确定空闲状态的目标内存块经过更新应存的全量数据,并将空闲状态的目标内存块中的数据全部替换为全量数据。其中,全量数据是指经过更新后的目标内存块中的全部数据。对于第二线程而言,直接对空闲状态的目标内存块进行全量数据更新,可以保证目标内存块中的每个数据的实时性。
在一个实施例中,当获取得到全量数据时,第二线程对应删除空闲状态的目标内存块中的原始数据,并将全量数据存储至删除了原始数据的目标内存块中。为了提升数据的安全性,第二线程将目标内存块中的原始数据缓存至临时缓存空间,并在确认全量数据更新执行完毕时,销毁对应的临时缓存空间;在全量数据更新执行失败时,基于缓存空间中的原始数据复原空闲状态的目标内存块。
S208,当全量数据更新执行完毕时,通过修改状态指示数据,将空闲状态的目标内存块置为工作状态。
具体地,参考图6,图6为一个实施例中状态指示数据修改的原理示意图。如图6所示,当全量数据更新执行完毕时,第二线程修改状态指示数据,将空闲状态的目标内存块置为工作状态,以及将工作状态的目标内存块置为空闲状态。比如,在上述举例中,第二线程通过修改键key值所指向的值Value置为空闲状态的目标内存块的内存地址,将空闲状态的目标内存块置为工作状态,以及将工作状态的目标内存块置为空闲状态。
在一个实施例中,第二线程对全量数据以及空闲状态的目标内存块中的数据进行差异性分析,根据差异性分析结果从全量数据中筛选出差异数据,并将差异数据更新至空闲状态的目标内存块。其中,数据包括数据标识和数据内容。数据标识是能够唯一标识一个期望访问的目标数据的信息,如数据编号;数据内容是指全量数据中的每个数据所包含的具体内容,如数据值。差异数据是指数据标识存储于全量数据,但尚未存储于空闲状态的目标内存块的数据;或者数据标识虽存储于全量数据和空闲状态的目标内存块中,但两者的数据内容不一致的数据。通过对全量数据以及空闲状态的目标内存块中的数据进行差异性分析,可以根据差异性分析结果选择仅对有差异的数据进行更新,如此,大大减少了不必要的数据更新步骤,进而节约了数据更新所耗费的计算机资源。
在一个实施例中,数据读取操作由第一线程触发;数据更新操作由第二线程触发;全量数据更新和修改状态指示数据,由第二线程或第三线程执行。
其中,计算机设备中具有线程池。线程池由多个用于触发、执行数据读取操作和数据更新操作的线程构成,如由用以触发数据读取操作的第一线程、用以触发数据更新操作,以及进行全量数据更新和修改状态指示数据的第二线程、用以进行全量数据更新和修改状态指示数据的第三线程构成。
具体地,在需要同时针对目标内存块中的数据执行读取操作和数据更新操作时,计算机设备根据数据读取需求和数据更新需求,从线程池中选择一个或多个用以触发数据读取操作的第一线程,以及从线程池中选择一个或多个用以触发数据更新操作的第二线程,从而被选择的第一线程和第二线程可以并行响应不同的数据访问需求。当一个或多个第一线程被调用时,一个或多个第一线程均可触发针对目标内存块的数据读取操作,并基于数据读取操作从状态指示数据中确定工作状态的目标内存块,从工作状态的目标内存块中读取目标数据。
当仅有一个第二线程被调用时,第二线程触发针对目标内存块的数据更新操作,并基于数据更新操作对空闲状态的目标内存块进行全量数据更新。当有多个第二线程被调用时,计算机设备按照被调用的先后顺序对多个第二线程进行排序,基于排列顺序依次控制第二线程完成全量数据更新操作和修改状态指示数据操作。在一个实施例中,当具有两个或两个以上的第二线程同时被调用时,计算机设备获取预设的附加排序规则,根据预设的附加排序对第二线程进行排序。比如附加排序规则可以为根据线程ID(Identitydocument,标识)的ID大小对多个同时被调用的第二线程进行排序。
在一个实施例中,计算机设备可以在线程池中创建一个用以进行全量数据更新和状态指示数据修改的第三线程。在触发针对目标内存块的数据更新操作时,第二线程根据所触发的操作生成对应的数据更新请求,并将数据更新请求发送至第三线程,由第三线程基于数据更新请求进行全量数据更新和状态指示数据修改。比如,当用户点击业务系统中的数据更新控件时,第二线程基于用户的点击操作确定全量数据,根据全量数据生成数据更新请求,将数据更新请求发送至第三线程。第三线程对数据更新请求进行解析,得到全量数据,并基于全量数据更新空闲状态的目标内存块。
通过创建一个专用于全量数据更新和状态指示数据修改的第三线程,使得计算机设备可以将触发操作和真正的执行操作进行分离,从而分离后的多个触发操作可以同步执行,多个执行操作可以异步执行。通过同步执行触发操作,可以在同时接收到多个业务系统发出的数据更新需求时,基于多个第二线程对多个数据更新需求进行初步响应,比如同时向多个业务系统发送数据更新操作正在执行提示,以此提升用户体验;通过第三线程异步执行数据更新需求,可以降低多个线程同时针对同一数据进行更新时所造成的数据不同步的概率,从而提升数据的安全性。
上述数据访问方法中,通过工作状态指示数据将配对的两个目标内存块的工作状态进行区分,使得在触发针对目标内存块的数据读取操作时,可以从工作状态的目标内存块读取数据;在触发针对目标内存块的数据更新操作时,可以对空闲状态的目标内存块进行全量数据更新,如此,便能在保证数据安全的前提下,实现数据访问和数据更新的并发操作;此外,在全量数据更新执行完毕时,通过修改状态指示数据,将空闲状态的目标内存块置为工作状态,可以在保证并发的同时,提升所读取数据的实时性。
在一个实施例中,数据访问方法还包括:触发环境初始化;在环境初始化时,创建两个具有相同存储特征的目标内存块,并创建状态指示数据。其中,状态指示数据,指示两个目标内存块中的一个目标内存块为工作状态,并指示另一个目标内存块为空闲状态。
其中,环境初始化是指数据访问方法首次执行时,计算机设备根据数据访问需求创建目标内存块和指示数据的过程。本实施例中,创建的目标内存块具体为两个具有相同存储结构和存储空间的内存块。
具体地,计算机设备中预存储有环境初始化触发条件,在满足环境初始化触发条件时,计算机设备创建两个具有相同存储特征的目标内存块,以及创建状态指示数据。其中,环境初始化触发条件是指用以触发计算机设备进行环境初始化的条件。环境初始化触发条件可以根据需求自由设定,比如环境初始化触发条件可以为计算机设备由关机转为开机;或者为业务系统由关闭转为开启;亦或者为用户触发环境初始化控件。其中,环境初始化控件具体可以是按钮或者超链接等;也可以是图形码,比如二维码或者条形码等。业务系统允许用户进行浏览、数据下载、数据更新等数据访问操作。
本实施例中,由于创建的两个目标内存块具有相同的存储特征,因而可以保证两个目标内存块的一致性;由于创建的状态指示数据指示两个目标内存块中的一个目标内存块为工作状态,另一个目标内存块为空闲状态,因而可以基于状态指示数据对目标内存块的工作状态进行区分。
在一个实施例中,创建两个具有相同存储特征的目标内存块,包括:创建一个目标内存块;获取目标内存块的存储特征;存储特征包括存储空间和存储结构;基于存储特征,复制得到另一个目标内存块。
具体地,当触发环境初始化时,计算机设备获取待创建的目标内存块的存储特征,基于存储特征创建一个目标内存块。其中,存储特征可以是预先存储于计算机设备中的,也可以是在触发环境初始化时,用户对待创建的目标内存块进行配置得到的。计算机设备获取已创建的目标内存块的存储特征,并根据存储特征复制得到另一个相配对的目标内存块。
在一个实施例中,在对待创建的目标内存块进行配置的过程中,用户还可以指定待存储的数据,从而计算机设备将指定的待存储数据存储至已创建的一个目标内存块中。比如用户可以指定将数据库中高频访问的数据存储至已创建的一个目标内存块中。
本实施例中,计算机设备仅需对已创建的目标内存块进行复制操作,即可快速得到另一个具有相同存储特征的目标内存块,如此,提高了相配对的目标内存块的创建效率。
在一个实施例中,状态指示数据采用指针变量;基于状态指示数据确定工作状态的目标内存块,包括:将指针变量所存放地址指向的目标内存块,确定为工作状态的目标内存块;基于状态指示数据确定空闲状态的目标内存块,包括:在配对的两个目标内存块中,将指针变量所存放地址未指向的目标内存块,确定为空闲状态的目标内存块。
其中,指针变量是指存放地址的变量。本实施例中,指针变量所存放的地址为目标内存块的内存地址。内存地址是指用于访问目标内存块的地址信息,通常由多个十六进制数据组成,如0x00000000,或者0x00000000~0x000fffff。在已知目标内存块的存储空间时,计算机设备将目标内存块中首个存储单元的地址作为目标内存块的内存地址;在未知目标内存块的存储空间时,计算机设备将首个存储单元的地址以及末尾存储单元的地址,作为内存地址取值范围的取值边界。其中,存储单元是指组成目标内存块的最小单元,通常用以存储一个8位二进制数据。不同存储单元具有不同地址。
具体地,计算机设备获取相配对的两个目标内存块中的其中一个目标内存块的内存地址,并基于指针变量对获取得到的内存地址进行存储,从而将指针变量所存放地址指向的目标内存块,确定为工作状态的目标内存块;将指针变量所存放地址未指向的目标内存块,确定为空闲状态的目标内存块。
本实施例中,通过指针变量对目标内存块的工作状态进行区分,使得后续只需基于指针变量进行寻址操作,即可快速得知工作状态的目标内存块,从而大大提升了目标内存块的寻址效率。
在一个实施例中,通过修改状态指示数据,将空闲状态的目标内存块置为工作状态,包括:修改指针变量,使得指针变量所存放地址指向空闲状态的目标内存块。
其中,如上文所述,指针变量始终指向工作状态的目标内存块,基于该指针变量,在第一线程从工作状态的目标内存块中读取数据的同时,第二线程也能够对空闲状态的目标内存块进行全量数据更新。如果期望第一线程读取的数据具有更高的实时性,则可以在全量数据更新操作完成时,通过修改指针变量,将空闲状态的目标内存块置为工作状态。
具体地,在全量数据更新执行完毕时,第二线程获取两个配对的目标内存块中,指针变量未指向的目标内存块的内存地址,并删除指针变量存储的原始地址,将获取得到的内存地址存储至指针变量中。可以理解的,指针变量的修改操作也可由第三线程执行。
在一个实施例中,在触发环境初始化时,计算机设备创建两个具有相同存储特征的目标内存块,并对应记录目标内存块的内存地址,以使第二线程能够根据记录的内存地址修改指针变量。比如在创建目标内存块的同时,计算机设备将相配对的两个目标内存块的内存地址均存储于缓存中,后续在进行指针变量修改操作时,可以在缓存中查询应指向的内存地址。
本实施例中,通过在全量更新执行完毕时,将空闲状态的目标内存块置为工作状态,使得第一线程所读取的数据为更新后的数据,如此,大大提升了数据的实时性。
在一个实施例中,基于数据更新操作,向空闲状态的目标内存块进行全量数据更新,包括:当数据更新操作指定数据路径时,获取数据路径;按照数据路径读取全量数据;将空闲状态的目标内存块中的数据全部替换为全量数据。
其中,数据路径为读取待更新至目标内存块的全量数据的访问路径。数据路径具体可以是存储全量数据的数据库的访问路径、存储全量数据的文件的访问路径等。其中,当全量数据集中存储于单张数据表时,数据库的访问路径包括全量数据所在数据表的表地址;当全量数据分散存储于多张数据表时,数据库的访问路径,不仅包括多张数据表的表地址,还包括全量数据的数据标识,比如,通过在表中新增一列“全量数据的数据标识”,即可在存储有全量数据的数据表中查询全量数据。
具体地,当需要针对目标内存块进行数据更新时,计算机设备调用第二线程触发数据更新操作,并基于所调用的第二线程获取预存储的数据路径。第二线程对获取的到的数据路径进行分析,得到数据路径所指向的路径类型。当数据路径指向数据库时,第二线程根据数据路径中的表地址以及全量数据的数据标识,从数据库中读取全量数据。当数据路径指向文件时,第二线程根据数据路径获取文件,并对文件进行解析,得到记录于文件中的全量数据。比如,第二线程对文件中的JSON(JavaScript Object Notation,JS对象简谱)字符串进行解析,得到记录与JSON字符串中的全量数据。当获取得到全量数据时,第二线程通过状态指示数据确定空闲状态的目标内存块,并将空闲状态的目标内存块中的全部数据替换为全量数据。
本实施例中,基于指定的数据路径进行全量数据的读取,可以提升所读取的全量数据的完整性。此外,针对细分的基于不同存储方式进行存储的全量数据,通过分别部署不同的数据路径,可以满足对具有多种存储方式的全量数据进行数据读取的读取需求。
在一个实施例中,基于数据更新操作,向空闲状态的目标内存块进行全量数据更新,包括:当数据更新操作指定更新数据时,获取更新数据;基于更新数据和工作状态的目标内存块中的数据,对空闲状态的目标内存块进行全量数据更新。
具体地,当获取得到更新数据时,计算机设备调用第二线程触发数据更新操作,并基于所触发的数据更新操作,获取更新数据和工作状态的目标内存块中的全部数据。比如,当用户基于业务系统输入更新数据时,计算机设备调用第二线程获取所输入的更新数据,与此同时,基于状态指示数据读取工作状态的目标内存块中的全部数据。其中,更新数据是指与工作状态的目标内存块中的数据相比,具有相同数据标识,和不同数据内容的数据。第二线程对空闲状态的目标内存块中的原始数据进行删除处理,基于更新数据和工作状态的目标内存块中的数据,对删除原始数据的空闲状态的目标内存块进行全量数据更新。
在一个实施例中,第二线程创建一个用以存储工作状态的目标内存块的数据的临时缓存空间,并基于更新数据对临时缓存空间内的数据进行更新。当对临时缓存空间的更新操作执行完毕时,第二线程将空闲状态的目标内存块的全部数据替换为临时缓存空间中的数据。当对空闲状态的目标内存块的全量数据更新操作执行完毕时,第二线程销毁所创建的临时缓存空间。
在一个实施例中,第二线程优先将更新数据存储至删除了原始数据的空闲状态的目标内存块,再将位于工作状态的目标内存块中的,与更新数据具有不同数据标识的数据存储至空闲状态的目标内存块。容易理解,也可以先将工作状态的目标内存块中数据存储至删除了原始数据的空闲状态的目标内存块,再基于更新数据对空闲状态的目标内存块进行数据更新。在此不做限定。
本实施例中,由于相比于空闲状态的目标内存块的数据,工作状态的目标内存块的数据具有更高的实时性,因此结合更新数据以及工作状态的目标内存块中的数据,即可得到全量数据,从而可以基于全量数据对空闲状态的目标内存块进行数据更新。
在一个实施例中,基于数据更新操作,向空闲状态的目标内存块进行全量数据更新,包括:当数据更新操作为数据插入操作时,基于数据插入操作确定待写入数据;将待写入数据写入工作状态的目标内存块中;当待写入数据写入成功时,将工作状态的目标内存块中的数据全量同步至空闲状态的目标内存块。
具体地,当第二线程获取得到的更新数据的数据标识不存在于工作状态的目标内存块时,可以认为此时的数据更新操作为数据插入操作,获取得到的更新数据为待写入数据。第二线程基于状态指示数据确定工作状态的目标内存块,并将待写入数据写入工作状态的目标内存块。第二线程判断写入数据是否写入成功,在写入成功时,将工作状态的目标内存块中的全部数据同步至空闲状态的目标内存块。在一个实施例中,第二线程基于待写入数据的数据标识,从工作状态的目标内存块中读取待写入数据,当读取成功时,判定待写入数据写入成功。
本实施例中,由于数据插入操作不会更改已存储于目标内存块中的全部数据的数据内容,因此在进行数据插入操作的同时,依旧可以针对工作状态的目标内存块进行数据读取操作,这种数据插入和数据读取的并发操作使得计算机设备可以在同一时间处理不同的数据访问任务,从而提升了数据访问任务的处理效率。此外,由于目标内块中的数据是同步得到的,因此可以保证两个目标内存块中的数据的一致性。
在一个实施例中,上述数据访问方法还包括:当工作状态的目标内存块和空闲状态的目标内存块数据不一致时,将工作状态的目标内存块中的数据同步至空闲状态的目标内存块;当触发数据更新操作时,停止将工作状态的目标内存块中的数据同步至空闲状态的目标内存块的操作。
具体地,计算机设备对工作状态的目标内存块中的数据,以及空闲状态的目标内存块中的数据进行差异性分析,当工作状态的目标内存块中,存在数据标识尚未存储于空闲状态的目标内存块的数据时,计算机设备将尚未存储的数据写入空闲状态的目标内存块;当工作状态的目标内存块中,存在数据标识已存储于空闲状态的目标内存块,但数据内容不一致的数据时,计算机设备基于数据内容不一致的数据更新空闲状态的目标内存块。进一步地,计算机设备持续对数据更新的触发操作进行监控,当确定触发数据更新操作时,计算机设备停止将工作状态的目标内存块中的数据更新或写入空闲状态的目标内存块,转为执行数据更新操作。
本实施例中,通过在执行两次相邻的数据更新操作之间,将工作状态的目标内存块中的数据同步至空闲状态的目标内存块,使得两个目标内存块中的数据可以保持一致,从而当工作状态的目标内存块因故障不可用时,依旧能够从空闲状态的目标内存块中读取更新后的数据。
在一个具体实施例中,如图7所示,本申请提供的数据访问方法包括以下步骤:
S702,当触发针对目标内存块的数据读取操作时,将指针变量所存放地址指向的目标内存块,确定为工作状态的目标内存块,并从工作状态的目标内存块读取数据;数据读取操作由第一线程触发。
S704,当触发针对目标内存块的数据更新操作时,在配对的两个目标内存块中,将指针变量所存放地址未指向的目标内存块,确定为空闲状态的目标内存块;数据更新操作由第二线程触发。
S706,当数据更新操作指定数据路径时,获取数据路径,按照数据路径读取全量数据,将空闲状态的目标内存块中的数据全部替换为全量数据。
S708,当数据更新操作指定更新数据时,获取更新数据;基于更新数据和工作状态的目标内存块中的数据,对空闲状态的目标内存块进行全量数据更新。
S710,当数据更新操作为数据插入操作时,基于数据插入操作确定待写入数据,将待写入数据写入工作状态的目标内存块中,当待写入数据写入成功时,将工作状态的目标内存块中的数据全量同步至空闲状态的目标内存块。
S712,当全量数据更新执行完毕时,修改指针变量,使得指针变量所存放地址指向空闲状态的目标内存块;全量数据更新和修改指针变量,由第二线程或第三线程执行。
S714,当工作状态的目标内存块和空闲状态的目标内存块数据不一致时,将工作状态的目标内存块中的数据同步至空闲状态的目标内存块;当触发数据更新操作时,停止将工作状态的目标内存块中的数据同步至空闲状态的目标内存块的操作。
上述数据访问方法,通过工作状态指示数据将配对的两个目标内存块的工作状态进行区分,使得在触发针对目标内存块的数据读取操作时,可以从工作状态的目标内存块读取数据;当触发针对目标内存块的数据更新操作时,可以对空闲状态的目标内存块进行全量数据更新,如此,便能在保证数据安全的前提下,实现数据访问和数据更新的并发操作;此外,在全量数据更新执行完毕时,通过修改状态指示数据,将空闲状态的目标内存块置为工作状态,可以在保证并发的同时,提升所读取数据的实时性。
在另一个具体实施例中,如图8所示,本申请提供的数据访问方法包括以下步骤:
S802,触发环境初始化。
S804,在环境初始化时,创建一个目标内存块,获取目标内存块的存储特征,基于存储特征,复制得到另一个目标内存块;以及创建状态指示数据;存储特征包括存储空间和存储结构;状态指示数据,指示两个目标内存块中的一个目标内存块为工作状态,并指示另一个目标内存块为空闲状态。
S806,当触发针对目标内存块的数据读取操作时,基于状态指示数据确定工作状态的目标内存块,并从工作状态的目标内存块读取数据。
S808,当触发针对目标内存块的数据更新操作时,基于状态指示数据确定空闲状态的目标内存块。
S810,基于数据更新操作,向空闲状态的目标内存块进行全量数据更新。
S812,当全量数据更新执行完毕时,通过修改状态指示数据,将空闲状态的目标内存块置为工作状态。
本申请还提供一种应用场景,该应用场景应用上述的数据访问方法。具体地,该数据访问方法在该应用场景的应用如下:
该应用场景涉及终端和服务器,其中,终端运行有通讯录应用,用于查询、修改同组成员的联系方式;服务器为通讯录应用的后台服务器,用以调用线程响应终端发送的联系方式查询请求和联系方式修改请求。在触发环境初始化时,服务器创建两个具有相同存储特征的用以存储联系方式的目标内存块,以及创建一个状态指示数据,基于状态指示数据将两个目标内存块中的一个目标内存块置为工作状态,另一个置为空闲状态。
当服务器接收到多个用户同时基于各自终端发起的联系方式查询请求或联系方式修改请求时,服务器统计接收到的请求数量,并基于请求数量调用多个线程响应联系方式查询请求或联系方式修改请求,在联系方式修改请求响应成功后,通过修改状态指示数据,将空闲状态的目标内存块置为工作状态。
比如,当用户A基于通讯录应用发起查询a成员联系方式的查询请求、用户B发起查询b成员联系方式的查询请求、用户C发起更新c成员联系方式的修改请求时,服务器根据接收到的请求数量,调用两个第一线程和一个第二线程:a第一线程、b第一线程以及c第二线程,从而a第一线程可以基于状态指示数据确定工作状态的目标内存块,并从工作状态的目标内存块中读取a成员的联系方式,将读取得到的联系方式返回至用户A;b第一线程可以基于状态指示数据确定工作状态的目标内存块,并从工作状态的目标内存块中读取b成员的联系方式,将读取得到的联系方式返回至用户B;c第二线程可以基于状态指示数据确定空闲状态的目标内存块,并根据联系方式修改请求所携带的c成员联系方式对空闲状态的目标内存块进行全量更新,在全量更新执行完毕时,对应修改状态指示数据。
本申请还另外提供一种应用场景,该应用场景应用上述的数据访问方法。具体地,该数据访问方法在该应用场景的应用如下:
该应用场景涉及终端和服务器,其中,终端中运行有库存查询系统,用于对多种物料的库存进行查询。服务器中具有两个目标内存块和一个状态指示数据,其中,目标内存块中存放有热门物料的库存信息,状态指示数据用以将两个目标内存块中的一个目标内存块置为工作状态,另一个置为空闲状态。在环境初始化时,为了降低终端访问数据库的频次,服务器从数据库中拉取热门物料的库存信息,并将热门物料的库存信息存放至目标内存块,从而在读取库存信息时,终端可以优先从目标内存块中查找库存信息,而无需频繁访问数据库,如此降低了数据库的访问频率,提升了系统的整体性能。其中,热门物料的库存信息是指在统计时段内,被终端读取的次数超出预设阈值的信息。
当需要读取多种物料的库存信息时,终端基于库存信息读取需求生成多个库存信息读取请求,并将多个库存信息读取请求发送至服务器,以使服务器调用多个第一线程响应库存信息读取请求。第一线程通过状态指示数据确定工作状态的目标内存块,并从工作状态的目标内存块读取库存信息,将读取得到的库存信息返回至终端。
为了提升库存信息的实时性,服务器中的第二线程每隔一定时间从数据库拉取最新的库存信息,并基于拉取得到的库存信息对空闲状态的目标内存块进行全量更新。当全量数据更新执行完毕时,第二线程通过修改状态指示数据,将空闲状态的目标内存块置为工作状态。
应该理解的是,虽然图2、7和8的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、7和8中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图9所示,提供了一种数据访问装置900,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:数据读取模块902、数据更新模块904和状态指示数据修改模块906,其中:
数据读取模块902,用于当触发针对目标内存块的数据读取操作时,基于状态指示数据确定工作状态的目标内存块,并从所述工作状态的目标内存块读取数据;数据读取操作由第一线程触发。
数据更新模块904,用于当触发针对目标内存块的数据更新操作时,基于所述状态指示数据确定空闲状态的目标内存块;基于所述数据更新操作,向所述空闲状态的目标内存块进行全量数据更新;数据更新操作由第二线程触发。
状态指示数据修改模块906,用于当所述全量数据更新执行完毕时,通过修改所述状态指示数据,将空闲状态的目标内存块置为工作状态;全量数据更新和所述修改所述状态指示数据,由所述第二线程或第三线程执行。
在一个实施例中,如图10所示,数据访问装置900还包括初始化模块908,用于触发环境初始化;在所述环境初始化时,创建两个具有相同存储特征的目标内存块,并创建状态指示数据;其中,所述状态指示数据,指示两个所述目标内存块中的一个目标内存块为工作状态,并指示另一个目标内存块为空闲状态。
在一个实施例中,初始化模块908还用于创建一个目标内存块;获取所述目标内存块的存储特征;所述存储特征包括存储空间和存储结构;基于所述存储特征,复制得到另一个目标内存块。
在一个实施例中,数据读取模块902还用于将指针变量所存放地址指向的目标内存块,确定为工作状态的目标内存块;所述基于所述状态指示数据确定空闲状态的目标内存块,包括:在配对的两个目标内存块中,将所述指针变量所存放地址未指向的目标内存块,确定为空闲状态的目标内存块。
在一个实施例中,状态指示数据修改模块906还用于修改所述指针变量,使得所述指针变量所存放地址指向所述空闲状态的目标内存块。
在一个实施例中,数据更新模块904还用于当所述数据更新操作指定数据路径时,获取所述数据路径;按照所述数据路径读取全量数据;将所述空闲状态的目标内存块中的数据全部替换为所述全量数据。
在一个实施例中,数据更新模块904还用于当所述数据更新操作指定更新数据时,获取所述更新数据;基于所述更新数据和所述工作状态的目标内存块中的数据,对所述空闲状态的目标内存块进行全量数据更新。
在一个实施例中,数据更新模块904还用于当所述数据更新操作为数据插入操作时,基于所述数据插入操作确定待写入数据;将所述待写入数据写入工作状态的目标内存块中;当所述待写入数据写入成功时,将所述工作状态的目标内存块中的数据全量同步至所述空闲状态的目标内存块。
在一个实施例中,上述数据访问装置900还包括同步模块910,用于当所述工作状态的目标内存块和所述空闲状态的目标内存块数据不一致时,将所述工作状态的目标内存块中的数据同步至空闲状态的目标内存块;当触发所述数据更新操作时,停止所述将所述工作状态的目标内存块中的数据同步至空闲状态的目标内存块的操作。
关于数据访问装置的具体限定可以参见上文中对于数据访问方法的限定,在此不再赘述。上述数据访问装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是图1中的服务器120,其内部结构图可以如图11所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储数据访问数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据访问方法。
本领域技术人员可以理解,图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,本申请提供的数据访问装置可以实现为一种计算机程序的形式,计算机程序可在如图11所示的计算机设备上运行。计算机设备的存储器中可存储组成该数据库迁移评估装置的各个程序模块,比如,图9所示的数据读取模块、数据更新模块和状态指示数据修改模块。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的数据访问中的步骤。
例如,图11所示的计算机设备可以通过如图9所示的数据访问装置中的数据读取模块执行步骤S202。计算机设备可通过数据更新模块执行步骤S204和S206。计算机设备可通过状态指示数据修改模块执行步骤S208。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述数据访问方法的步骤。此处数据访问方法的步骤可以是上述各个实施例的数据访问方法中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述数据访问方法的步骤。此处数据访问方法的步骤可以是上述各个实施例的数据访问方法中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (15)
1.一种数据访问方法,其特征在于,所述方法包括:
当触发针对目标内存块的数据读取操作时,基于状态指示数据确定工作状态的目标内存块,并从所述工作状态的目标内存块读取数据;
当触发针对目标内存块的数据更新操作时,基于所述状态指示数据确定空闲状态的目标内存块;
基于所述数据更新操作,向所述空闲状态的目标内存块进行全量数据更新;
当所述全量数据更新执行完毕时,通过修改所述状态指示数据,将空闲状态的目标内存块置为工作状态。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
触发环境初始化;
在所述环境初始化时,创建两个具有相同存储特征的目标内存块,并创建状态指示数据;
其中,所述状态指示数据,指示两个所述目标内存块中的一个目标内存块为工作状态,并指示另一个目标内存块为空闲状态。
3.根据权利要求2所述的方法,其特征在于,所述创建两个具有相同存储特征的目标内存块,包括:
创建一个目标内存块;
获取所述目标内存块的存储特征;所述存储特征包括存储空间和存储结构;
基于所述存储特征,复制得到另一个目标内存块。
4.根据权利要求1所述的方法,其特征在于,所述状态指示数据采用指针变量;所述基于状态指示数据确定工作状态的目标内存块,包括:
将指针变量所存放地址指向的目标内存块,确定为工作状态的目标内存块;
所述基于所述状态指示数据确定空闲状态的目标内存块,包括:
在配对的两个目标内存块中,将所述指针变量所存放地址未指向的目标内存块,确定为空闲状态的目标内存块。
5.根据权利要求4所述的方法,其特征在于,所述通过修改所述状态指示数据,将空闲状态的目标内存块置为工作状态,包括:
修改所述指针变量,使得所述指针变量所存放地址指向所述空闲状态的目标内存块。
6.根据权利要求1所述的方法,其特征在于,所述数据读取操作由第一线程触发;所述数据更新操作由第二线程触发;所述全量数据更新和所述修改所述状态指示数据,由所述第二线程或第三线程执行。
7.根据权利要求1所述的方法,其特征在于,所述基于所述数据更新操作,向所述空闲状态的目标内存块进行全量数据更新,包括:
当所述数据更新操作指定数据路径时,获取所述数据路径;
按照所述数据路径读取全量数据;
将所述空闲状态的目标内存块中的数据全部替换为所述全量数据。
8.根据权利要求1所述的方法,其特征在于,所述基于所述数据更新操作,向所述空闲状态的目标内存块进行全量数据更新,包括:
当所述数据更新操作指定更新数据时,获取所述更新数据;
基于所述更新数据和所述工作状态的目标内存块中的数据,对所述空闲状态的目标内存块进行全量数据更新。
9.根据权利要求1所述的方法,其特征在于,所述基于所述数据更新操作,向所述空闲状态的目标内存块进行全量数据更新,包括:
当所述数据更新操作为数据插入操作时,基于所述数据插入操作确定待写入数据;
将所述待写入数据写入工作状态的目标内存块中;
当所述待写入数据写入成功时,将所述工作状态的目标内存块中的数据全量同步至所述空闲状态的目标内存块。
10.根据权利要求1至9中任一项所述的方法,其特征在于,所述方法还包括:
当所述工作状态的目标内存块和所述空闲状态的目标内存块数据不一致时,将所述工作状态的目标内存块中的数据同步至空闲状态的目标内存块;
当触发所述数据更新操作时,停止所述将所述工作状态的目标内存块中的数据同步至空闲状态的目标内存块的操作。
11.一种数据访问装置,其特征在于,所述装置包括:
数据读取模块,用于当触发针对目标内存块的数据读取操作时,基于状态指示数据确定工作状态的目标内存块,并从所述工作状态的目标内存块读取数据;
数据更新模块,用于当触发针对目标内存块的数据更新操作时,基于所述状态指示数据确定空闲状态的目标内存块;基于所述数据更新操作,向所述空闲状态的目标内存块进行全量数据更新;
状态指示数据修改模块,用于当所述全量数据更新执行完毕时,通过修改所述状态指示数据,将空闲状态的目标内存块置为工作状态。
12.根据权利要求11所述的装置,其特征在于,所述数据访问装置还包括初始化模块,用于触发环境初始化;在所述环境初始化时,创建两个具有相同存储特征的目标内存块,并创建状态指示数据;其中,所述状态指示数据,指示两个所述目标内存块中的一个目标内存块为工作状态,并指示另一个目标内存块为空闲状态。
13.根据权利要求11所述的装置,其特征在于,所述数据读取模块还用于将指针变量所存放地址指向的目标内存块,确定为工作状态的目标内存块;所述基于所述状态指示数据确定空闲状态的目标内存块,包括:在配对的两个目标内存块中,将所述指针变量所存放地址未指向的目标内存块,确定为空闲状态的目标内存块。
14.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至10中任一项所述的方法的步骤。
15.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至10中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010552309.7A CN111708626A (zh) | 2020-06-17 | 2020-06-17 | 数据访问方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010552309.7A CN111708626A (zh) | 2020-06-17 | 2020-06-17 | 数据访问方法、装置、计算机设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111708626A true CN111708626A (zh) | 2020-09-25 |
Family
ID=72540565
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010552309.7A Pending CN111708626A (zh) | 2020-06-17 | 2020-06-17 | 数据访问方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111708626A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112667650A (zh) * | 2020-12-28 | 2021-04-16 | 北京华大智宝电子系统有限公司 | 一种数据库更新方法和装置 |
-
2020
- 2020-06-17 CN CN202010552309.7A patent/CN111708626A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112667650A (zh) * | 2020-12-28 | 2021-04-16 | 北京华大智宝电子系统有限公司 | 一种数据库更新方法和装置 |
CN112667650B (zh) * | 2020-12-28 | 2024-05-28 | 北京华大智宝电子系统有限公司 | 一种数据库更新方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11550675B2 (en) | Remote data replication method and system | |
US11809726B2 (en) | Distributed storage method and device | |
CN109344000B (zh) | 区块链网络服务平台、恢复工具及其故障处理方法、存储介质 | |
US10838829B2 (en) | Method and apparatus for loading data from a mirror server and a non-transitory computer readable storage medium | |
KR20210002574A (ko) | 데이터 백업 방법, 저장 매체 및 컴퓨팅 기기 | |
CN109684282B (zh) | 一种构建元数据缓存的方法及装置 | |
US8893272B2 (en) | Method and device for recombining runtime instruction | |
CN110784498B (zh) | 一种个性化数据容灾方法及装置 | |
WO2021139431A1 (zh) | 微服务的数据同步方法、装置、电子设备及存储介质 | |
JP7215971B2 (ja) | 記憶機器のデータ位置の処理方法及び処理装置、コンピュータ機器並びにコンピュータ読み取り可能な記憶媒体 | |
CN111708626A (zh) | 数据访问方法、装置、计算机设备和存储介质 | |
CN115510016A (zh) | 一种基于目录分片的客户端应答方法、装置及介质 | |
CN115794819A (zh) | 一种数据写入方法及电子设备 | |
CN113204520B (zh) | 一种基于分布式文件系统的遥感数据快速并发读写方法 | |
CN115344550A (zh) | 一种分布式文件系统目录克隆方法、装置及介质 | |
CN115421856A (zh) | 一种数据恢复方法及装置 | |
CN114416689A (zh) | 数据迁移方法、装置、计算机设备、存储介质 | |
CN113515518A (zh) | 数据存储方法、装置、计算机设备和存储介质 | |
CN115617580B (zh) | 基于共享sst文件的增量备份、恢复方法和系统 | |
US11424982B2 (en) | Remediation of a system to new desired state using configuration dependency graph | |
US20240004712A1 (en) | Fencing off cluster services based on shared storage access keys | |
US20210248108A1 (en) | Asynchronous data synchronization and reconciliation | |
US20200311037A1 (en) | State information file locations based on version number | |
KR102005727B1 (ko) | 파일 시스템의 변경 연산 가로채기 기법을 기반으로 한 다중 스냅샷 방법 | |
CN115563076A (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 |