CN113342824A - 基于目标存储设备的数据存储方法、装置、设备和介质 - Google Patents

基于目标存储设备的数据存储方法、装置、设备和介质 Download PDF

Info

Publication number
CN113342824A
CN113342824A CN202110742224.XA CN202110742224A CN113342824A CN 113342824 A CN113342824 A CN 113342824A CN 202110742224 A CN202110742224 A CN 202110742224A CN 113342824 A CN113342824 A CN 113342824A
Authority
CN
China
Prior art keywords
data
target storage
file
reading
storage device
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
Application number
CN202110742224.XA
Other languages
English (en)
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.)
Ping An Asset Management Co Ltd
Original Assignee
Ping An Asset Management 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 Ping An Asset Management Co Ltd filed Critical Ping An Asset Management Co Ltd
Priority to CN202110742224.XA priority Critical patent/CN113342824A/zh
Publication of CN113342824A publication Critical patent/CN113342824A/zh
Pending legal-status Critical Current

Links

Images

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/221Column-oriented storage; 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/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2457Query processing with adaptation to user needs
    • G06F16/24578Query processing with adaptation to user needs using ranking
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2474Sequence data queries, e.g. querying versioned data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请涉及存储技术领域,尤其是一种基于目标存储设备的数据存储方法、装置、设备和介质。所述方法包括:获取数据库更新信息,所述数据库更新信息携带有文件标识;生成与所述文件标识对应的互斥锁,所述互斥锁用于禁止其他方对所述文件标识所对应的文件的写操作;根据所述数据库更新信息读取更新数据;将所述更新数据序列化后写入目标存储设备,所述目标存储设备中存储的数据用于数据使用方的读取。采用本方法能够提高数据读取效率。此外,本申请还涉及区块链技术,数据库更新信息可存储于区块链节点中。

Description

基于目标存储设备的数据存储方法、装置、设备和介质
技术领域
本申请涉及存储技术领域,特别是涉及一种基于目标存储设备的数据存储方法、装置、设备和介质。
背景技术
pandas DataFrame(简称DataFrame)是当今python数据分析技术使用的最主要的内存数据集之一。numpy ndarray是一个Python数据科学计算库,支持对N维数组和矩阵的操作,用于快速处理任意维度的数组。
传统技术中,每次从数据库读取数据时,例如读取大量数据,需要将数据序列化成DataFrame数据,但是由于数据量较大,因此需要将序列化后的数据进行缓存。常规的做法是需要耗时将数据全量加载至内存中,然后在内存中对数据进行过滤,过滤完成后再对数据进行序列化处理得到DataFrame数据,从而才能获取到所要读取的数据。这样一方面需要每次将全量数据加载至内存,数据读取量大,另一方面需要耗费时间在序列化上,这样导致数据读取速度较慢。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高数据读取效率的基于目标存储设备的数据存储方法、装置、设备和介质。
一种基于目标存储设备的数据存储方法,所述方法包括:
获取数据库更新信息,所述数据库更新信息携带有文件标识;
生成与所述文件标识对应的互斥锁,所述互斥锁用于禁止其他方对所述文件标识所对应的文件的写操作;
根据所述数据库更新信息读取更新数据;
将所述更新数据序列化后写入目标存储设备,所述目标存储设备中存储的数据用于数据使用方的读取。
在其中一个实施例中,所述将所述更新数据序列化后写入目标存储设备,包括:
根据所述更新数据从目标存储设备读取差分数据;
将序列化后的更新数据和所述差分数据进行合并后存储至目标存储设备。
在其中一个实施例中,所述将所述更新数据序列化后写入目标存储设备,包括:
获取更新数据对应的文件的读取速度;
根据所述读取速度确定对应的目标存储设备;
将更新数据序列化后存储至所确定的目标存储设备中。
在其中一个实施例中,所述生成与所述文件标识对应的互斥锁,包括:
判断是否存在与所述文件标识对应的锁文件;
当不存在与所述文件标识对应的锁文件,则生成互斥锁;
当存在与所述文件标识对应的锁文件,则判断所述锁文件对应的互斥锁是否超时;
当所述锁文件对应的互斥锁超时,则生成互斥锁;
当所述锁文件对应的互斥锁未超时,则延时一段时间后,继续判断是否存在与所述文件标识对应的锁文件,直至生成互斥锁。
在其中一个实施例中,所述将所述更新数据序列化后写入目标存储设备之后,还包括:
接收数据读取指令,根据所述数据读取指令获取行列索引;
根据所述行列索引从所述目标存储设备读取对应的切片数据,并将所读取的切片数据反馈给数据使用方。
在其中一个实施例中,所述目标存储设备包括至少两个存储区,且每个存储区中的文件均携带有结束时间戳;所述根据所述行列索引从所述目标存储设备读取对应的切片数据,包括:
根据所述结束时间戳确定文件对应的目标存储区;
根据所述行列索引从所述目标存储区读取对应的切片数据。
在其中一个实施例中,每个存储区中的文件还均携带有开始时间戳;所述根据所述行列索引从所述目标存储设备读取对应的切片数据之后,还包括:
判断所述目标存储区的开始时间戳是否大于结束时间戳;
当所述目标存储区的开始时间戳大于结束时间戳,则重新根据所述行列索引从所述目标存储设备读取对应的切片数据。
一种基于目标存储设备的数据存储装置,所述装置包括:
更新信息获取模块,用于获取数据库更新信息,所述数据库更新信息携带有文件标识;
互斥锁生成模块,用于生成与所述文件标识对应的互斥锁,所述互斥锁用于禁止其他方对所述文件标识所对应的文件的写操作;
更新数据读取模块,用于根据所述数据库更新信息读取更新数据;
存储模块,用于将所述更新数据序列化后写入目标存储设备,所述目标存储设备中存储的数据用于数据使用方的读取。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任意一个实施例中的方法的步骤。
一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一个实施例中的方法的步骤。
上述基于目标存储设备的数据存储方法、装置、设备和介质,预先将数据库中的数据进行序列化,并存储至目标存储设备,且在数据库更新时,将更新的数据序列化后存储至目标存储设备,这样当数据使用方需要读取数据时,直接从目标存储设备进行数据读取,而不需要全量读取至内存后,进行过滤以及序列化处理,提高了处理速度。
附图说明
图1为一个实施例中基于目标存储设备的数据存储方法的应用场景图;
图2为一个实施例中基于目标存储设备的数据存储方法的流程示意图;
图3为一个实施例中基于目标存储设备的数据存储装置的结构框图;
图4为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的基于目标存储设备的数据存储方法,可以应用于如图1所示的应用环境中。其中,服务器102与数据库104和目标存储设备106相通信,其中,服务器102可以从队列中获取数据库更新信息,该数据库更新信息是对数据库进行更新后所生成的,并存储至队列中的,服务器102生成与文件标识对应的互斥锁,互斥锁用于禁止其他方对文件标识所对应的文件的写操作,服务器102根据数据库更新信息读取更新数据;将更新数据序列化后写入目标存储设备,目标存储设备中存储的数据用于数据使用方的读取。具体地,参见图1所示,其中数据库更新服务:常规的定期更新数据库的服务,只需确保每次更新完某个表的数据后,把全量或增量更新信息发给队列MQ,服务器104可以是多个,从队列MQ接收更新数据的任务,通过DataFrame缓存读写模块,更新目标存储设备。其中DataFrame缓存读写模块是位于服务器中,其属于DataFrame缓存刷新服务和数据使用方的内部模块,提供缓存数据更新状态、缓存数据更新互斥锁、缓存数据删除、缓存数据完整性检查、缓存数据读取和切片等功能。将目标存储设备底层ndarray数据文件,和内存中的DataFrame内存数据在存取时候的各种操作进行了实现。数据使用方(可以是多个)是需要读取DataFrame缓存数据的程序。
其中,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。数据库、队列、目标存储设备:都是常规的组件,可以是任意数据库、队列、和可挂载到多个服务器上的目标存储设备。
在一个实施例中,如图2所示,提供了一种基于目标存储设备的数据存储方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
S202:获取数据库更新信息,数据库更新信息携带有文件标识。
具体地,数据库中存储了数据使用方需要使用的数据,例如业务数据等,在此不做具体限制。
其中数据库更新服务可以对数据库中的数据进行更新,包括但不限于增加数据、修改数据和删除数据。数据库更新服务在数据库中的数据更新后,获取数据库的更新信息,并将更新信息发送至缓存更新服务。
其中数据库更新服务可以是在每次更新完数据库中某个表的数据后,将全量或增量的更新信息发送给任务队列,例如MQ,从而缓存更新服务可以从MQ接收更新数据的任务,通过DataFrame缓存读写模块,更新目标存储设备。在其他的实施例中,可以在数据库更新服务中开发一个HTTP服务,在数据库更新服务空闲时,即数据库没有更新时,向HTTP服务查询是否存在没有同步到目标存储设备的更新数据,若是存在,则获取更新信息,以便于知道后续数据同步。
文件标识是指更新的数据所对应的文件的标识,例如对应的数据表的名称等。其中文件在此处仅是为了说明数据库中的数据是存在不同的存储片区的。
S204:生成与文件标识对应的互斥锁,互斥锁用于禁止其他方对文件标识所对应的文件的写操作。
具体地,互斥锁是用于表征正在对文件标识对应的文件进行更新操作的标识,其中该互斥锁用于禁止其他方对文件标识所对应的文件的写操作,但不影响对文件标识所对应的文件的读操作。其中由于目标存储设备是可以支持多个缓存更新服务并行更新的,即可以并行更新不同的数据集到nas盘,但是同一个文件,是不能并行更新的,否则就重复更新重复写入nas盘文件,还有同时写入的问题,所以需要有互斥锁。这样写互斥锁可以部署在独立的docker容器中,docker容器id是可以唯一标识缓存更新服务的,如果没有部署到容器,也可设置唯一标识,用于更新互斥。
S206:根据数据库更新信息读取更新数据。
具体地,更新数据是指本次数据库修改、增加或删除的数据。其中对于首次从数据库中的某个文件读取数据,则该更新数据即为全量数据,后续的更新,则该数据为增量数据。
例如将每天收盘后新增当天的股票行情数据到数据库,同时修正或删除了7天前股票行情数据到数据库。则更新信息包括本次更新的流水id、更新的表名、更新的最早日期(7天前的日期),而读取更新数据,则是根据更新信息生成SQL语句,查询7天前(含)至今的所有股票行情数据。
S208:将更新数据序列化后写入目标存储设备,目标存储设备中存储的数据用于数据使用方的读取。
具体地,序列化即为将更新数据序列化为目标结构,本实施例中是将更新数据序列化为DataFrame数据,然后将DataFrame数据转换为ndarray数据以存储至目标存储设备。其中,DataFrame的数据每列一个数据文件,如果每列数据类型是一致的,也可以是同一个文件。当然,数据读取的过滤条件也可以是对某些列数据值的过滤。
这样当数据使用方需要读取数据时,则直接从目标存储设备读取数据,从而可以提高效率。
具体地,由于ndarray和DataFrame数据可以快速相互转换,且无需序列化,而numpy提供了对ndarray数据文件的存取方法,且ndarray数据文件,可以存储为全C语言格式的数组数据,性能比被python格式封装过的DataFrame数据在存取时更高效。即使个别DataFrame数据值被强制设成python object对象,如字符串数据,也可以简单地使用高效的numpy数据格式转换,将其转成C语言的字符串数组,因此采用ndarray数据来实现数据的存储。
此外需要说明的是,C语言格式的数组数据,能够在数据文件读取前定位到所需的过滤后的数据所在文件位置的定位,以避免需要全量加载数据到内存才能对数据过滤的性能问题。这样在读取数据的时候全量读取DataFrame的行、列索引对应的ndarray文件,文件大小相对DataFrame的数据值对应的ndarray文件要小得多,因为比如m行n列的DataFrame,行、列索引数据量是m+n,而数据值文件的数据量是m*n,对行、列索引进行过滤得到所需数据值的行、列位置,最后取数据值的时候,就能通过位置,只读取所需的数据了,不需要序列化等,提高了读取的速度。
其中,该目标存储设备可以为NAS盘或者是内存,通过NAS盘作为ndarray数据文件载体的方式,可共享给集群中的所有服务器,且读写速度快、成本低。而通过内存,则可以提高读取速度。
上述基于目标存储设备的数据存储方法,预先将数据库中的数据进行序列化,并存储至目标存储设备,且在数据库更新时,将更新的数据序列化后存储至目标存储设备,这样当数据使用方需要读取数据时,直接从目标存储设备进行数据读取,而不需要全量读取至内存后,进行过滤以及序列化处理,提高了处理速度。
在其中一个实施例中,将更新数据序列化后写入目标存储设备,包括:根据更新数据从目标存储设备读取差分数据;将序列化后的更新数据和差分数据进行合并后存储至目标存储设备。
具体地,差分数据是指根据更新数据来确定的,其中由于目标存储设备中存储了一部分数据,且目标存储设备是连续存储数据的,因此每次将更新数据存储至目标存储设备时,缓存更新服务先根据更新数据从目标存储设备中读取差分数据,即未被修改、删除的数据,然后将该些数据与序列化后的更新数据进行合并后存储至目标存储设备。且删除掉旧数据,例如非第一次更新时。另外,存储完成后,缓存更新服务还释放互斥锁,优选地,在释放互斥锁之前,还将MQ中对应的任务状态更新至目标存储设备中。
此外,可选地,目标存储设备中可以设置至少两个存储区,这样每次对其中一个存储区的数据进行数据更新服务,且在该存储区的数据更新完成后,则可以全量或者是增量读取更新的数据,然后将全量数据存储至其他的存储区,或者是根据增量数据从其他存储区读取差分数据,然后合并后得到全量数据,并存储至对应的存储区。在存储完成后,仍需要删除旧数据,且若是存在互斥锁,则对应释放互斥锁。
此外,需要说明的是可以通过MQ更新任务序号标识最近数个MQ更新任务的序号,避免在配置了多个更新服务的环境下,重复更新。
上述实施例中,在更新的时候,进行增量更新,且由于目标存储设备是连续存储的,且是以ndarray格式存储,因此可以获取差分数据,进行合并后存储至目标存储设备。
在其中一个实施例中,将更新数据序列化后写入目标存储设备,包括:获取更新数据对应的文件的读取速度;根据读取速度确定对应的目标存储设备;将更新数据序列化后存储至所确定的目标存储设备中。
具体地,读取速度是指数据使用方后续使用数据时的读取速度,对于一些数据,数据方需要更快的速度读取数据缓存文件,因此在数据写入目标存储设备时,则根据更新数据对应的文件的读取速度进行目标存储设备的划分,例如读取速度高的则存储至内存路径下,例如放到Linux内存文件路径下(一般默认会映射到/dev/shm路径下,同一个宿主机的docker能够共享),速度会比NAS盘更快,往往在1、2毫秒内能读取大量数据。读取速度小的,则存储至NAS盘中。
上述实施例中,充分考虑到数据的读取速度,例如在服务器内存资源足够多的情况下,可以将读取速度需求快的数据存储至内存中,以提高数据使用方读取数据的速度。此外,若是不考虑读取速度,则仅需一个NAS盘,成本低。
在其中一个实施例中,生成与文件标识对应的互斥锁,包括:判断是否存在与文件标识对应的锁文件;当不存在与文件标识对应的锁文件,则生成互斥锁;当存在与文件标识对应的锁文件,则判断锁文件对应的互斥锁是否超时;当锁文件对应的互斥锁超时,则生成互斥锁;当锁文件对应的互斥锁未超时,则延时一段时间后,继续判断是否存在与文件标识对应的锁文件,直至生成互斥锁。
具体地,缓存更新服务可以配置多个并行、互斥地执行更新任务,是基于互斥锁和MQ更新任务序号技术。互斥锁是用于表征正在对文件标识对应的文件进行更新操作的标识。
其中在读取更新数据之前,先判断是否有该更新数据DataFrame的对应的nas盘的互斥更新锁文件,若是不存在更新锁文件,写入锁文件(例如,写入缓存更新服务自己id和当前时间戳),若是存在更新锁文件,先判断是否锁文件超时,当更新所文件超时时,则强制获取到锁并写入锁文件;当所文件未超时但锁拥有者是缓存更新服务自身的id,则能获取到锁,否则不能获取到锁,该DataFrame的更新任务会延迟更新,例如延时一段时间后,重新获取到锁文件,并继续上述的判断,直到获取到锁。
此外,在获取到锁文件后,缓存更新服务还通过MQ中的任务序号来判断该任务是否更新过,若还没更新过,则需要更新,即获取更新数据;若是已经被其他缓存更新服务更新过,则不更新,从而缓存更新服务释放更新互斥锁,更新该表对应的NAS缓存任务流程结束。
上述实施例中,通过互斥锁使得缓存更新服务可以多个并行、互斥地执行更新任务,避免多个DataFrame缓存更新服务同时更新同一个DataFrame,记录了docker容器id或其他唯一标识刷新服务的编号。
在其中一个实施例中,上述基于目标存储设备的数据存储方法还包括:接收数据读取指令,根据数据读取指令获取行列索引;根据行列索引从目标存储设备读取对应的切片数据,并将所读取的切片数据反馈给数据使用方。
具体地,该实施例主要是介绍数据的读取过程。其中行列索引是在目标存储设备中数据的行列索引,其可以是通过DataFrame的行列索引进行表征,该行列索引是在每次文件更新至目标存储设备后进行更新得到。其中数据使用方在读取数据的时候,先根据数据读取指令全量读取行列索引,然后根据数据读取指令中的字段或者是行列索引的标识以及全量的行列索引来确定切片数据的位置,进而根据该切片数据的位置来全量读取切片数据,以反馈给数据使用方。
另外,需要说明的是可以存在多个数据使用方,以并行的方式接收数据读取指令,并根据数据读取指令并行查询数据,以反馈给对应的数据使用方。
上述实施例中,一方面,从数据库读取的数据需要耗时进行序列化,而从DataFrame缓存中读取的话,耗时几乎全在网络数据传输上,并不需要序列化;另一方面,当数据总量非常大,而所需读取的数据相对较小时,通过ndarray数据切片读取相对常规的DataFrame数据文件需要全量加载到内存中才能切片的耗时,往往是忽略不计的。
在其中一个实施例中,目标存储设备包括至少两个存储区,且每个存储区中的文件均携带有结束时间戳;根据行列索引从目标存储设备读取对应的切片数据,包括:根据结束时间戳确定文件对应的目标存储区;根据行列索引从目标存储区读取对应的切片数据。
具体地,为了不影响使用方读取数据,在目标存储设备中设置至少两个存储区,本实施例中以两个存储区为例进行说明,同一份完整数据是在同一个区的,一般只有在更新的过程中,两个区的数据会同时存在。每次更新,都会保留更新前DataFrame对应的ndarray数据文件所在区,在另一个区进行数据写入,当写入完更新结束时间戳文件后,才删除更新前所在区的ndarray数据文件。
结束时间戳可以用于在读取数据是判断最新版本的数据所处的存储区,也即目标存储区。其是在每次更新最后写入的文件,并且文件中的时间戳值,是写入前一瞬间获取的时间戳。
具体地,以存在两个存储区A区和B区为例进行说明,读取数据的时候,通过A、B的结束时间戳,判断最新数据是在A区还是B区,若是两个区都没数据,表示并没NAS盘缓存文件,只能从数据库读,或者抛出异常;只有A区(或B区)有结束时间戳,认为数据在A区,读A区(或B区);两个区都有数据,这种情况只会发生在更新完成新数据,还没删除旧数据的一霎那,或在这一霎那更新服务宕机,此时读取时间戳更大的一个作为目标存储区,并读取目标存储区的文件。
上述实施例中,通过结束时间戳来判断数据的存储区,可以保证每次读取的数据都是最新的数据。
在其中一个实施例中,每个存储区中的文件还均携带有开始时间戳;根据行列索引从目标存储设备读取对应的切片数据之后,还包括:判断目标存储区的开始时间戳是否大于结束时间戳;当目标存储区的开始时间戳大于结束时间戳,则重新根据行列索引从目标存储设备读取对应的切片数据。
具体地,开始时间戳是所有更新写入文件中最早写入的一个文件,里面的时间戳值,是写入前一瞬间获取的时间,通过开始时间戳和结束时间戳可以判断数据的完整性。
具体地,在生成完新区数据,删除老区数据的那一瞬间,有数据使用方读取了一半不完整的更新前的数据,则数据使用方可通过读不到被删除的部分数据或通过更新开始时间戳(最后读取)、结束时间戳(最先读取)来判断数据完整性的方式,例如数据使用方把某个区的所有数据读取完后,最后读取开始时间戳,当开始时间戳大于结束时间戳,说明在读取的过程中,这个区的数据文件发生了变化,数据并非某一时刻的完整版本,所以这时候需要尝试重复地从头开始读取。
上述实施例中,通过时间戳来判断数据的完整性,保证每次读取的数据是最新的数据。
具体地,在一个详细的实施例中,请结合图1,该基于目标存储设备的数据存储方法可以包括:
数据库的更新服务更新数据库,完成更新后将更新消息发送到队列MQ;DataFrame缓存更新服务,即上文中的服务器收到队列MQ消息,然后尝试获取对该表数据的更新互斥锁,若未获取到,该表的更新任务继续在服务内部的任务队列中延时再次尝试获取锁,直到获取到锁;服务器使用DataFrame读写模块读取NAS盘是否更新过该MQ中的更新任务,若更新过,释放更新互斥锁,更新该表对应的NAS缓存任务流程结束;服务器从数据库读取相应的更新数据;通过DataFrame读写模块将更新数据写入NAS盘后,删除旧数据(若不是第一次更新),记录本次队列任务更新完成的状态到NAS盘,最后释放更新互斥锁;服务器将消息消费成功的ACK消息发送给队列MQ,该数据库表的缓存同步更新流程结束。
其中,服务器可以配置多个并行、互斥地执行更新任务,是基于如下的更新互斥锁和队列MQ更新任务序号技术。缓存使用方,可随时读取数据,即使在缓存更新的过程中也可以,是因为使用了如下A/B区缓存更新的技术。每个不同的DataFrame数据,NAS盘存储的ndarray文件及其说明如下(按写入先后顺序排):
其中更新互斥锁避免多个DataFrame缓存更新服务同时更新同一个DataFrame,记录了docker容器id或其他唯一标识刷新服务的编号,以及获取到锁的时间戳(以免服务意外宕机,可使用超时机制来释放锁的问题)。更新开始时间戳可以用于和更新结束时间戳一起,判断数据完整性用,即当且仅当开始时间戳早于结束时间戳时,数据才是完整的;DataFrame的行索引:取数据时候,先全量读取行、列索引,确定对数据的切片位置,以免全量读取数据;DataFrame的列索引:作用和行索引类似;DataFrame的数据的每列一个数据文件,如果每列数据类型是一致的,也可以是同一个文件。当然,数据读取的过滤条件也可以是对某些列数据值的过滤;更新结束时间戳:除了和开始时间戳一起用于判断完整性,还用于在读取数据时候判断最新版本的数据在A区还是B区;MQ更新任务序号:标识最近数个MQ更新任务的序号,避免在配置了多个更新服务的环境下,重复更新。
为了能够在更新的过程中,不影响数据使用方读取数据,上述数据存储过程中是会分成A区和B区两个区,同一份完整数据是在同一个区的,一般只有在更新的过程中,两个区的数据会同时存在。每次更新,都会保留更新前DataFrame对应的ndarray数据文件所在区,在另一个区进行数据写入,当写入完更新结束时间戳文件后,才删除更新前所在区的ndarray数据文件。如果正巧在生成完新区数据,删除老区数据的那一瞬间,有数据使用方读取了一半不完整的老区数据,读取方可通过读不到被删除的部分数据或通过更新开始时间戳(最后读取)、结束时间戳(最先读取)来判断数据完整性的方式,判断是否正确获取到了数据,若没有,则会重试尝试读取若干次即可获取到最新版本的完整数据。
需要强调的是,为进一步保证上述数据库更新信息的私密和安全性,上述数据库更新信息还可以存储于一区块链的节点中。
应该理解的是,虽然图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图3所示,提供了一种基于目标存储设备的数据存储装置,包括:更新信息获取模块100、互斥锁生成模块200、更新数据读取模块300和存储模块400,其中:
更新信息获取模块100,用于获取数据库更新信息,数据库更新信息携带有文件标识;
互斥锁生成模块200,用于生成与文件标识对应的互斥锁,互斥锁用于禁止其他方对文件标识所对应的文件的写操作;
更新数据读取模块300,用于根据数据库更新信息读取更新数据;
存储模块400,用于将更新数据序列化后写入目标存储设备,目标存储设备中存储的数据用于数据使用方的读取。
在其中一个实施例中,上述的存储模块400包括:
差分数据读取单元,用于根据更新数据从目标存储设备读取差分数据;
合并单元,用于将序列化后的更新数据和差分数据进行合并后存储至目标存储设备。
在其中一个实施例中,上述的存储模块400包括:
读取速度获取单元,用于获取更新数据对应的文件的读取速度;
目标存储设备确定单元,用于根据读取速度确定对应的目标存储设备;
存储单元,用于将更新数据序列化后存储至所确定的目标存储设备中。
在其中一个实施例中,上述的互斥锁生成模块200包括:
第一判断单元,用于判断是否存在与文件标识对应的锁文件;
第一互斥锁生成单元,用于当不存在与文件标识对应的锁文件,则生成互斥锁;
第二判断单元,用于当存在与文件标识对应的锁文件,则判断锁文件对应的互斥锁是否超时;
第二互斥锁生成单元,用于当锁文件对应的互斥锁超时,则生成互斥锁;
第三互斥锁生成单元,用于当锁文件对应的互斥锁未超时,则延时一段时间后,继续判断是否存在与文件标识对应的锁文件,直至生成互斥锁。
在其中一个实施例中,上述基于目标存储设备的数据存储装置还包括:
接收模块,用于接收数据读取指令,根据数据读取指令获取行列索引;
反馈模块,用于根据行列索引从目标存储设备读取对应的切片数据,并将所读取的切片数据反馈给数据使用方。
在其中一个实施例中,目标存储设备包括至少两个存储区,且每个存储区中的文件均携带有结束时间戳;上述反馈模块包括:
存储区获取单元,用于根据结束时间戳确定文件对应的目标存储区;
切片数据读取单元,用于根据行列索引从目标存储区读取对应的切片数据。
在其中一个实施例中,每个存储区中的文件还均携带有开始时间戳;上述的反馈模块还可以包括:
第三判断单元,用于判断目标存储区的开始时间戳是否大于结束时间戳;
上述的切片数据读取单元还用于当目标存储区的开始时间戳大于结束时间戳,则重新根据行列索引从目标存储设备读取对应的切片数据。
关于基于目标存储设备的数据存储装置的具体限定可以参见上文中对于基于目标存储设备的数据存储方法的限定,在此不再赘述。上述基于目标存储设备的数据存储装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图4所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储数据库更新信息。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于目标存储设备的数据存储方法。
本领域技术人员可以理解,图4中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现以下步骤:获取数据库更新信息,数据库更新信息携带有文件标识;生成与文件标识对应的互斥锁,互斥锁用于禁止其他方对文件标识所对应的文件的写操作;根据数据库更新信息读取更新数据;将更新数据序列化后写入目标存储设备,目标存储设备中存储的数据用于数据使用方的读取。
在一个实施例中,处理器执行计算机程序时所实现的将更新数据序列化后写入目标存储设备,包括:根据更新数据从目标存储设备读取差分数据;将序列化后的更新数据和差分数据进行合并后存储至目标存储设备。
在一个实施例中,处理器执行计算机程序时所实现的将更新数据序列化后写入目标存储设备,包括:获取更新数据对应的文件的读取速度;根据读取速度确定对应的目标存储设备;将更新数据序列化后存储至所确定的目标存储设备中。
在一个实施例中,处理器执行计算机程序时所实现的生成与文件标识对应的互斥锁,包括:判断是否存在与文件标识对应的锁文件;当不存在与文件标识对应的锁文件,则生成互斥锁;当存在与文件标识对应的锁文件,则判断锁文件对应的互斥锁是否超时;当锁文件对应的互斥锁超时,则生成互斥锁;当锁文件对应的互斥锁未超时,则延时一段时间后,继续判断是否存在与文件标识对应的锁文件,直至生成互斥锁。
在一个实施例中,处理器执行计算机程序时所实现的将更新数据序列化后写入目标存储设备之后,还包括:接收数据读取指令,根据数据读取指令获取行列索引;根据行列索引从目标存储设备读取对应的切片数据,并将所读取的切片数据反馈给数据使用方。
在一个实施例中,处理器执行计算机程序时涉及的目标存储设备包括至少两个存储区,且每个存储区中的文件均携带有结束时间戳;处理器执行计算机程序时所实现的根据行列索引从目标存储设备读取对应的切片数据,包括:根据结束时间戳确定文件对应的目标存储区;根据行列索引从目标存储区读取对应的切片数据。
在一个实施例中,处理器执行计算机程序时所涉及的每个存储区中的文件还均携带有开始时间戳;处理器执行计算机程序时所实现的根据行列索引从目标存储设备读取对应的切片数据之后,还包括:判断目标存储区的开始时间戳是否大于结束时间戳;当目标存储区的开始时间戳大于结束时间戳,则重新根据行列索引从目标存储设备读取对应的切片数据。
在一个实施例中,提供了一种计算机存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取数据库更新信息,数据库更新信息携带有文件标识;生成与文件标识对应的互斥锁,互斥锁用于禁止其他方对文件标识所对应的文件的写操作;根据数据库更新信息读取更新数据;将更新数据序列化后写入目标存储设备,目标存储设备中存储的数据用于数据使用方的读取。
在一个实施例中,计算机程序被处理器执行时所实现的将更新数据序列化后写入目标存储设备,包括:根据更新数据从目标存储设备读取差分数据;将序列化后的更新数据和差分数据进行合并后存储至目标存储设备。
在一个实施例中,计算机程序被处理器执行时所实现的将更新数据序列化后写入目标存储设备,包括:获取更新数据对应的文件的读取速度;根据读取速度确定对应的目标存储设备;将更新数据序列化后存储至所确定的目标存储设备中。
在一个实施例中,计算机程序被处理器执行时所实现的生成与文件标识对应的互斥锁,包括:判断是否存在与文件标识对应的锁文件;当不存在与文件标识对应的锁文件,则生成互斥锁;当存在与文件标识对应的锁文件,则判断锁文件对应的互斥锁是否超时;当锁文件对应的互斥锁超时,则生成互斥锁;当锁文件对应的互斥锁未超时,则延时一段时间后,继续判断是否存在与文件标识对应的锁文件,直至生成互斥锁。
在一个实施例中,计算机程序被处理器执行时所实现的将更新数据序列化后写入目标存储设备之后,还包括:接收数据读取指令,根据数据读取指令获取行列索引;根据行列索引从目标存储设备读取对应的切片数据,并将所读取的切片数据反馈给数据使用方。
在一个实施例中,计算机程序被处理器执行时涉及的目标存储设备包括至少两个存储区,且每个存储区中的文件均携带有结束时间戳;计算机程序被处理器执行时所实现的根据行列索引从目标存储设备读取对应的切片数据,包括:根据结束时间戳确定文件对应的目标存储区;根据行列索引从目标存储区读取对应的切片数据。
在一个实施例中,计算机程序被处理器执行时所涉及的每个存储区中的文件还均携带有开始时间戳;计算机程序被处理器执行时所实现的根据行列索引从目标存储设备读取对应的切片数据之后,还包括:判断目标存储区的开始时间戳是否大于结束时间戳;当目标存储区的开始时间戳大于结束时间戳,则重新根据行列索引从目标存储设备读取对应的切片数据。
本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (10)

1.一种基于目标存储设备的数据存储方法,其特征在于,所述方法包括:
获取数据库更新信息,所述数据库更新信息携带有文件标识;
生成与所述文件标识对应的互斥锁,所述互斥锁用于禁止其他方对所述文件标识所对应的文件的写操作;
根据所述数据库更新信息读取更新数据;
将所述更新数据序列化后写入目标存储设备,所述目标存储设备中存储的数据用于数据使用方的读取。
2.根据权利要求1所述的方法,其特征在于,所述将所述更新数据序列化后写入目标存储设备,包括:
根据所述更新数据从目标存储设备读取差分数据;
将序列化后的更新数据和所述差分数据进行合并后存储至目标存储设备。
3.根据权利要求1所述的方法,其特征在于,所述将所述更新数据序列化后写入目标存储设备,包括:
获取更新数据对应的文件的读取速度;
根据所述读取速度确定对应的目标存储设备;
将更新数据序列化后存储至所确定的目标存储设备中。
4.根据权利要求1至3任意一项所述的方法,其特征在于,所述生成与所述文件标识对应的互斥锁,包括:
判断是否存在与所述文件标识对应的锁文件;
当不存在与所述文件标识对应的锁文件,则生成互斥锁;
当存在与所述文件标识对应的锁文件,则判断所述锁文件对应的互斥锁是否超时;
当所述锁文件对应的互斥锁超时,则生成互斥锁;
当所述锁文件对应的互斥锁未超时,则延时一段时间后,继续判断是否存在与所述文件标识对应的锁文件,直至生成互斥锁。
5.根据权利要求1至3任意一项所述的方法,其特征在于,所述将所述更新数据序列化后写入目标存储设备之后,还包括:
接收数据读取指令,根据所述数据读取指令获取行列索引;
根据所述行列索引从所述目标存储设备读取对应的切片数据,并将所读取的切片数据反馈给数据使用方。
6.根据权利要求5所述的方法,其特征在于,所述目标存储设备包括至少两个存储区,且每个存储区中的文件均携带有结束时间戳;所述根据所述行列索引从所述目标存储设备读取对应的切片数据,包括:
根据所述结束时间戳确定文件对应的目标存储区;
根据所述行列索引从所述目标存储区读取对应的切片数据。
7.根据权利要求6所述的方法,其特征在于,每个存储区中的文件还均携带有开始时间戳;所述根据所述行列索引从所述目标存储设备读取对应的切片数据之后,还包括:
判断所述目标存储区的开始时间戳是否大于结束时间戳;
当所述目标存储区的开始时间戳大于结束时间戳,则重新根据所述行列索引从所述目标存储设备读取对应的切片数据。
8.一种基于目标存储设备的数据存储装置,其特征在于,所述装置包括:
更新信息获取模块,用于获取数据库更新信息,所述数据库更新信息携带有文件标识;
互斥锁生成模块,用于生成与所述文件标识对应的互斥锁,所述互斥锁用于禁止其他方对所述文件标识所对应的文件的写操作;
更新数据读取模块,用于根据所述数据库更新信息读取更新数据;
存储模块,用于将所述更新数据序列化后写入目标存储设备,所述目标存储设备中存储的数据用于数据使用方的读取。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
CN202110742224.XA 2021-06-30 2021-06-30 基于目标存储设备的数据存储方法、装置、设备和介质 Pending CN113342824A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110742224.XA CN113342824A (zh) 2021-06-30 2021-06-30 基于目标存储设备的数据存储方法、装置、设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110742224.XA CN113342824A (zh) 2021-06-30 2021-06-30 基于目标存储设备的数据存储方法、装置、设备和介质

Publications (1)

Publication Number Publication Date
CN113342824A true CN113342824A (zh) 2021-09-03

Family

ID=77481993

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110742224.XA Pending CN113342824A (zh) 2021-06-30 2021-06-30 基于目标存储设备的数据存储方法、装置、设备和介质

Country Status (1)

Country Link
CN (1) CN113342824A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117453707A (zh) * 2023-12-09 2024-01-26 北京镜舟科技有限公司 数据更新方法、装置、电子设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103488581A (zh) * 2013-09-04 2014-01-01 用友软件股份有限公司 数据缓存系统和数据缓存方法
CN104268024A (zh) * 2014-09-24 2015-01-07 浪潮(北京)电子信息产业有限公司 一种实现进程互斥的方法和装置
CN109614372A (zh) * 2018-10-26 2019-04-12 阿里巴巴集团控股有限公司 一种对象存储、读取方法、装置、及业务服务器
CN110851795A (zh) * 2019-11-07 2020-02-28 深圳市四季宏胜科技有限公司 文件管理方法、装置、设备及可读存储介质
CN110941623A (zh) * 2019-11-12 2020-03-31 北京达佳互联信息技术有限公司 数据的同步方法及装置
CN111142804A (zh) * 2019-12-30 2020-05-12 绍兴文理学院 一种用于计算机存储设备的管理系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103488581A (zh) * 2013-09-04 2014-01-01 用友软件股份有限公司 数据缓存系统和数据缓存方法
CN104268024A (zh) * 2014-09-24 2015-01-07 浪潮(北京)电子信息产业有限公司 一种实现进程互斥的方法和装置
CN109614372A (zh) * 2018-10-26 2019-04-12 阿里巴巴集团控股有限公司 一种对象存储、读取方法、装置、及业务服务器
CN110851795A (zh) * 2019-11-07 2020-02-28 深圳市四季宏胜科技有限公司 文件管理方法、装置、设备及可读存储介质
CN110941623A (zh) * 2019-11-12 2020-03-31 北京达佳互联信息技术有限公司 数据的同步方法及装置
CN111142804A (zh) * 2019-12-30 2020-05-12 绍兴文理学院 一种用于计算机存储设备的管理系统

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117453707A (zh) * 2023-12-09 2024-01-26 北京镜舟科技有限公司 数据更新方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
KR20210002574A (ko) 데이터 백업 방법, 저장 매체 및 컴퓨팅 기기
CN108509462B (zh) 一种同步活动事务表的方法及装置
CN111143133B (zh) 虚拟机备份方法和备份虚拟机恢复方法
CN106649403B (zh) 文件存储中的索引实现方法和系统
CN110727724B (zh) 数据抽取方法、装置、计算机设备和存储介质
CN110781214A (zh) 数据库读写方法、装置、计算机设备和存储介质
WO2020151181A1 (zh) 基于区块链的跨平台数据更新方法、装置和计算机设备
CN106612330A (zh) 支持分布式多文件导入的系统及方法
CN113596010B (zh) 一种数据处理方法、装置、节点设备及计算机存储介质
CN106776795B (zh) 基于Hbase数据库的数据写入方法及装置
CN114780641A (zh) 多库多表同步方法、装置、计算机设备和存储介质
CN113342824A (zh) 基于目标存储设备的数据存储方法、装置、设备和介质
CN111966531B (zh) 数据快照方法、装置、计算机设备及存储介质
WO2024114088A1 (zh) 文件的同步方法及装置
CN113609230A (zh) 数据同步异常告警方法、装置、计算机设备和存储介质
CN111309799A (zh) 数据合并的实现方法、装置、系统及存储介质
CN112783866A (zh) 数据读取方法、装置、计算机设备和存储介质
CN115357429A (zh) 恢复数据文件的方法、装置和客户端
CN113590643B (zh) 基于双轨数据库的数据同步方法、装置、设备和存储介质
CN114896335A (zh) 一种数据库的数据转储方法及系统
CN112015821A (zh) 一种数据库同步方法、终端以及存储介质
CN111400243A (zh) 基于流水线服务的研发管理系统以及文件存储方法、装置
CN114297273B (zh) 一种数据抽取方法及装置
CN115730016B (zh) 数据同步方法、系统、装置、计算机设备和存储介质
CN116842029B (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
CB03 Change of inventor or designer information
CB03 Change of inventor or designer information

Inventor after: Huang Qiangsheng

Inventor after: Li Yatao

Inventor before: Zhao Chenxing

Inventor before: Liu Kejia

Inventor before: Chen Zhe

Inventor before: Guan Shengteng

Inventor before: Yang Qixiang

WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20210903