CN111400279A - 数据操作方法、装置和计算机可读存储介质 - Google Patents
数据操作方法、装置和计算机可读存储介质 Download PDFInfo
- Publication number
- CN111400279A CN111400279A CN202010170378.1A CN202010170378A CN111400279A CN 111400279 A CN111400279 A CN 111400279A CN 202010170378 A CN202010170378 A CN 202010170378A CN 111400279 A CN111400279 A CN 111400279A
- Authority
- CN
- China
- Prior art keywords
- data
- metadata
- file
- subfile
- executed
- 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.)
- Granted
Links
Images
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/21—Design, administration or maintenance of databases
- G06F16/217—Database tuning
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种数据操作方法、装置和计算机可读存储介质;本发明实施例可以当接收到数据操作指令时,对该第二元数据文件进行锁定,该第二元数据文件是数据文件对应的元数据文件,该数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件,然后从该数据文件中获取该第二元数据文件对应的目标文件,根据该数据操作指令对该目标文件执行数据操作,得到执行后数据文件,接着,根据该执行后数据文件生成执行后元数据文件,再将该执行后元数据文件替换第一元数据文件,并解除对该第二元数据文件的锁定;该方案可以有效地降低系统的额外开销。
Description
技术领域
本发明涉及通信技术领域,具体涉及一种数据操作方法、装置和计算机可读存储介质。
背景技术
数据库是一个共享资源,可以提供多个用户使用。传统的数据库在支持并发事务访问时,通常会提供不同的数据访问隔离级别来满足应用对数据的使用。目前主要有两种实现方式:基于事务锁的机制和基于并发控制机制。现有技术中,在数据库实现并发控制,往往需要耗费额外的存储空间,带来额外的CPU开销,进而使系统处理能力受到极大影响。因此,需要在实现数据库的并发控制同时,减少系统额外开销。针对这个问题,目前尚未提出非常有效的解决方案。
发明内容
本发明实施例提供一种数据操作方法、装置和计算机可读存储介质,可以有效地降低系统的额外开销。
本发明实施例提供一种数据操作方法,包括:
当接收到数据操作指令时,对所述第二元数据文件进行锁定,所述第二元数据文件是数据文件对应的元数据文件,所述数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件;
从所述数据文件中获取所述第二元数据文件对应的目标文件,根据所述数据操作指令对所述目标文件执行数据操作,得到执行后数据文件;
根据所述执行后数据文件生成执行后元数据文件;
将所述执行后元数据文件替换第一元数据文件,并解除对所述第二元数据文件的锁定。
相应的,本发明实施例还提供一种数据操作装置,包括:
锁定单元,用于当接收到数据操作指令时,对所述第二元数据文件进行锁定,所述第二元数据文件是数据文件对应的元数据文件,所述数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件;
执行单元,用于从所述数据文件中获取所述第二元数据文件对应的目标文件,根据所述数据操作指令对所述目标文件执行数据操作,得到执行后数据文件;
生成单元,用于根据所述执行后数据文件生成执行后元数据文件;
切换单元,用于将所述执行后元数据文件替换第一元数据文件,并解除对所述第二元数据文件的锁定。
可选的,在一些实施例中,所述数据操作指令为数据插入指令,所述数据插入指令携带待插入数据,所述目标文件包括块描述子文件和数据块子文件,所述数据块子文件包括数据块、第一尾块和第二尾块,所述执行单元,具体可以用于从所述数据文件中获取所述第二元数据文件对应的数据块子文件,以及从所述数据块子文件中获取第二尾块;若所述第二尾块为双写尾块,则将待插入数据插入所述数据块子文件,并根据待插入数据的数量对块描述子文件执行数据操作,得到执行后数据文件。
可选的,在一些实施例中,所述执行单元,具体可以用于从所述数据文件中获取所述第二元数据文件对应的数据块子文件,以及从所述数据块子文件中获取第二尾块;若所述第二尾块为双写尾块,则当所述待插入数据小于或等于所述数据块子文件的块容量时,将所述待插入数据插入第一尾块和第二尾块;当所述待插入数据大于所述数据块子文件的块容量时,将所述待插入数据填满所述数据块子文件的数据块,将剩余的待插入数据插入第二尾块,并生成插入标记,并根据待插入数据的数量对块描述子文件执行数据操作,得到执行后数据文件。
可选的,在一些实施例中,所述第二元数据文件包括元描述子文件和元数据子文件,所述生成单元,具体可以用于计算所述执行后数据文件的元信息,根据计算结果和所述插入标记对元描述子文件执行数据操作,得到执行后元描述子文件;根据所述执行后数据文件的元信息索引对元数据子文件执行数据操作,得到执行后元数据子文件;基于所述执行后元描述子文件和所述执行后元数据子文件,生成执行后元数据文件。
可选的,在一些实施例中,所述数据操作指令为数据删除指令,所述数据删除指令携带待删除数据的信息,所述目标文件包括块描述子文件和数据块子文件,所述第二元数据文件包括元数据子文件,所述执行单元,具体可以用于根据所述待删除数据的信息从所述第二元数据文件中确定待删除数据的元数据子文件;基于所述待删除数据的元数据子文件,从所述数据文件中获取所述对应的数据块子文件;将所述待删除数据在所述数据块子文件进行标记删除,得到执行后数据文件。
可选的,在一些实施例中,所述第二元数据文件包括元描述子文件,所述生成单元,具体可以用于对所述待删除数据的元数据子文件进行标记,并将标记的元数据子文件与第二元数据文件的元数据子文件进行或操作,生成执行后删除子文件;计算所述执行后数据文件的元信息,根据计算结果对元描述子文件执行数据操作,得到执行后元描述子文件;根据所述执行后数据文件的元信息索引对元数据子文件执行数据操作,得到执行后元数据子文件;基于所述执行后删除子文件、所述执行后元描述子文件和所述执行后元数据子文件,生成执行后元数据文件。
可选的,在一些实施例中,所述数据操作指令为数据更新指令,所述数据更新指令携带待更新数据的信息,所述目标文件包括块描述子文件和数据块子文件,所述第二元数据文件包括元数据子文件,所述执行单元,具体可以用于根据所述待更新数据的信息从所述第二元数据文件中确定待更新数据的元数据子文件;基于所述待更新数据的元数据子文件,从所述数据文件中获取对应的数据块子文件;将所述待更新数据在所述数据块子文件进行标记更新,得到执行后数据文件。
可选的,在一些实施例中,所述第二元数据文件包括元描述子文件,所述生成单元,具体可以用于对所述待更新数据的元数据子文件进行标记,并将标记的元数据子文件与第二元数据文件的元数据子文件进行与操作,生成执行后更新子文件;计算所述执行后数据文件的元信息,根据计算结果对元描述子文件执行数据操作,得到执行后元描述子文件;根据所述执行后数据文件的元信息索引对元数据子文件执行数据操作,得到执行后元数据子文件;基于所述执行后更新子文件、所述执行后元描述子文件和所述执行后元数据子文件,生成执行后元数据文件。
可选的,在一些实施例中,所述第二元数据文件包括元描述子文件,所述生成单元,具体可以用于对所述待更新数据的元数据子文件进行标记,并将标记的元数据子文件与第二元数据文件的元数据子文件进行与操作,生成执行后更新子文件;计算所述执行后数据文件的元信息,根据计算结果对元描述子文件执行数据操作,得到执行后元描述子文件;根据所述执行后数据文件的元信息索引对元数据子文件执行数据操作,得到初始元数据子文件;若所述初始元数据子文件的块离散度大于或等于预设阈值,则对第一元数据文件和第二元数据文件进行锁定;对所述初始元数据子文件进行整理,根据整理结果生成执行后元数据子文件;基于所述执行后更新子文件、所述执行后元描述子文件和所述执行后元数据子文件,生成执行后元数据文件。
可选的,在一些实施例中,所述生成单元,还可以包括计算子单元,如下:
所述计算子单元,具体用于获取所述初始元数据子文件中已填充数据的元数据块序列,以及空闲的元数据块序列;根据所述已填充数据的元数据块序列和所述空闲的元数据块序列,计算所述初始元数据子文件中块离散度。
可选的,在一些实施例中,所述数据操作指令可以为数据查询指令,所述数据操作装置还可以包括查询单元,所述查询单元可以包括查询子单元和解锁子单元,如下:
查询子单元,用于根据所述数据查询指令从所述数据文件中获取所述第二元数据文件对应的目标文件,从所述目标文件的列中读取对应的查询数据;
解锁子单元,用于解除对所述第二元数据文件的锁定。
可选的,在一些实施例中,所述数据查询指令携带数据查询条件,所述目标文件包括块描述子文件和数据块子文件,所述第二元数据文件包括元描述子文件和元数据子文件,所述查询子单元具体可以用于根据所述数据查询指令从所述数据文件中获取所述第二元数据文件对应的数据块子文件;根据所述元描述子文件和元数据子文件,筛选出满足数据查询条件的元数据块;从所述数据块子文件中获取所述元数据块对应的数据块,从所述数据块的列中读取对应的查询数据。
可选的,在一些实施例中,所述数据操作装置还可以包括存储单元,所述存储单元用于将所述数据文件、以及所述数据文件对应第一元数据文件和第二元数据文件保存在区块链中。
此外,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本发明实施例提供的任一种数据操作方法中的步骤。
此外,本申请实施例还提供一种电子设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本申请实施例提供的任一种数据操作方法中的步骤。
本发明实施例可以当接收到数据操作指令时,对所述第二元数据文件进行锁定,所述第二元数据文件是数据文件对应的元数据文件,所述数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件,然后从所述数据文件中获取所述第二元数据文件对应的目标文件,根据所述数据操作指令对所述目标文件执行数据操作,得到执行后数据文件,接着,根据所述执行后数据文件生成执行后元数据文件,再将所述执行后元数据文件替换第一元数据文件,并解除对所述第二元数据文件的锁定;该方案可以有效地降低系统的额外开销。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本发明实施例提供的数据操作方法的场景示意图;
图1b是本发明实施例提供的数据操作方法的第一流程图;
图1c是本发明实施例提供的系统架构图;
图1d是本发明实施例提供的存储结构图;
图1e是本发明实施例提供的元数据存储结构图;
图1f是本发明实施例提供的数据存储结构图;
图2a是本发明实施例提供的数据操作方法的第二流程图;
图2b是本发明实施例提供的数据插入流程示意图;
图2c是本发明实施例提供的数据插入不跨尾块示意图;
图2d是本发明实施例提供的数据插入跨尾块示意图;
图2e是本发明实施例提供的数据操作方法的第三流程图;
图2f是本发明实施例提供的数据删除流程示意图;
图2g是本发明实施例提供的数据更新流程图;
图2h是本发明实施例提供的数据更新流程图;
图2i是本发明实施例提供的数据操作方法的第四流程图;
图3是本发明实施例提供的数据操作装置的结构示意图;
图4是本发明实施例提供的电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种数据操作方法、装置和计算机可读存储介质。其中,该数据操作装置可以集成在电子设备中,该电子设备可以是服务器,也可以是终端等设备。
例如,参见图1a,首先,该集成了数据操作装置的电子设备可以在接收到客户端发送的数据操作指令时,对该第二元数据文件进行锁定,该第二元数据文件是数据文件对应的元数据文件,该数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件,然后从该数据文件中获取该第二元数据文件对应的目标文件,根据该数据操作指令对该目标文件执行数据操作,得到执行后数据文件,接着,根据该执行后数据文件生成执行后元数据文件,再将该执行后元数据文件替换第一元数据文件,并解除对该第二元数据文件的锁定。
由于该方案对数据的管理采用了两个版本,也就是说对每个数据库中的表,最多可以同时存在两个版本,允许不同的查询请求读取不同版本的数据,也允许在写新版本的同时读取旧版本。通过针对性的设计,主要适合于批量数据处理和即时查询,可以减少了实现的复杂度,支持适度的读写并发,并减少了输入/输出(Input/Output,I/O)和中央处理器(Central Processing Unit,CPU)等开销。该方案技术实现简单,维护成本低,以及不采取阻塞的方法来实现双版本,将双版本的并发读写能力最大化,并且通过尾块不压缩和双写技术,解决小量数据插入导致的频繁消耗CPU和IO问题,还避免引入冗余的数据,与数据修改变化相关的内存和磁盘消耗都是按增量处理,有效地降低系统的额外开销。
以下分别进行详细说明。需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
本实施例将从数据操作装置的角度进行描述,该数据操作装置具体可以集成在电子设备中;其中,该电子设备可以包括手机、平板电脑、笔记本电脑以及个人计算机(Personal Computer,PC)等可以实现数据操作的设备。
一种数据操作方法,包括:当接收到数据操作指令时,对该第二元数据文件进行锁定,该第二元数据文件是数据文件对应的元数据文件,该数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件,然后从该数据文件中获取该第二元数据文件对应的目标文件,根据该数据操作指令对该目标文件执行数据操作,得到执行后数据文件,接着,根据该执行后数据文件生成执行后元数据文件,再将该执行后元数据文件替换第一元数据文件,并解除对该第二元数据文件的锁定。
如图1b所示,该数据操作方法的具体流程可以如下:
首先,可以在预设数据库引擎中创建数据文件、以及该数据文件对应第一元数据文件和第二元数据文件,该第二元数据文件的版本可以与第一元数据文件的版本相同,也可以与第一元数据文件的版本不同。
为了减少系统的额外开销,本申请提出了一种基于双版本并发控制的数据操作方法,为了实现数据库的双版本并发控制(Two-Version Concurrency Control,2VCC),预先在数据库中设置了一种数据库引擎,即预设数据库引擎(NEWDB)。其中,该预设数据库引擎在数据库中所处的位置如图1c所示,NEWDB是实现了2VCC的列式存储引擎,可以在数据库插件式管理下实现数据的增删改查等功能。
其中,NEWDB引擎中的数据分为两个大类:数据文件和元数据文件(简称元文件)。比如,可以在预设数据库引擎中创建数据文件、以及该数据文件对应第一元数据文件和第二元数据文件,以使得数据库可以实现双版本并发控制。其中,该第二元数据文件的版本可以与第一元数据文件的版本不同,也可以与第一元数据文件的版本相同,比如,在本实施例中指的是第二元数据文件是当前最新版本的元数据文件。
其中,数据文件存放的是表中的数据,也就是用户通过结构化查询语言(Structured Query Language,SQL)语句写入的数据。元数据是系统为了管理这些数据文件而维护的数据,例如每个数据块中数据的最大值、最小值、空(NULL)值个数等统计类的信息。假设每个数据页面可以存放16K(也就是16384)条记录,元数据的大小约为数据大小的几百份之一到百分之一。如果用户数据为100TiB,则元数据可能会有1TiB,因此也要避免全部存放到内存中。
比如,如图1d所示,左侧为元文件,右侧为数据文件。左侧的CURRENT-VERSION为版本标识子文件,记录当前版本号(即一个从1开始递增的64位整数)。由于采用的是双版本技术,实际当前版本号为版本号模除以2的值,取值为0或1,也称为奇偶版本。元描述子文件(即文件header.0和header.1)为对应版本的数据的描述,比如数据类型(INT、VARCHAR等)、列名等等,该文件大小不随数据的增大而增大。元数据子文件(即文件blks.meta)文件为针对每个BLOCK的元数据,该文件随着数据文件BLOCK个数的增大而增大,并且由于双版本的存在,可能存在同一个BLOCK的两个元信息(比如blk4.meta.1和blk4.meta.0为同一个BLOCK的当前两个版本元信息)。由于要维护两个版本,blk.meta.0/1为对当前版本BLOCK元文件序列的一个索引和闲置空间索引,由于每个BLOCK的元信息大小相同,可以直接存储对应序号即可。比如,如图1e所示,blk.meta.0内容为:数据序号(0,1,2,7,5,10)和闲置空间序号(4,6,8)。blk.meta.1的内容为:数据序号(0,1,2,3,9,11)和闲置空间序号(4,6,8)),通过序号可以直接定位到文件偏移位置。图1e显示了BLOCK元信息的文件存储结构图,每个块大小相同。空的块为空闲块,箭头索引指示了一个共有6个BLOCK的某一个版本的所有元信息。
其中,右侧数据文件的BLOCK(简称blk)为固定某一行数(例如,16384行)的数据集,数据尾块交替文件写入,这样尾块数据为两份,其他块只保存一份。
其中,对于满BLOCK,数据文件可以采用压缩处理,大大节约存储空间。如图1f所示,数据文件包括块描述子文件(block header)和数据块子文件(block data)。若数据块子文件中的数据块填满数据,可以对该数据块子文件中的数据块进行压缩,得到压缩后数据块子文件(compressedblockdata),由于只对数据块子文件中的数据块进行压缩,则得到压缩后数据块。对于最后一个数据块(即尾块),有可能没有填满数据,每一次插入数据均需切换版本,也就是说新增数据会反复在两个文件的尾部写入,为了防止频繁压缩、解压带来的不必要的消耗,对尾块不再压缩,并采用了“双写技术”,也就是写入时需要同时追加到两个尾块文件。
101、当接收到数据操作指令时,对该第二元数据文件进行锁定。
其中,数据操作指令可以包括数据查询、插入、删除、更新等指令。数据操作指令也可以是数据批量操作指令,比如,数据批量查询指令、数据批量插入指令、数据批量删除指令、数据批量更新指令等。可以理解的是,在后续的说明中,数据查询指令也可以为数据批量查询指令,数据插入指令也可以为数据批量插入指令,数据删除指令也可以为数据批量删除指令,数据更新指令也可以为数据批量更新指令,等等。
比如,可以当接收到客户端发送的数据操作指令时,可以获取表级锁对当前版本进行锁定,即对第二元数据文件进行锁定。当数据操作指令为数据插入指令、数据删除指令、数据更新指令时,可以获取表级锁中的表独占写锁。当数据操作指令为数据查询指令时,可以获取表级锁中的表共享读锁。
其中,表级锁是数据库中的一种锁,表示对当前操作的整张表加锁,分为表共享读锁(共享锁)与表独占写锁(排他锁)。
102、从该数据文件中获取该第二元数据文件对应的目标文件,根据该数据操作指令对该目标文件执行数据操作,得到执行后数据文件。
其中,数据文件可以包括块描述子文件和数据块子文件,元数据文件可以包括版本标识子文件、元描述子文件和元数据子文件。该数据块子文件可以包括数据块、第一尾块和第二尾块。
例如,在一些实施例中,当该数据操作指令为数据插入指令时,该数据插入指令携带待插入数据,具体可以从该数据文件中获取该第二元数据文件对应的数据块子文件,以及从该数据块子文件中获取第二尾块,若该第二尾块为双写尾块,则将待插入数据插入该数据块子文件,并根据待插入数据的数量对块描述子文件执行数据操作,得到执行后数据文件。其中,双写尾块指的是在写入数据时同时追加到两个尾块中。
比如,具体可以判断该第二尾块是否为双写尾块,若该第二尾块为双写尾块,则当该待插入数据小于或等于该数据块子文件的块容量时,将该待插入数据插入第一尾块和第二尾块,当该待插入数据大于该数据块子文件的块容量时,将该待插入数据填满该数据块子文件的数据块,将剩余的待插入数据插入第二尾块,并生成插入标记。若插入数据后,数据块子文件中的数据块填满数据,则如图1f所示,可以对该数据块进行压缩,得到压缩后数据块,大大节约了存储空间。
例如,在一些实施例中,当数据操作指令为数据删除指令时,该数据删除指令携带待删除数据的信息,具体可以根据该待删除数据的信息从该第二元数据文件中确定待删除数据的元数据子文件,基于该待删除数据的元数据子文件,从该数据文件中获取该对应的数据块子文件,将该待删除数据在该数据块子文件进行标记删除,得到执行后数据文件。
例如,在一些实施例中,当数据操作指令为数据更新指令时,该数据更新指令携带待更新数据的信息,具体可以根据该待更新数据的信息从该第二元数据文件中确定待更新数据的元数据子文件,基于该待更新数据的元数据子文件,从该数据文件中获取对应的数据块子文件,将该待更新数据在该数据块子文件进行标记更新,得到执行后数据文件。
103、根据该执行后数据文件生成执行后元数据文件。
例如,在一些实施例中,当该数据操作指令为数据插入指令时,具体可以计算该执行后数据文件的元信息,根据计算结果和该插入标记对元描述子文件执行数据操作,得到执行后元描述子文件,根据该执行后数据文件的元信息索引对元数据子文件执行数据操作,得到执行后元数据子文件,基于该执行后元描述子文件和该执行后元数据子文件,生成执行后元数据文件。
例如,在一些实施例中,当数据操作指令为数据删除指令时,具体可以对该待删除数据的元数据子文件进行标记,并将标记的元数据子文件与第二元数据文件的元数据子文件进行或操作,生成执行后删除子文件,计算该执行后数据文件的元信息,根据计算结果对元描述子文件执行数据操作,得到执行后元描述子文件,根据该执行后数据文件的元信息索引对元数据子文件执行数据操作,得到执行后元数据子文件,基于该执行后删除子文件、该执行后元描述子文件和该执行后元数据子文件,生成执行后元数据文件。
例如,在一些实施例中,当数据操作指令为数据更新指令时,具体可以对该待更新数据的元数据子文件进行标记,并将标记的元数据子文件与第二元数据文件的元数据子文件进行与操作,生成执行后更新子文件,计算该执行后数据文件的元信息,根据计算结果对元描述子文件执行数据操作,得到执行后元描述子文件,根据该执行后数据文件的元信息索引对元数据子文件执行数据操作,得到执行后元数据子文件,基于该执行后更新子文件、该执行后元描述子文件和该执行后元数据子文件,生成执行后元数据文件。
比如,具体可以根据该执行后数据文件的元信息索引对元数据子文件执行数据操作,得到初始元数据子文件,判断该初始元数据子文件的块离散度是否大于预设阈值,若该初始元数据子文件的块离散度大于或等于预设阈值,则对第一元数据文件和第二元数据文件进行锁定,对该初始元数据子文件进行整理,根据整理结果生成执行后元数据子文件,若该初始元数据子文件的块离散度小于预设阈值,则将初始元数据子文件作为执行后元数据子文件,基于该执行后更新子文件、该执行后元描述子文件和该执行后元数据子文件,生成执行后元数据文件。
其中,预设阈值的设定方式可以有很多种,比如,可以根据实际应用的需求灵活设置,也可以预先设置好存储在数据操作装置中。此外,预设阈值可以内置于数据操作装置中,或者,也可以保存在存储器中并发送给数据操作装置,等等。
其中,块离散度的计算方式可以有很多种,比如,具体可以获取该初始元数据子文件中已填充数据的元数据块序列,以及空闲的元数据块序列;根据该已填充数据的元数据块序列和该空闲的元数据块序列,计算该初始元数据子文件中块离散度。
比如,可以假设已填充数据的序列为:X1,X2…XN,空闲空间的序列为:Y1,Y2…YM,定义块离散度系数:
该系数越大越表明离散度越大。可以定义一个阈值(比如,0.1),当超过该阈值时,则该文件需要加排他锁(Exclusive Lock),将读写阻塞,执行数据重整来提高性能。
104、将该执行后元数据文件替换第一元数据文件,并解除对该第二元数据文件的锁定。
例如,具体可以将该执行后元数据文件写入到下一版本的元数据文件,版本标识文件(CURRENT-VERSION)升级(即版本号+1),并释放表级锁,即当数据操作指令为数据插入指令、数据删除指令、数据更新指令时,释放表独占写锁。
例如,在一些实施例中,还可以当接收到数据查询指令时,对该第二元数据文件进行锁定,然后根据该数据查询指令从该数据文件中获取该第二元数据文件对应的目标文件,从该目标文件的列中读取对应的查询数据,并解除对该第二元数据文件的锁定。例如,具体可以当接收到数据查询指令时,可以获取表级锁中的表共享读锁对该第二元数据文件进行锁定,然后根据该数据查询指令从该数据文件中获取该第二元数据文件对应的目标文件,从该目标文件的列中读取对应的查询数据,并解除对该第二元数据文件的锁定,即释放表共享读锁。
比如,该数据查询指令可以携带数据查询条件,具体可以根据该数据查询指令从该数据文件中获取该第二元数据文件对应的数据块子文件,根据该元描述子文件和元数据子文件,筛选出满足数据查询条件的元数据块,从该数据块子文件中获取该元数据块对应的数据块,从该数据块的列中读取对应的查询数据。
需要说明的是,为了提高数据操作的安全性,上述方法中数据存储均保存在区块链中。其中,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。
区块链底层平台可以包括用户管理、基础服务、智能合约以及运营监控等处理模块。其中,用户管理模块负责所有区块链参与者的身份信息管理,包括维护公私钥生成(账户管理)、密钥管理以及用户真实身份和区块链地址对应关系维护(权限管理)等,并且在授权的情况下,监管和审计某些真实身份的交易情况,提供风险控制的规则配置(风控审计);基础服务模块部署在所有区块链节点设备上,用来验证业务请求的有效性,并对有效请求完成共识后记录到存储上,对于一个新的业务请求,基础服务先对接口适配解析和鉴权处理(接口适配),然后通过共识算法将业务信息加密(共识管理),在加密之后完整一致的传输至共享账本上(网络通信),并进行记录存储;智能合约模块负责合约的注册发行以及合约触发和合约执行,开发人员可以通过某种编程语言定义合约逻辑,发布到区块链上(合约注册),根据合约条款的逻辑,调用密钥或者其它的事件触发执行,完成合约逻辑,同时还提供对合约升级注销的功能;运营监控模块主要负责产品发布过程中的部署、配置的修改、合约设置、云适配以及产品运行中的实时状态的可视化输出,例如:告警、监控网络情况、监控节点设备健康状态等。
平台产品服务层提供典型应用的基本能力和实现框架,开发人员可以基于这些基本能力,叠加业务的特性,完成业务逻辑的区块链实现。应用服务层提供基于区块链方案的应用服务给业务参与方进行使用。
由上可知,本实施例可以在接收到数据操作指令时,对该第二元数据文件进行锁定,该第二元数据文件是数据文件对应的元数据文件,该数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件,然后从该数据文件中获取该第二元数据文件对应的目标文件,根据该数据操作指令对该目标文件执行数据操作,得到执行后数据文件,接着,根据该执行后数据文件生成执行后元数据文件,再将该执行后元数据文件替换第一元数据文件,并解除对该第二元数据文件的锁定。由于该方案对数据的管理采用了两个版本,也就是说对每个数据库中的表,最多可以同时存在两个版本,允许不同的查询请求读取不同版本的数据,也允许在写新版本的同时读取旧版本。通过针对性的设计,主要适合于批量数据处理和即时查询,可以减少了实现的复杂度,支持适度的读写并发,并减少了I/O和CPU等开销。该方案技术实现简单,维护成本低,以及不采取阻塞的方法来实现双版本,将双版本的并发读写能力最大化,并且通过尾块不压缩和双写技术,解决小量数据插入导致的频繁消耗CPU和IO问题,还避免引入冗余的数据,与数据修改变化相关的内存和磁盘消耗都是按增量处理,有效地降低系统的额外开销。
根据上一个实施例所描述的方法,以下将举例作进一步详细说明。
在本实施例中,将以该数据操作装置具体集成在电子设备为例进行说明。
首先,可以预先在数据库中设置了一种数据库引擎,并在预设数据库引擎中创建数据文件、以及该数据文件对应第一元数据文件和第二元数据文件,该第二元数据文件的版本可以与第一元数据文件的版本相同,也可以与第一元数据文件的版本不同。其中,数据文件可以包括块描述子文件和数据块子文件,元数据文件可以包括版本标识子文件、元描述子文件和元数据子文件。该数据块子文件可以包括数据块、第一尾块和第二尾块。
其次,基于以上系统可以实现如下操作:
(一)如图2a所示,一种数据操作方法,当接收到数据插入指令时,具体流程可以如下:
201、电子设备在接收到数据插入指令时,对该第二元数据文件进行锁定。
例如,电子设备可以在接收到客户端发送的数据插入指令时,可以获取表独占写锁对当前版本进行锁定,即对第二元数据文件进行锁定,该数据插入指令携带待插入数据。由于要执行到下一版本数据,因此,需要等待读上一版本(也就是当前版本的下一版本)的线程结束。
由于插入涉了对数据库的执行,为了保证数据完整性,是不允许另一个用户同时执行的。为了保证当前读用户的数据完整性,元文件中引入中间文件(文件后缀名为.x),如第一实施例中的执行后元数据文件,或下文的插入后元数据文件等。使用中间文件的好处是为了最大保证数据版本完整性。生成中间文件的过程,有可能是一个时间相当长的过程,中途发生错误,导致文件被写坏,仍然可以回退到当前版本,而不至于损坏前一个版本的元文件。
202、电子设备从该数据文件中获取该第二元数据文件对应的目标文件,根据该数据插入指令对该目标文件进行数据插入,得到插入后数据文件。
例如,如图2b所示,电子设备具体可以从该数据文件中获取该第二元数据文件对应的数据块子文件,以及从该数据块子文件中获取第二尾块,若该第二尾块为双写尾块,则将待插入数据插入该数据块子文件,并根据待插入数据的数量对块描述子文件进行数据插入,得到插入后数据文件。
比如,可以通过元文件header.0/1判断当前尾块是否为双写产生的,若是,则需要修正尾块的BlockHeader,即将当前已写的实际数据条数写入BlockHeader。比如,电子设备具体可以判断该第二尾块是否为双写尾块,若该第二尾块为双写尾块,则当该待插入数据小于或等于该数据块子文件的块容量时,将该待插入数据插入第一尾块和第二尾块。比如,如图2c所示,此次增加数据后,若写不满当前BLOCK(或者刚好写满当前BLOCK),则采用双尾块写入,即追加写入第一尾块(tail.0)(不执行BlockHeader),同时追加写入第二尾块(tail.1)(同时执行BlockHeader)。
当该待插入数据大于该数据块子文件的块容量时,将该待插入数据填满该数据块子文件的数据块,将剩余的待插入数据插入第二尾块,并生成插入标记。比如,如图2d所示,增加数据后,超过当前BLOCK,则采用单尾块写入,填满当前写入尾块为满BLOCK,压缩。追加剩余数据写入tail.1(同时执行BlockHeader)。执行标志到元文件(用来判断下一版本位尾块是否需要从该版本尾块复制)。若插入数据后,数据块子文件中的数据块填满数据,则可以对该数据块进行压缩,得到压缩后数据块,大大节约了存储空间。
203、电子设备根据该插入后数据文件生成插入后元数据文件。
例如,电子设备具体可以计算该执行后数据文件的元信息,根据计算结果和该插入标记对元描述子文件执行数据操作,得到插入后元描述子文件。根据该插入后数据文件的元信息索引对元数据子文件执行数据操作,得到插入后元数据子文件,基于该插入后元描述子文件和该插入后元数据子文件,生成插入后元数据文件。比如,重新计算新增的所有BLOCK的元信息到元信息BLOCK文件(若元数据文件有闲置空间则插入,否则追加)。将此次插入是否为跨尾块等相关元信息存储到中间元文件header.x,即插入后元描述子文件。将新版本的BLOCK元信息索引写入到中间文件blk.meta.x,即插入后元数据子文件。
204、电子设备将该插入后元数据文件替换第一元数据文件,并解除对该第二元数据文件的锁定。
例如,具体可以将该插入后元数据文件写入到下一版本的元数据文件,版本标识文件CURRENT-VERSION升级(即版本号+1),并释放表独占写锁。该阶段不需要等待当前读版本结束。比如,可以将中间文件元数据写入下一版本元文件,释放无效的BLOCK元信息列表空间,为下一次利用,比如,如图1e所示的序号(4,6,8)。该信息保存在blk.meta.0/1。然后,文件CURRENT-VERSION升级(版本号+1)。该功能的执行时间很短,写入执行BLOCK的元文件,可能导致文件写坏,抛出异常,导致上一个版本不能用的问题。但由于当前已经没有其他线程读取上一版本了,故整体不会破坏数据完整性。也就是说,即使上一个版本损坏了,也不影响将来的使用,因为当前版本没有问题。后面进来的线程也会读取当前版本,不会使用上一个版本的元文件。
(二)如图2e所示,一种数据操作方法,当接收到数据删除指令时,具体流程可以如下:
211、电子设备在接收到数据删除指令时,对该第二元数据文件进行锁定。
例如,电子设备可以在接收到客户端发送的数据删除指令时,可以获取表独占写锁对当前版本进行锁定,即对第二元数据文件进行锁定,该数据删除指令携带待删除数据的信息。比如,可以增加删除位图文件,每个位(bit)代表该行是否被删除,该文件也属于一种元文件。该删除操作不执行数据文件。
212、电子设备从该数据文件中获取该第二元数据文件对应的目标文件,根据该数据删除指令对该目标文件进行标记删除,得到删除后数据文件。
例如,电子设备具体可以根据该待删除数据的信息从该第二元数据文件中确定待删除数据的元数据子文件,基于该待删除数据的元数据子文件,从该数据文件中获取该对应的数据块子文件,将该待删除数据在该数据块子文件进行标记删除,得到删除后数据文件。该删除操作不执行数据文件,删除后数据文件也就是增加删除标记了的数据文件。比如,如图2f所示,根据待删除数据的信息对删除行进行打上位图(bitmap)标记,等等。
213、电子设备根据该删除后数据文件生成删除后元数据文件。
例如,电子设备具体可以对该待删除数据的元数据子文件进行标记,并将标记的元数据子文件与第二元数据文件的元数据子文件进行或操作,生成执行后删除子文件,即中间文件。比如,将删除的bitmap与当前版本delete.0文件进行或操作,并存入中间文件。然后,电子设备可以计算该执行后数据文件的元信息,根据计算结果对元描述子文件执行数据操作,得到删除后元描述子文件,根据该删除后数据文件的元信息索引对元数据子文件执行数据操作,得到删除后元数据子文件,比如,将有删除操作的BLOCK元信息重新计算,并写入新BLOCK,序号文件存入blk.meta.x中间文件。接着,电子设备可以基于该执行后删除子文件、该删除后元描述子文件和该删除后元数据子文件,生成删除后元数据文件。其中,已经完全删除的元数据子文件可以回收,比如,图2f中的blk3.meta.1、blk4.meta.1、blk5.meta.1对应的数据已经删除完,则可以回收供下次需要插入数据或者其他用途使用,blk2’.meta.0、blk5’.meta.1中只删除部分数据,还有部分未删除,则可以待其数据全部删除完后再进行回收,以提高内存的利用率,节约内存空间。
214、电子设备将该删除后元数据文件替换第一元数据文件,并解除对该第二元数据文件的锁定。
例如,具体可以将该删除后元数据文件写入到下一版本的元数据文件,版本标识文件CURRENT-VERSION升级(即版本号+1),并释放表独占写锁。因为要执行到下一个版本数据(由于双版本的特性,当前版本的下一个也就是当前版本的上一个版本),需要等待读上一版本(也就是当前版本的下一版本)的线程结束。然后,将中间文件元数据写入下一版本元文件,版本文件CURRENT-VERSION升级(版本号+1)。
(三)如图2g所示,一种数据操作方法,当接收到数据更新指令时,具体流程可以如下:
221、电子设备在接收到数据更新指令时,对该第二元数据文件进行锁定。
例如,电子设备可以在接收到客户端发送的数据更新指令时,可以获取表独占写锁对当前版本进行锁定,即对第二元数据文件进行锁定。该数据更新指令携带待更新数据的信息,
222、电子设备从该数据文件中获取该第二元数据文件对应的目标文件,根据该数据更新指令对该目标文件进行更新,得到更新后数据文件。
例如,电子设备具体可以根据该待更新数据的信息从该第二元数据文件中确定待更新数据的元数据子文件,基于该待更新数据的元数据子文件,从该数据文件中获取对应的数据块子文件,将该待更新数据在该数据块子文件进行标记更新,得到更新后数据文件。比如,根据待更新数据的信息对更新行进行打上bitmap标记,等等。该更新操作实际上是插入和删除的结合,上锁方法与插入一致,具体流程可以见图2h。
223、电子设备根据该更新后数据文件生成更新后元数据文件。
例如,电子设备具体可以对该待更新数据的元数据子文件进行标记,并将标记的元数据子文件与第二元数据文件的元数据子文件进行与操作,生成执行后更新子文件,即中间文件。比如,将更新的bitmap与当前版本delete.0文件进行与操作,并存入中间文件。
然后,电子设备可以计算该更新后数据文件的元信息,根据计算结果对元描述子文件进行更新,得到更新后元描述子文件,根据该更新后数据文件的元信息索引对元数据子文件进行更新,得到更新后元数据子文件,比如,将有更新操作的BLOCK元信息重新计算(包括插入和删除),并存入blk.meta.x中间文件。比如,电子设备具体可以根据该更新后数据文件的元信息索引对元数据子文件进行更新,得到初始元数据子文件,判断该初始元数据子文件的块离散度是否大于预设阈值,若该初始元数据子文件的块离散度大于或等于预设阈值,则对第一元数据文件和第二元数据文件进行锁定,对该初始元数据子文件进行整理,根据整理结果生成更新后元数据子文件,若该初始元数据子文件的块离散度小于预设阈值,则将初始元数据子文件作为更新后元数据子文件。
接着,电子设备可以基于该执行后更新子文件、该更新后元描述子文件和该更新后元数据子文件,生成更新后元数据文件。
其中,块离散度的计算方式可以有很多种,比如,具体可以获取该初始元数据子文件中已填充数据的元数据块序列,以及空闲的元数据块序列;根据该已填充数据的元数据块序列和该空闲的元数据块序列,计算该初始元数据子文件中块离散度。具体可以参考上一实施例。
224、电子设备将该更新后元数据文件替换第一元数据文件,并解除对该第二元数据文件的锁定。
例如,具体可以将该更新后元数据文件写入到下一版本的元数据文件,版本标识文件CURRENT-VERSION升级(即版本号+1),并释放表独占写锁。
(四)如图2i所示,一种数据操作方法,当接收到数据查询指令时,具体流程可以如下:
231、电子设备在接收到数据查询指令时,对该第二元数据文件进行锁定。
例如,电子设备可以在接收到客户端发送的数据查询指令时,可以获取表级锁中的表共享读锁对当前版本进行锁定,即对第二元数据文件进行锁定,该数据查询指令携带数据查询条件。比如,锁定成功后可以根据CURRENT-VERSION文件得到当前版本,作为该连接的版本。将当前连接和版本号写入全局变量。
232、电子设备根据该数据查询指令从该数据文件中获取该第二元数据文件对应的目标文件。
比如,电子设备具体可以根据该数据查询指令从该数据文件中获取该第二元数据文件对应的数据块子文件。比如,读取当前版本元文件header.0和blk.meta.1(假设当前版本为0)。
233、电子设备从该目标文件的列中读取对应的查询数据,并解除对该第二元数据文件的锁定。
例如,电子设备具体可以根据该元描述子文件和元数据子文件,筛选出满足数据查询条件的元数据块,从该数据块子文件中获取该元数据块对应的数据块,从该数据块的列中读取对应的查询数据。比如,电子设备可以根据元数据子文件中对每个数据块中数据的最大值、最小值、NULL值个数等统计类的信息进行过滤,进而读取相关BLOCK元信息和BLOCK数据,作为执行器的输入数据,执行后返回结果。然后,电子设备释放表共享读锁,也就是从全局变量删除当前连接和对应版本号。
由上可知,本实施例可以在接收到数据操作指令时,对该第二元数据文件进行锁定,该第二元数据文件是数据文件对应的元数据文件,该数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件,然后从该数据文件中获取该第二元数据文件对应的目标文件,根据该数据操作指令对该目标文件执行数据操作,得到执行后数据文件,接着,根据该执行后数据文件生成执行后元数据文件,再将该执行后元数据文件替换第一元数据文件,并解除对该第二元数据文件的锁定。由于该方案对数据的管理采用了两个版本,也就是说对每个数据库中的表,最多可以同时存在两个版本,允许不同的查询请求读取不同版本的数据,也允许在写新版本的同时读取旧版本。通过针对性的设计,主要适合于批量数据处理和即时查询,可以减少了实现的复杂度,支持适度的读写并发,并减少了I/O和CPU等开销。该方案技术实现简单,维护成本低,以及不采取阻塞的方法来实现双版本,将双版本的并发读写能力最大化,并且通过尾块不压缩和双写技术,解决小量数据插入导致的频繁消耗CPU和IO问题,还避免引入冗余的数据,与数据修改变化相关的内存和磁盘消耗都是按增量处理,有效地降低系统的额外开销。
为了更好地实施以上方法,相应的,本发明实施例还提供一种数据操作装置,该数据操作装置具体可以集成在终端中,该终端可以包括手机、平板电脑、笔记本电脑以及个人计算机等可以实现数据操作的设备。
例如,如图3所示,该数据操作装置可以包括锁定单元301、执行单元302、生成单元303和切换单元304,如下:
首先,可以在预设数据库引擎中创建数据文件、以及所述数据文件对应第一元数据文件和第二元数据文件,所述第二元数据文件的版本可以与第一元数据文件的版本相同,也可以与第一元数据文件的版本不同。
(1)锁定单元301;
锁定单元301,用于当接收到数据操作指令时,对所述第二元数据文件进行锁定,所述第二元数据文件是数据文件对应的元数据文件,所述数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件。
(2)执行单元302;
执行单元302,用于从所述数据文件中获取所述第二元数据文件对应的目标文件,根据所述数据操作指令对所述目标文件执行数据操作,得到执行后数据文件。
(3)生成单元303;
生成单元303,用于根据所述执行后数据文件生成执行后元数据文件。
(4)切换单元304;
切换单元305,用于将所述执行后元数据文件替换第一元数据文件,并解除对所述第二元数据文件的锁定。
可选的,在一些实施例中,所述数据操作指令可以为数据插入指令,所述数据插入指令携带待插入数据,所述目标文件包括块描述子文件和数据块子文件,所述数据块子文件包括数据块、第一尾块和第二尾块,所述执行单元,具体可以用于从所述数据文件中获取所述第二元数据文件对应的数据块子文件,以及从所述数据块子文件中获取第二尾块;若所述第二尾块为双写尾块,则将待插入数据插入所述数据块子文件,并根据待插入数据的数量对块描述子文件执行数据操作,得到执行后数据文件。
可选的,在一些实施例中,所述执行单元,具体可以用于从所述数据文件中获取所述第二元数据文件对应的数据块子文件,以及从所述数据块子文件中获取第二尾块;若所述第二尾块为双写尾块,则当所述待插入数据小于或等于所述数据块子文件的块容量时,将所述待插入数据插入第一尾块和第二尾块;当所述待插入数据大于或等于所述数据块子文件的块容量时,将所述待插入数据填满所述数据块子文件的数据块,将剩余的待插入数据插入第二尾块,并生成插入标记,并根据待插入数据的数量对块描述子文件执行数据操作,得到执行后数据文件。
可选的,在一些实施例中,所述第二元数据文件包括元描述子文件和元数据子文件,所述生成单元,具体可以用于计算所述执行后数据文件的元信息,根据计算结果和所述插入标记对元描述子文件执行数据操作,得到执行后元描述子文件;根据所述执行后数据文件的元信息索引对元数据子文件执行数据操作,得到执行后元数据子文件;基于所述执行后元描述子文件和所述执行后元数据子文件,生成执行后元数据文件。
可选的,在一些实施例中,所述数据操作指令可以为数据删除指令,所述数据删除指令携带待删除数据的信息,所述目标文件包括块描述子文件和数据块子文件,所述第二元数据文件包括元数据子文件,所述执行单元,具体可以用于根据所述待删除数据的信息从所述第二元数据文件中确定待删除数据的元数据子文件;基于所述待删除数据的元数据子文件,从所述数据文件中获取所述对应的数据块子文件;将所述待删除数据在所述数据块子文件进行标记删除,得到执行后数据文件。
可选的,在一些实施例中,所述第二元数据文件包括元描述子文件,所述生成单元,具体可以用于对所述待删除数据的元数据子文件进行标记,并将标记的元数据子文件与第二元数据文件的元数据子文件进行或操作,生成执行后删除子文件;计算所述执行后数据文件的元信息,根据计算结果对元描述子文件执行数据操作,得到执行后元描述子文件;根据所述执行后数据文件的元信息索引对元数据子文件执行数据操作,得到执行后元数据子文件;基于所述执行后删除子文件、所述执行后元描述子文件和所述执行后元数据子文件,生成执行后元数据文件。
可选的,在一些实施例中,所述数据操作指令可以为数据更新指令,所述数据更新指令携带待更新数据的信息,所述目标文件包括块描述子文件和数据块子文件,所述第二元数据文件包括元数据子文件,所述执行单元,具体可以用于根据所述待更新数据的信息从所述第二元数据文件中确定待更新数据的元数据子文件;基于所述待更新数据的元数据子文件,从所述数据文件中获取对应的数据块子文件;将所述待更新数据在所述数据块子文件进行标记更新,得到执行后数据文件。
可选的,在一些实施例中,所述第二元数据文件包括元描述子文件,所述生成单元,具体可以用于对所述待更新数据的元数据子文件进行标记,并将标记的元数据子文件与第二元数据文件的元数据子文件进行与操作,生成执行后更新子文件;计算所述执行后数据文件的元信息,根据计算结果对元描述子文件执行数据操作,得到执行后元描述子文件;根据所述执行后数据文件的元信息索引对元数据子文件执行数据操作,得到执行后元数据子文件;基于所述执行后更新子文件、所述执行后元描述子文件和所述执行后元数据子文件,生成执行后元数据文件。
可选的,在一些实施例中,所述第二元数据文件包括元描述子文件,所述生成单元,具体可以用于对所述待更新数据的元数据子文件进行标记,并将标记的元数据子文件与第二元数据文件的元数据子文件进行与操作,生成执行后更新子文件;计算所述执行后数据文件的元信息,根据计算结果对元描述子文件执行数据操作,得到执行后元描述子文件;根据所述执行后数据文件的元信息索引对元数据子文件执行数据操作,得到初始元数据子文件;若所述初始元数据子文件的块离散度大于或等于预设阈值,则对第一元数据文件和第二元数据文件进行锁定;对所述初始元数据子文件进行整理,根据整理结果生成执行后元数据子文件;基于所述执行后更新子文件、所述执行后元描述子文件和所述执行后元数据子文件,生成执行后元数据文件。
可选的,在一些实施例中,所述生成单元,还可以包括计算子单元,如下:
所述计算子单元,具体用于获取所述初始元数据子文件中已填充数据的元数据块序列,以及空闲的元数据块序列;根据所述已填充数据的元数据块序列和所述空闲的元数据块序列,计算所述初始元数据子文件中块离散度。
可选的,在一些实施例中,所述数据操作指令可以为数据查询指令,所述数据操作装置还可以包括查询单元,所述查询单元可以包括查询子单元和解锁子单元,如下:
查询子单元,用于根据所述数据查询指令从所述数据文件中获取所述第二元数据文件对应的目标文件,从所述目标文件的列中读取对应的查询数据;
解锁子单元,用于解除对所述第二元数据文件的锁定。
可选的,在一些实施例中,所述数据操作装置还可以包括存储单元,所述存储单元用于将所述数据文件、以及所述数据文件对应第一元数据文件和第二元数据文件保存在区块链中。
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
由上可知,本实施例中可以当接收到数据操作指令时,由锁定单元301对该第二元数据文件进行锁定,该第二元数据文件是数据文件对应的元数据文件,该数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件,然后由执行单元302从该数据文件中获取该第二元数据文件对应的目标文件,根据该数据操作指令对该目标文件执行数据操作,得到执行后数据文件,接着,由生成单元303根据该执行后数据文件生成执行后元数据文件,再由切换单元304将该执行后元数据文件替换第一元数据文件,并解除对该第二元数据文件的锁定。由于该方案对数据的管理采用了两个版本,也就是说对每个数据库中的表,最多可以同时存在两个版本,允许不同的查询请求读取不同版本的数据,也允许在写新版本的同时读取旧版本。通过针对性的设计,主要适合于批量数据处理和即时查询,可以减少了实现的复杂度,支持适度的读写并发,并减少了I/O和CPU等开销。该方案技术实现简单,维护成本低,以及不采取阻塞的方法来实现双版本,将双版本的并发读写能力最大化,并且通过尾块不压缩和双写技术,解决小量数据插入导致的频繁消耗CPU和IO问题,还避免引入冗余的数据,与数据修改变化相关的内存和磁盘消耗都是按增量处理,有效地降低系统的额外开销。
此外,本发明实施例还提供一种电子设备,如图4所示,其示出了本发明实施例所涉及的电子设备的结构示意图,具体来讲:
该电子设备可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403和输入单元404等部件。本领域技术人员可以理解,图4中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器401是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器401可包括一个或多个处理核心;优选的,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
电子设备还包括给各个部件供电的电源403,优选的,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该电子设备还可包括输入单元404,该输入单元404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,电子设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,电子设备中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
当接收到数据操作指令时,对该第二元数据文件进行锁定,该第二元数据文件是数据文件对应的元数据文件,该数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件,然后从该数据文件中获取该第二元数据文件对应的目标文件,根据该数据操作指令对该目标文件执行数据操作,得到执行后数据文件,接着,根据该执行后数据文件生成执行后元数据文件,再将该执行后元数据文件替换第一元数据文件,并解除对该第二元数据文件的锁定。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
由上可知,本实施例可以当接收到数据操作指令时,对该第二元数据文件进行锁定,该第二元数据文件是数据文件对应的元数据文件,该数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件,然后从该数据文件中获取该第二元数据文件对应的目标文件,根据该数据操作指令对该目标文件执行数据操作,得到执行后数据文件,接着,根据该执行后数据文件生成执行后元数据文件,再将该执行后元数据文件替换第一元数据文件,并解除对该第二元数据文件的锁定。由于该方案对数据的管理采用了两个版本,也就是说对每个数据库中的表,最多可以同时存在两个版本,允许不同的查询请求读取不同版本的数据,也允许在写新版本的同时读取旧版本。通过针对性的设计,主要适合于批量数据处理和即时查询,可以减少了实现的复杂度,支持适度的读写并发,并减少了I/O和CPU等开销。该方案技术实现简单,维护成本低,以及不采取阻塞的方法来实现双版本,将双版本的并发读写能力最大化,并且通过尾块不压缩和双写技术,解决小量数据插入导致的频繁消耗CPU和IO问题,还避免引入冗余的数据,与数据修改变化相关的内存和磁盘消耗都是按增量处理,有效地降低系统的额外开销。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本发明实施例还提供一种计算机可读存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的任一种数据操作方法中的步骤。例如,该指令可以执行如下步骤:
当接收到数据操作指令时,对该第二元数据文件进行锁定,该第二元数据文件是数据文件对应的元数据文件,该数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件,然后从该数据文件中获取该第二元数据文件对应的目标文件,根据该数据操作指令对该目标文件执行数据操作,得到执行后数据文件,接着,根据该执行后数据文件生成执行后元数据文件,再将该执行后元数据文件替换第一元数据文件,并解除对该第二元数据文件的锁定。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该计算机可读存储介质中所存储的指令,可以执行本发明实施例所提供的任一种数据操作方法中的步骤,因此,可以实现本发明实施例所提供的任一种数据操作方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本发明实施例所提供的一种数据操作方法、装置和计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (15)
1.一种数据操作方法,其特征在于,包括:
当接收到数据操作指令时,对所述第二元数据文件进行锁定,所述第二元数据文件是数据文件对应的元数据文件,所述数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件;
从所述数据文件中获取所述第二元数据文件对应的目标文件,根据所述数据操作指令对所述目标文件执行数据操作,得到执行后数据文件;
根据所述执行后数据文件生成执行后元数据文件;
将所述执行后元数据文件替换第一元数据文件,并解除对所述第二元数据文件的锁定。
2.根据权利要求1所述的方法,其特征在于,所述数据操作指令为数据插入指令,所述数据插入指令携带待插入数据,所述目标文件包括块描述子文件和数据块子文件,所述数据块子文件包括数据块、第一尾块和第二尾块,所述从所述数据文件中获取所述第二元数据文件对应的目标文件,根据所述数据操作指令对所述目标文件执行数据操作,得到执行后数据文件,包括:
从所述数据文件中获取所述第二元数据文件对应的数据块子文件,以及从所述数据块子文件中获取第二尾块;
若所述第二尾块为双写尾块,则将待插入数据插入所述数据块子文件,并根据待插入数据的数量对块描述子文件执行数据操作,得到执行后数据文件。
3.根据权利要求2所述的方法,其特征在于,所述将待插入数据插入所述数据块子文件,包括:
当所述待插入数据小于或等于所述数据块子文件的块容量时,将所述待插入数据插入第一尾块和第二尾块;
当所述待插入数据大于所述数据块子文件的块容量时,将所述待插入数据填满所述数据块子文件的数据块,将剩余的待插入数据插入第二尾块,并生成插入标记。
4.根据权利要求3所述的方法,其特征在于,所述第二元数据文件包括元描述子文件和元数据子文件,所述根据所述执行后数据文件生成执行后元数据文件,包括:
计算所述执行后数据文件的元信息,根据计算结果和所述插入标记对元描述子文件执行数据操作,得到执行后元描述子文件;
根据所述执行后数据文件的元信息索引对元数据子文件执行数据操作,得到执行后元数据子文件;
基于所述执行后元描述子文件和所述执行后元数据子文件,生成执行后元数据文件。
5.根据权利要求1所述的方法,其特征在于,所述数据操作指令为数据删除指令,所述数据删除指令携带待删除数据的信息,所述目标文件包括块描述子文件和数据块子文件,所述第二元数据文件包括元数据子文件,所述从所述数据文件中获取所述第二元数据文件对应的目标文件,根据所述数据操作指令对所述目标文件执行数据操作,得到执行后数据文件,包括:
根据所述待删除数据的信息从所述第二元数据文件中确定待删除数据的元数据子文件;
基于所述待删除数据的元数据子文件,从所述数据文件中获取所述对应的数据块子文件;
将所述待删除数据在所述数据块子文件进行标记删除,得到执行后数据文件。
6.根据权利要求5所述的方法,其特征在于,所述第二元数据文件包括元描述子文件,所述根据所述执行后数据文件生成执行后元数据文件,包括:
对所述待删除数据的元数据子文件进行标记,并将标记的元数据子文件与第二元数据文件的元数据子文件进行或操作,生成执行后删除子文件;
计算所述执行后数据文件的元信息,根据计算结果对元描述子文件执行数据操作,得到执行后元描述子文件;
根据所述执行后数据文件的元信息索引对元数据子文件执行数据操作,得到执行后元数据子文件;
基于所述执行后删除子文件、所述执行后元描述子文件和所述执行后元数据子文件,生成执行后元数据文件。
7.根据权利要求1所述的方法,其特征在于,所述数据操作指令为数据更新指令,所述数据更新指令携带待更新数据的信息,所述目标文件包括块描述子文件和数据块子文件,所述第二元数据文件包括元数据子文件,所述从所述数据文件中获取所述第二元数据文件对应的目标文件,根据所述数据操作指令对所述目标文件执行数据操作,得到执行后数据文件,包括:
根据所述待更新数据的信息从所述第二元数据文件中确定待更新数据的元数据子文件;
基于所述待更新数据的元数据子文件,从所述数据文件中获取对应的数据块子文件;
将所述待更新数据在所述数据块子文件进行标记更新,得到执行后数据文件。
8.根据权利要求7所述的方法,其特征在于,所述第二元数据文件包括元描述子文件,所述根据所述执行后数据文件生成执行后元数据文件,包括:
对所述待更新数据的元数据子文件进行标记,并将标记的元数据子文件与第二元数据文件的元数据子文件进行与操作,生成执行后更新子文件;
计算所述执行后数据文件的元信息,根据计算结果对元描述子文件执行数据操作,得到执行后元描述子文件;
根据所述执行后数据文件的元信息索引对元数据子文件执行数据操作,得到执行后元数据子文件;
基于所述执行后更新子文件、所述执行后元描述子文件和所述执行后元数据子文件,生成执行后元数据文件。
9.根据权利要求8所述的方法,其特征在于,所述根据所述执行后数据文件的元信息索引对元数据子文件执行数据操作,得到执行后元数据子文件,包括:
根据所述执行后数据文件的元信息索引对元数据子文件执行数据操作,得到初始元数据子文件;
若所述初始元数据子文件的块离散度大于或等于预设阈值,则对第一元数据文件和第二元数据文件进行锁定;
对所述初始元数据子文件进行整理,根据整理结果生成执行后元数据子文件。
10.根据权利要求9所述的方法,其特征在于,所述若所述初始元数据子文件的块离散度大于或等于预设阈值之前,还包括:
获取所述初始元数据子文件中已填充数据的元数据块序列,以及空闲的元数据块序列;
根据所述已填充数据的元数据块序列和所述空闲的元数据块序列,计算所述初始元数据子文件中块离散度。
11.根据权利要求1所述的方法,其特征在于,所述数据操作指令为数据查询指令,所述当接收到数据操作指令时,对所述第二元数据文件进行锁定之后,还包括:
根据所述数据查询指令从所述数据文件中获取所述第二元数据文件对应的目标文件,从所述目标文件的列中读取对应的查询数据;
解除对所述第二元数据文件的锁定。
12.根据权利要求11所述的方法,其特征在于,所述数据查询指令携带数据查询条件,所述目标文件包括块描述子文件和数据块子文件,所述第二元数据文件包括元描述子文件和元数据子文件,所述根据所述数据查询指令从所述数据文件中获取所述第二元数据文件对应的目标文件,从所述目标文件的列中读取对应的查询数据,包括:
根据所述数据查询指令从所述数据文件中获取所述第二元数据文件对应的数据块子文件;
根据所述元描述子文件和元数据子文件,筛选出满足数据查询条件的元数据块;
从所述数据块子文件中获取所述元数据块对应的数据块,从所述数据块的列中读取对应的查询数据。
13.一种数据操作装置,其特征在于,包括:
锁定单元,用于当接收到数据操作指令时,对所述第二元数据文件进行锁定,所述第二元数据文件是数据文件对应的元数据文件,所述数据文件对应两个版本的元数据文件,分别为第一元数据文件和第二元数据文件;
执行单元,用于从所述数据文件中获取所述第二元数据文件对应的目标文件,根据所述数据操作指令对所述目标文件执行数据操作,得到执行后数据文件;
生成单元,用于根据所述执行后数据文件生成执行后元数据文件;
切换单元,用于将所述执行后元数据文件替换第一元数据文件,并解除对所述第二元数据文件的锁定。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行权利要求1至12中任一项所述的数据操作方法中的步骤。
15.一种电子设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求1至12任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010170378.1A CN111400279B (zh) | 2020-03-12 | 2020-03-12 | 数据操作方法、装置和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010170378.1A CN111400279B (zh) | 2020-03-12 | 2020-03-12 | 数据操作方法、装置和计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111400279A true CN111400279A (zh) | 2020-07-10 |
CN111400279B CN111400279B (zh) | 2021-02-12 |
Family
ID=71432376
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010170378.1A Active CN111400279B (zh) | 2020-03-12 | 2020-03-12 | 数据操作方法、装置和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111400279B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112560053A (zh) * | 2020-12-09 | 2021-03-26 | 北京红山信息科技研究院有限公司 | 生产环境数据的保护方法、装置、计算机设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030028695A1 (en) * | 2001-05-07 | 2003-02-06 | International Business Machines Corporation | Producer/consumer locking system for efficient replication of file data |
CN101770515A (zh) * | 2010-01-18 | 2010-07-07 | 杭州顺网科技股份有限公司 | 一种基于数据块比较的数据更新方法 |
CN103336828A (zh) * | 2013-07-05 | 2013-10-02 | 深圳市康拓普信息技术有限公司 | 实时数据库读取及写入方法 |
CN104866497A (zh) * | 2014-02-24 | 2015-08-26 | 华为技术有限公司 | 分布式文件系统列式存储的元数据更新方法、装置、主机 |
CN105808451A (zh) * | 2014-12-29 | 2016-07-27 | 华为技术有限公司 | 一种数据缓存方法以及相关装置 |
CN109947592A (zh) * | 2017-12-20 | 2019-06-28 | 腾讯科技(深圳)有限公司 | 一种数据同步方法、装置以及相关设备 |
CN110825752A (zh) * | 2019-10-16 | 2020-02-21 | 深圳巨杉数据库软件有限公司 | 基于无碎片回收的数据库多版本并发控制系统 |
-
2020
- 2020-03-12 CN CN202010170378.1A patent/CN111400279B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030028695A1 (en) * | 2001-05-07 | 2003-02-06 | International Business Machines Corporation | Producer/consumer locking system for efficient replication of file data |
CN101770515A (zh) * | 2010-01-18 | 2010-07-07 | 杭州顺网科技股份有限公司 | 一种基于数据块比较的数据更新方法 |
CN103336828A (zh) * | 2013-07-05 | 2013-10-02 | 深圳市康拓普信息技术有限公司 | 实时数据库读取及写入方法 |
CN104866497A (zh) * | 2014-02-24 | 2015-08-26 | 华为技术有限公司 | 分布式文件系统列式存储的元数据更新方法、装置、主机 |
CN105808451A (zh) * | 2014-12-29 | 2016-07-27 | 华为技术有限公司 | 一种数据缓存方法以及相关装置 |
CN109947592A (zh) * | 2017-12-20 | 2019-06-28 | 腾讯科技(深圳)有限公司 | 一种数据同步方法、装置以及相关设备 |
CN110825752A (zh) * | 2019-10-16 | 2020-02-21 | 深圳巨杉数据库软件有限公司 | 基于无碎片回收的数据库多版本并发控制系统 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112560053A (zh) * | 2020-12-09 | 2021-03-26 | 北京红山信息科技研究院有限公司 | 生产环境数据的保护方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111400279B (zh) | 2021-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101046821B (zh) | 通用数据库操纵器 | |
CN111209346B (zh) | 一种区块链数据归档方法、装置和计算机可读存储介质 | |
CN111338766B (zh) | 事务处理方法、装置、计算机设备及存储介质 | |
US11442961B2 (en) | Active transaction list synchronization method and apparatus | |
CN111597015B (zh) | 事务处理方法、装置、计算机设备及存储介质 | |
US7895172B2 (en) | System and method for writing data dependent upon multiple reads in a distributed database | |
CN102681836B (zh) | 针对大量并发用户进行扩展的系统和方法 | |
CN112835612A (zh) | 一种基于区块链的电子文档版本管理方法及装置 | |
Mendes et al. | Charon: A secure cloud-of-clouds system for storing and sharing big data | |
US7155464B2 (en) | Recovering and checking large file systems in an object-based data storage system | |
CN111917834A (zh) | 一种数据同步方法、装置、存储介质及计算机设备 | |
CN111190884A (zh) | 数据校验方法、装置和计算机可读存储介质 | |
CN111737227A (zh) | 数据修改方法及系统 | |
Wang et al. | Ess: An efficient storage scheme for improving the scalability of bitcoin network | |
WO2022242372A1 (zh) | 对象处理方法、装置、计算机设备和存储介质 | |
CN117539841B (zh) | 一种分布式文件系统元数据管理系统及其操作方法 | |
CN111400279B (zh) | 数据操作方法、装置和计算机可读存储介质 | |
CN112800066B (zh) | 索引管理的方法、相关设备及存储介质 | |
US20170277754A1 (en) | Information processing apparatus and non-transitory computer readable medium | |
CN113094754B (zh) | 大数据平台数据修改系统及修改、响应、缓存、校验方法 | |
CN113094753A (zh) | 基于区块链的大数据平台hive数据修改方法以及系统 | |
CN115525889B (zh) | 一种安全权限控制方法、装置、电子设备及存储介质 | |
CN116257531B (zh) | 一种数据库空间回收方法 | |
CN113778755B (zh) | 一种数据同步方法、装置、设备及计算机可读存储介质 | |
CN113434359B (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40026379 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |