CN110162525A - 基于b+树的读写冲突解决方法、装置及存储介质 - Google Patents
基于b+树的读写冲突解决方法、装置及存储介质 Download PDFInfo
- Publication number
- CN110162525A CN110162525A CN201910307497.4A CN201910307497A CN110162525A CN 110162525 A CN110162525 A CN 110162525A CN 201910307497 A CN201910307497 A CN 201910307497A CN 110162525 A CN110162525 A CN 110162525A
- Authority
- CN
- China
- Prior art keywords
- root node
- address
- read
- tree
- node address
- 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
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- 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/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据处理技术,提供了一种基于B+树的读写冲突解决方法、装置及存储介质。该方法包括:为目标数据集构建索引文件,该索引文件采用B+树结构且在文件头部记录两次B+树的根节点地址;在对目标数据集执行写操作时,将写操作对应的数据标识、存储地址或删除标识添加到B+树的末尾节点,然后为末尾节点创建各层副本父节点,在各层副本父节点记录子节点地址后,依次修改所述文件头部的根节点地址;在对目标数据集执行读操作时,判断所述文件头部的根节点地址是否相同,若相同,则以任一或默认的所述根节点地址访问根节点,并逐层访问对应的子节点,完成读操作,否则,分别利用所述根节点地址进行读操作,以可用的根节点地址完成读操作。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种基于B+树的读写冲突解决方法、装置及计算机可读存储介质。
背景技术
在数据管理系统中,所有事务均是通过读写操作来存取数据库中的数据资源,当多个事务同时访问同一数据资源时,为了避免可能造成的脏读、幻读等问题,需要对数据资源进行加锁处理。例如,视频直播平台通常会按照一定频率或某种预先确定的方式截取视频中的图片生成缩略图,并将缩略图展示在平台主页或者直播列表中,在更新缩略图的过程中,缩略图文件会被加写锁。在该写锁被释放之前,用户无法正常读取缩略图,可能造成卡顿或读取失败,影响用户体验。随着视频直播平台用户数量的激增,出现这种读写冲突的可能性越来越大。如何克服这种读写冲突,已成为亟待解决的问题。
发明内容
鉴于以上原因,有必要提供一种数据读写冲突的解决方法、装置及计算机可读存储介质,以较小的系统开销解决数据读写冲突,提高用户体验。
为实现上述目的,本发明提供一种基于B+树的读写冲突解决方法,应用于电子装置,该方法包括:
索引构建步骤:为目标数据集构建索引文件,该索引文件采用B+树的数据结构且在文件头部记录两次B+树的根节点地址;
写入步骤:在对所述目标数据集执行写操作时,将所述写操作对应的数据标识、存储地址或删除标识添加到所述B+树的末尾节点,为所述末尾节点创建各层副本父节点,在所述各层副本父节点记录子节点地址后,依次修改所述文件头部的根节点地址;及
读取步骤:在对所述目标数据集执行读操作时,判断所述文件头部的根节点地址是否相同,若相同,则以任一或默认的所述根节点地址访问根节点,并逐层访问对应的子节点,在对应的叶子节点中根据读操作指令中的数据标识获取待读取数据的存储地址或删除标识,并根据获取的存储地址获取待读取数据或根据所述删除标识获知待读取数据的删除状态,完成读操作,否则,分别利用所述根节点地址进行读操作,以可用的根节点地址完成读操作。
优选地,在所述写入步骤中,所述副本父节点包括副本根节点,在所述副本根节点记录子节点地址后,依次将所述文件头部的根节点地址替换为所述副本根节点的地址,将所述副本根节点作为新的根节点。
优选地,所述写操作包括对所述目标数据集的增添、删除和更新修改操作。
优选地,所述根节点地址和子节点地址用指针表示。
优选地,该方法还包括:
为每个相同的所述文件头部的根节点地址分配一个唯一的目标数据集版本号,记录目标数据集版本号、每个版本更新的时间以及对应的根节点地址;
根据版本更新时间和/或目标数据集版本号,利用对应的根节点地址获取对应版本的目标数据集。
本发明还提供一种电子装置,该电子装置包括存储器和处理器,所述存储器中包括数据读写冲突解决程序,所述数据读写冲突解决程序被所述处理器执行时实现如下步骤:
索引构建步骤:为目标数据集构建索引文件,该索引文件采用B+树的数据结构且在文件头部记录两次B+树的根节点地址;
写入步骤:将写操作对应的数据标识、存储地址或删除标识添加到所述B+树的末尾节点,为所述末尾节点创建各层副本父节点,在所述各层副本父节点记录子节点地址后,依次修改所述文件头部的根节点地址;及
读取步骤:在接收到对所述目标数据集的读操作指令时,判断所述文件头部的根节点地址是否相同,若相同,则以任一或默认的所述根节点地址访问根节点,并逐层访问对应的子节点,在对应的叶子节点中根据所述读操作指令中的数据标识获取待读取数据的存储地址或删除标识,并根据获取的存储地址获取待读取数据或根据所述删除标识获知待读取数据的删除状态,完成读操作,否则,分别利用所述根节点地址进行读操作,以可用的根节点地址完成读操作。
优选地,在所述写入步骤中,所述副本父节点包括副本根节点,在所述副本根节点记录子节点地址后,依次将所述文件头部的根节点地址替换为所述副本根节点的地址,将所述副本根节点作为新的根节点。
优选地,所述写操作包括对所述目标数据集的增添、删除和更新修改操作。
优选地,所述根节点地址和子节点地址用指针表示。
优选地,所述数据读写冲突解决程序被所述处理器执行时还实现如下步骤:
为每个相同的所述文件头部的根节点地址分配一个唯一的目标数据集版本号,记录目标数据集版本号、每个版本更新的时间以及对应的根节点地址;
根据版本更新时间和/或目标数据集版本号,利用对应的根节点地址获取对应版本的目标数据集。
本发明还提供一种计算机可读存储介质,该计算机可读存储介质中存储有数据读写冲突解决程序,该数据读写冲突解决程序被处理器执行时实现如上所述的基于B+树的读写冲突解决方法中的任意步骤。
本发明提供的基于B+树的读写冲突解决方法、装置及计算机可读存储介质,通过为目标数据集构建索引文件,在索引文件中采用B+树的数据结构且在文件头部记录两次B+树的根节点地址,然后,在对所述目标数据集执行写操作时,将所述写操作对应的数据标识、存储地址或删除标识添加到所述B+树的末尾节点,为所述末尾节点创建各层副本父节点,在所述各层副本父节点记录子节点地址后,依次修改所述文件头部的根节点地址,将所述根节点地址替换为副本根节点地址,以副本根节点作为新的根节点。同时,在对所述目标数据集执行读操作时,先判断所述文件头部的根节点地址是否相同,若相同,则以任一或默认的所述根节点地址访问根节点,并逐层访问对应的子节点,在对应的叶子节点中根据读操作指令中的数据标识获取待读取数据的存储地址或删除标识,并根据获取的存储地址获取待读取数据或根据所述删除标识获知待读取数据的删除状态,完成读操作,否则,分别利用所述根节点地址进行读操作,以可用的根节点地址完成读操作。在本发明中,所有历史数据均得以保留,在将所述根节点地址全部替换为副本根节点地址之前,用户利用原来的根节点地址正常读取历史数据,在将所述根节点地址全部替换为副本根节点地址之后,用户利用新的根节点地址读取新版本数据。因此,利用本发明,可以解决数据读写冲突,提高用户体验。通过为每个相同的所述文件头部的根节点地址分配一个唯一的目标数据集版本号,本发明还可以实现历史数据回溯。
附图说明
图1为本发明电子装置一实施例的示意图;
图2为图1中数据读写冲突解决程序一实施例的程序模块图;
图3为本发明中B+树及其末尾节点的各层副本父节点的示意图;
图4为本发明基于B+树的读写冲突解决方法一实施例的流程示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚明白,下面将结合若干附图及实施例,对本发明进行进一步的详细说明。应当理解的是,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了便于理解,首先对本发明实施例涉及的技术术语进行解释:
B+树:是一种常用在数据库和文件系统中的数据结构,常用来存储目录或索引信息。B+树包括根节点、各级索引以及多个叶子节点,其中根节点是B+树的入口,通过根节点可以进入B+树。B+树上的各个子节点分为内部节点和叶子节点,根节点和内部节点不保存数据,只用来索引,根节点和内部节点可以统称为非叶子结点。
节点深度:表示任意节点到根节点的路径长度。例如,根节点深度为0,第二层节点深度为1,以此类推。
在本发明中,将存放数据量最小的叶子节点称为B+树的末尾节点,因为B+树是一种平衡树,所以在对B+树进行操作时,末尾节点是可以确定的。将第二层节点称作根节点的第一层子节点,将第三层节点称作根节点的第二层子节点。类似地,叶子节点的各层父节点指的是对应的各层非叶子结点,包括根节点,在此不再赘述。
本发明提供一种电子装置。参照图1所示,为本发明电子装置1一实施例的示意图。在该实施例中,电子装置1利用本发明提供的数据读写冲突解决程序10为目标数据集构建索引文件,并对目标数据集进行读写操作,可以避免读取失败或卡顿。
所述电子装置1可以是服务器、智能手机、平板电脑、便携计算机、桌上型计算机等具有存储和运算功能的终端设备。在一个实施例中,当电子装置1为服务器时,该服务器可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器等的一种或几种。
所述电子装置1包括存储器11、处理器12及网络接口13。
其中,所述存储器11包括至少一种类型的可读存储介质。所述至少一种类型的可读存储介质可为如闪存、硬盘、多媒体卡、卡型存储器等的非易失性存储介质。在一些实施例中,所述可读存储介质可以是所述电子装置1的内部存储单元,例如该电子装置1的硬盘。在另一些实施例中,所述可读存储介质也可以是所述电子装置1的外部存储器11,例如所述电子装置1上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。
在本实施例中,所述存储器11存储所述数据读写冲突解决程序10的程序代码、为目标数据集构建的索引文件等。所述存储器11还可以用于暂时地存储已经输出或者将要输出的数据。本发明中的目标数据集可以存储在所述存储器11中,也可以存储在与所述电子装置1建立通信连接的其他电子设备或系统中。
所述处理器12可以是一中央处理器(Central Processing Unit,CPU),微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码,例如执行数据读写冲突解决程序10等。
网络接口13可以包括标准的有线接口、无线接口(如WI-FI接口)。通常用于在该电子装置1与其他电子设备或系统之间建立通信连接。
图1仅示出了具有组件11-13和数据读写冲突解决程序10的电子装置1。但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
可选地,所述电子装置1还可以包括输入单元比如键盘(Keyboard),语音输入装置比如麦克风(Microphone)等具有语音识别功能的设备以及语音输出装置比如音响、耳机等。用户可以利用这些装置和设备对目标数据集进行读写操作。
可选地,所述电子装置1还可以包括显示器,也可以称为显示屏或显示单元。在一些实施例中可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-Emitting Diode,OLED)显示器等。显示器用于显示在电子装置1中处理的信息以及用于显示可视化的用户界面。
可选地,该电子装置1还包括触摸传感器。所述触摸传感器所提供的供用户进行触摸操作的区域称为触控区域。此外,这里所述的触摸传感器可以为电阻式触摸传感器、电容式触摸传感器等。而且,所述触摸传感器不仅包括接触式的触摸传感器,也可包括接近式的触摸传感器等。此外,所述触摸传感器可以为单个传感器,也可以为例如阵列布置的多个传感器。用户可以通过触摸所述触控区域启动数据读写冲突解决程序10。
该电子装置1还可以包括射频(Radio Frequency,RF)电路、传感器、音频电路、有线接口和无线接口等等,在此不再赘述。
在上述实施例中,处理器12执行存储器11中存储的数据读写冲突解决程序10时可以实现如下步骤:
索引构建步骤:为目标数据集构建索引文件,该索引文件采用B+树的数据结构且在文件头部记录两次B+树的根节点地址;
写入步骤:在对所述目标数据集执行写操作时,将所述写操作对应的数据标识、存储地址或删除标识添加到所述B+树的末尾节点,为所述末尾节点创建各层副本父节点,在所述各层副本父节点记录子节点地址后,依次修改所述文件头部的根节点地址;及
读取步骤:在对所述目标数据集执行读操作时,判断所述文件头部的根节点地址是否相同,若相同,则以任一或默认的所述根节点地址访问根节点,并逐层访问对应的子节点,在对应的叶子节点中根据读操作指令中的数据标识获取待读取数据的存储地址或删除标识,并根据获取的存储地址获取待读取数据或根据所述删除标识获知待读取数据的删除状态,完成读操作,否则,分别利用所述根节点地址进行读操作,以可用的根节点地址完成读操作。
关于上述步骤的详细介绍,请参照下述图2关于数据读写冲突解决程序10实施例的程序模块图以及图4关于读写冲突解决方法实施例的流程图的说明。
在其他实施例中,数据读写冲突解决程序10可以被分割为多个模块,该多个模块被存储于存储器12中,并由处理器13执行,以完成本发明。本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段。
参照图2所示,为图1中数据读写冲突解决程序10一实施例的程序模块图。在本实施例中,所述数据读写冲突解决程序10可以被分割为:索引构建模块110、写入模块120和读取模块130。
所述索引构建模块110,用于为目标数据集构建索引文件。具体地,所述索引文件采用B+树的数据结构,且文件头部重复记录有B+树的根节点地址。我们将多层B+树的根节点和内部结点统称为非叶子结点,所述B+树的非叶子结点中记录有其子节点的子节点地址。所述根节点地址和子节点地址用指针表示,在重复性操作的情况下,使用指针可以明显改善索引文件的读取速度。在本实施例中,可将在前的所述根节点地址称作第一根节点地址,将在后的所述根节点地址称作第二根节点地址,所述目标数据集可以为视频直播平台在网站主页或直播列表中展示的图像构成的集合,这些图像可以为视频直播平台按照一定频率或某种预先确定的方式截取视频图片生成的缩略图,可以为每张缩略图分配一个唯一的数据标识(例如图像编号),将缩略图存储在预先确定的数据库中,然后将缩略图的数据标识、存储地址或删除标识作为索引写入索引文件中。所述删除标识表示对应的数据处于删除状态。
所述写入模块120,用于将写操作对应的数据标识、存储地址或删除标识添加到所述B+树的末尾节点,为所述末尾节点创建各层副本父节点,在所述各层副本父节点记录子节点地址后,依次修改所述文件头部的根节点地址。具体地,写入模块120可以负责对所述目标数据集进行增添(INSERT)、删除(DELETE)和更新修改(UPDATE)操作之后的索引文件的更新操作,也可以在所述电子装置1本地或协助其他具有存储功能的电子设备完成对所述目标数据集的增添、删除和更新修改操作。
在本实施例中,假设所述目标数据集为视频直播平台在网站主页或直播列表中展示的图像构成的集合,在向所述目标数据集增添目标数据,即向图像集合所在数据库中增添缩略图时,所述写入模块120将增添的缩略图对应的数据标识(例如图像编号)、存储地址或删除标识添加到所述B+树的末尾节点中。所述删除标识用于表示对应的数据处于删除状态。因为每个非叶子结点中存有其子节点的子节点地址,所以,当末尾节点发生变动时,作为其各层父节点的非叶子结点记录的子节点地址可能需要发生改变。为了保证数据读取的连贯性,克服读写冲突,在本发明中,我们保留所述末尾节点的各层父节点中记录的子节点地址,并为所述末尾节点创建各层副本父节点,在所述各层副本父节点中记录子节点地址。可以理解的是,所述末尾节点对应的所述各层父节点和各层副本父节点记录的子节点地址可能相同也可能不同,本发明通过为末尾节点创建各层副本父节点来记录对所述目标数据集进行写操作时所述子节点地址可能发生的改变。在所述各层副本父节点,包括副本根节点记录完子节点地址之后,写入模块120依次且连续地将所述第二根节点地址和第一根节点地址修改为新的根节点地址,即副本根节点的根节点地址,所述副本根节点将作为新的根节点,目标数据集完成从旧版本到新版本的替换。在本实施例中,新增添的缩略图将被展示在所述视频直播平台的网站主页或直播列表中。可以理解的是,与所述子节点地址类似,新的根节点地址与原来的根节点地址可能相同也可能不同。
参照图3所示,为本发明中B+树及其末尾节点的各层副本父节点的示意图。图中所示的B+树共有三层,第一层节点为根节点,第三层节点为叶子节点,在对目标数据集执行写操作时,将为索引文件中B+树的末尾节点创建各层副本父节点,然后逐层在所述各层副本父节点记录其子节点的子节点地址,当在副本根节点记录完其子节点地址之后,再依次且连续地修改文件头部的根节点地址,即将所述根节点地址替换为所述副本根节点的地址,替换完成后,副本根节点将作为B+树的新入口,即新的根节点。图中箭头表示各节点中存储的子节点地址对应的指针。
与向所述目标数据集增添目标数据类似,在对所述目标数据集执行更新修改操作时,所述写入模块120将更新修改后的数据对应的数据标识和存储地址添加到所述B+树的末尾节点。在本实施例中,在将索引文件头部的根节点地址替换为副本根节点的地址之后,更新修改后的缩略图将代替原来的缩略图显示在所述视频直播平台的网站主页或直播列表中。
需要说明的是,在对所述目标数据集执行删除操作时,所述写入模块120将删除标识和被删除数据的数据标识添加到所述B+树的末尾节点。在本实施例中,在将索引文件头部的根节点地址替换为副本根节点的地址之后,被删除的缩略图将不再在所述视频直播平台的网站主页或直播列表中显示。
所述读取模块130,用于接收用户发送的数据读取指令,访问目标数据集的索引文件,完成数据读取操作。具体地,所述数据读取指令中包括数据标识,所述读取模块130在接收到用户发送的数据读取指令后,根据所述数据读取指令访问目标数据集的索引文件,先判断索引文件头部的所述第一根节点地址和第二根节点地址是否相同,若相同,则以任一或默认的根节点地址,例如第一根节点地址访问根节点,并逐层访问对应的子节点,在对应的叶子节点中根据所述数据标识获取待读取数据的存储地址或删除标识,并根据获取的存储地址获取待读取数据或根据所述删除标识获知待读取数据的删除状态,完成读操作;若所述第一根节点地址和第二根节点地址不同,则分别利用所述第一根节点地址和第二根节点地址访问对应的根节点,并逐层访问对应的子节点,在对应的叶子节点中根据所述数据标识获取待读取数据的存储地址或删除标识,并根据获取的存储地址获取待读取数据或根据所述删除标识获知待读取数据的删除状态,完成读操作。因为所述第一根节点地址和第二根节点地址是被所述写入模块120依次连续修改的,所以导致所述第一根节点地址和第二根节点地址不同的原因有三种。其一,所述第一根节点地址在修改中;其二,所述第二根节点地址在修改中;其三,所述第一根节点地址和第二根节点地址均修改完成,但在修改过程中发生异常,造成修改后的所述第一根节点地址和第二根节点地址不一致。可以理解的是,前两种情况的持续时间很短,第三种情况发生的概率很小,因此可以不考虑在所述第一根节点地址和第二根节点地址的修改过程中均发生异常的情况,在所述第一根节点地址和第二根节点地址不一致的情况下,有且只有一个根节点地址处于可用状态,故用户随时可以完成对所述目标数据集的读操作,不会由于读写冲突造成读取失败或卡顿。
需要说明的是,在对所述目标数据集执行完删除操作后,即在将索引文件头部的根节点地址替换为副本根节点的地址之后,当所述读取模块130在接收到用户发送的对被删除数据的数据读取指令时,将根据所述数据读取指令访问目标数据集的索引文件,并根据所述数据读取指令中的数据标识获取到删除标识,提示待读取数据已被删除,无法显示。
在另一个实施例中,所述数据读写冲突解决程序10还可以包括版本记录模块和历史数据回溯模块。例如,所述版本记录模块可以为每个相同的所述文件头部的根节点地址分配一个唯一的目标数据集版本号,记录目标数据集版本号、每个版本更新的时间以及对应的根节点地址,将记录的记录目标数据集版本号、每个版本更新的时间以及对应的根节点地址存储在所述存储器11中;所述历史数据回溯模块可以根据版本更新时间和/或目标数据集版本号,利用对应的根节点地址获取对应版本的目标数据集,对历史数据进行回溯。
此外,本发明还提供一种基于B+树的读写冲突解决方法。参照图4所示,为本发明基于B+树的读写冲突解决方法的一实施例的流程示意图。电子装置1的处理器12执行存储器11中存储的数据读写冲突解决程序10时实现基于B+树的读写冲突解决方法的如下步骤:
步骤S310,索引构建模块110为目标数据集构建索引文件。具体地,所述索引文件采用B+树的数据结构,且文件头部重复记录有B+树的根节点地址。在本实施例中,假设所述目标数据集为如前所述的视频直播平台在网站主页或直播列表中展示的图像构成的集合,则所述B+树的叶子节点中记录有所有图像的数据标识(例如图像编号)、存储地址或删除标识。所述删除标识用于表示对应的数据处于删除状态,即对应的图像已不在视频直播平台在网站主页或直播列表中展示。
步骤S320,在对所述目标数据集执行写操作时,写入模块120将所述写操作对应的数据标识、存储地址或删除标识添加到所述B+树的末尾节点,为所述末尾节点创建各层副本父节点,并在所述各层副本父节点记录子节点地址后,依次修改所述文件头部的根节点地址。具体地,所述写操作包括对目标数据集的增添、删除和更新修改等操作。假设对目标数据集进行增添操作,则将增添数据的数据标识和存储地址添加到所述B+树的末尾节点;假设对目标数据集进行删除操作,则将删除数据的数据标识和数据删除指令对应的指令标识添加到所述B+树的末尾节点;假设对目标数据集进行更新修改操作,则将该更新修改操作涉及数据对应的数据标识以及更新修改后的数据的存储地址添加到所述B+树的末尾节点。
需要说明的是,在对目标数据集进行删除操作时,在数据库中仅将删除数据标记为删除状态,并未从数据库中删除相关数据;在对目标数据集进行更新修改操作时,更新修改后的数据并未覆盖原来的数据,原来的数据在数据库中的内容和存储位置等均未改变,只是在数据库中增添更新修改后的数据。上述操作遵循一切皆追加的思想,以便历史数据回溯。类似的,在索引文件中,亦遵循一切皆追加的思想,写操作不会引起所述B+树中其他叶子节点的改变,而是在末尾节点添加写操作对应的数据标识、存储地址或删除标识。写操作也不会引起所述末尾节点的各层父节点的改变,而是为所述末尾节点创建各层副本父节点,包括副本根节点,并在所述各层副本父节点记录子节点地址后,依次修改所述文件头部的根节点地址。
步骤S330,在对所述目标数据集执行读操作时,读取模块130判断所述文件头部的根节点地址是否相同,若相同,则以任一或默认的所述根节点地址访问根节点,并逐层访问对应的子节点,完成读操作,否则,分别利用所述根节点地址进行读操作,以可用的根节点地址完成读操作。例如,读取模块130接收数据读取指令,所述数据读取指令中包括数据标识,读取模块130根据所述数据读取指令访问目标数据集的索引文件,先判断索引文件头部的根节点地址是否相同,若相同,则以任一或默认的根节点地址访问根节点,并逐层访问对应的子节点,在对应的叶子节点中根据所述数据标识获取待读取数据的存储地址或删除标识,并根据获取的存储地址获取待读取数据或根据所述删除标识获知待读取数据的删除状态,完成读操作;若所述第一根节点地址和第二根节点地址不同,则分别利用所述第一根节点地址和第二根节点地址访问对应的根节点,以可用的根节点地址完成数据读取操作。关于根节点地址可用状态的解释请参照上述关于所述读取模块130的详细介绍,在此不再赘述。
在其他实施例中,电子装置1的处理器12执行存储器11中存储的数据读写冲突解决程序10时还实现基于B+树的读写冲突解决方法的如下步骤:
为每个相同的所述文件头部的根节点地址分配一个唯一的目标数据集版本号,记录目标数据集版本号、每个版本更新的时间以及对应的根节点地址;
根据版本更新时间和/或目标数据集版本号,利用对应的根节点地址获取对应版本的目标数据集。
此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以是硬盘、多媒体卡、SD卡、闪存卡、SMC、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器等等中的任意一种或者几种的任意组合。
本发明之计算机可读存储介质的具体实施方式与上述基于B+树的读写冲突解决方法和电子装置1的具体实施方式大致相同,请参照上述图2关于数据读写冲突解决程序10实施例的程序模块图以及图4关于读写冲突解决方法实施例的流程图的详细介绍,在此不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质中,包括若干指令用以使得电子装置执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种基于B+树的读写冲突解决方法,应用于电子装置,其特征在于,该方法包括:
索引构建步骤:为目标数据集构建索引文件,该索引文件采用B+树的数据结构且在文件头部记录两次B+树的根节点地址;
写入步骤:在对所述目标数据集执行写操作时,将所述写操作对应的数据标识、存储地址或删除标识添加到所述B+树的末尾节点,为所述末尾节点创建各层副本父节点,在所述各层副本父节点记录子节点地址后,依次修改所述文件头部的根节点地址;及
读取步骤:在对所述目标数据集执行读操作时,判断所述文件头部的根节点地址是否相同,若相同,则以任一或默认的所述根节点地址访问根节点,并逐层访问对应的子节点,在对应的叶子节点中根据读操作指令中的数据标识获取待读取数据的存储地址或删除标识,并根据获取的存储地址获取待读取数据或根据所述删除标识获知待读取数据的删除状态,完成读操作,否则,分别利用所述根节点地址进行读操作,以可用的根节点地址完成读操作。
2.如权利要求1所述的基于B+树的读写冲突解决方法,其特征在于,在所述写入步骤中,所述副本父节点包括副本根节点,在所述副本根节点记录子节点地址后,依次将所述文件头部的根节点地址替换为所述副本根节点的地址,将所述副本根节点作为新的根节点。
3.如权利要求1所述的基于B+树的读写冲突解决方法,其特征在于,所述写操作包括对所述目标数据集的增添、删除和更新修改操作。
4.如权利要求1所述的基于B+树的读写冲突解决方法,其特征在于,所述根节点地址和子节点地址用指针表示。
5.如权利要求1至4中任意一项所述的基于B+树的读写冲突解决方法,其特征在于,该方法还包括:
为每个相同的所述文件头部的根节点地址分配一个唯一的目标数据集版本号,记录目标数据集版本号、每个版本更新的时间以及对应的根节点地址;
根据版本更新时间和/或目标数据集版本号,利用对应的根节点地址获取对应版本的目标数据集。
6.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中包括数据读写冲突解决程序,所述数据读写冲突解决程序被所述处理器执行时实现如下步骤:
索引构建步骤:为目标数据集构建索引文件,该索引文件采用B+树的数据结构且在文件头部记录两次B+树的根节点地址;
写入步骤:将写操作对应的数据标识、存储地址或删除标识添加到所述B+树的末尾节点,为所述末尾节点创建各层副本父节点,在所述各层副本父节点记录子节点地址后,依次修改所述文件头部的根节点地址;及
读取步骤:在接收到对所述目标数据集的读操作指令时,判断所述文件头部的根节点地址是否相同,若相同,则以任一或默认的所述根节点地址访问根节点,并逐层访问对应的子节点,在对应的叶子节点中根据所述读操作指令中的数据标识获取待读取数据的存储地址或删除标识,并根据获取的存储地址获取待读取数据或根据所述删除标识获知待读取数据的删除状态,完成读操作,否则,分别利用所述根节点地址进行读操作,以可用的根节点地址完成读操作。
7.如权利要求6所述的电子装置,其特征在于,在所述写入步骤中,所述副本父节点包括副本根节点,在所述副本根节点记录子节点地址后,依次将所述文件头部的根节点地址替换为所述副本根节点的地址,将所述副本根节点作为新的根节点。
8.如权利要求6所述的电子装置,其特征在于,所述写操作包括对所述目标数据集的增添、删除和更新修改操作。
9.如权利要求6至8中任意一项所述的电子装置,其特征在于,所述数据读写冲突解决程序被所述处理器执行时还实现如下步骤:
为每个相同的所述文件头部的根节点地址分配一个唯一的目标数据集版本号,记录目标数据集版本号、每个版本更新的时间以及对应的根节点地址;
根据版本更新时间和/或目标数据集版本号,利用对应的根节点地址获取对应版本的目标数据集。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中包括数据读写冲突解决程序,所述数据读写冲突解决程序被处理器执行时实现如权利要求1至5中任意一项所述的基于B+树的读写冲突解决方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910307497.4A CN110162525B (zh) | 2019-04-17 | 2019-04-17 | 基于b+树的读写冲突解决方法、装置及存储介质 |
PCT/CN2019/102188 WO2020211236A1 (zh) | 2019-04-17 | 2019-08-23 | 基于b+树的读写冲突解决方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910307497.4A CN110162525B (zh) | 2019-04-17 | 2019-04-17 | 基于b+树的读写冲突解决方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110162525A true CN110162525A (zh) | 2019-08-23 |
CN110162525B CN110162525B (zh) | 2023-09-26 |
Family
ID=67639371
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910307497.4A Active CN110162525B (zh) | 2019-04-17 | 2019-04-17 | 基于b+树的读写冲突解决方法、装置及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110162525B (zh) |
WO (1) | WO2020211236A1 (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111190861A (zh) * | 2019-12-27 | 2020-05-22 | 中移(杭州)信息技术有限公司 | 热点文件管理方法、服务器及计算机可读存储介质 |
CN111538864A (zh) * | 2020-03-25 | 2020-08-14 | 新华三技术有限公司合肥分公司 | 一种减少Buildrun消耗的方法及装置 |
CN111597185A (zh) * | 2020-04-01 | 2020-08-28 | 深圳英飞拓智能技术有限公司 | 一种基于树状结构资源分布的实时状态数快速统计方法 |
CN114254068A (zh) * | 2022-02-28 | 2022-03-29 | 杭州未名信科科技有限公司 | 一种数据流转方法和系统 |
CN114791913A (zh) * | 2022-04-26 | 2022-07-26 | 北京人大金仓信息技术股份有限公司 | 数据库的共享内存缓冲池处理方法、存储介质与设备 |
CN115190136A (zh) * | 2021-04-21 | 2022-10-14 | 统信软件技术有限公司 | 一种数据存储方法、数据传输方法及计算设备 |
WO2023165374A1 (zh) * | 2022-03-04 | 2023-09-07 | 阿里云计算有限公司 | 数据库操作方法、装置、设备及存储介质 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112699138A (zh) * | 2021-01-06 | 2021-04-23 | 常州微亿智造科技有限公司 | 线程间的数据更新方法、装置和存储介质 |
CN113986782B (zh) * | 2021-11-05 | 2024-05-14 | 西北工业大学 | 一种树状组织的缓存结构及其应用 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050066095A1 (en) * | 2003-09-23 | 2005-03-24 | Sachin Mullick | Multi-threaded write interface and methods for increasing the single file read and write throughput of a file server |
CN101339538A (zh) * | 2007-07-04 | 2009-01-07 | 三星电子株式会社 | 使用页结构的数据树存储方法、系统和计算机程序产品 |
US20120030439A1 (en) * | 2010-07-30 | 2012-02-02 | Ibm Corporation | Data Sharing for File Clones Using Reverse Ditto References |
CN102722449A (zh) * | 2012-05-24 | 2012-10-10 | 中国科学院计算技术研究所 | 基于SSD的Key-Value型本地存储方法及系统 |
CN104932953A (zh) * | 2015-06-04 | 2015-09-23 | 华为技术有限公司 | 一种数据分发方法、数据存储方法、相关装置以及系统 |
US20160034356A1 (en) * | 2014-08-04 | 2016-02-04 | Cohesity, Inc. | Backup operations in a tree-based distributed file system |
US20160034508A1 (en) * | 2014-08-04 | 2016-02-04 | Cohesity, Inc. | Write operations in a tree-based distributed file system |
US20160034507A1 (en) * | 2014-08-04 | 2016-02-04 | Cohesity, Inc. | Read operations in a tree-based distributed file system |
CN105868396A (zh) * | 2016-04-19 | 2016-08-17 | 上海交通大学 | 内存文件系统的多版本控制方法 |
CN106250321A (zh) * | 2016-07-28 | 2016-12-21 | 盛科网络(苏州)有限公司 | 2r1w存储器的数据处理方法及数据处理系统 |
US20170060898A1 (en) * | 2015-08-27 | 2017-03-02 | Vmware, Inc. | Fast file clone using copy-on-write b-tree |
CN107430546A (zh) * | 2015-06-26 | 2017-12-01 | 华为技术有限公司 | 一种文件更新方法及存储设备 |
US10254996B1 (en) * | 2018-08-10 | 2019-04-09 | Cohesity, Inc. | Fast migration of metadata |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7120637B2 (en) * | 2003-05-30 | 2006-10-10 | Microsoft Corporation | Positional access using a b-tree |
CN101339527B (zh) * | 2008-07-28 | 2011-02-09 | 华中科技大学 | 影子内存的备份方法及装置 |
CN103518364B (zh) * | 2013-03-19 | 2016-03-09 | 华为技术有限公司 | 分布式存储系统的数据更新方法及服务器 |
-
2019
- 2019-04-17 CN CN201910307497.4A patent/CN110162525B/zh active Active
- 2019-08-23 WO PCT/CN2019/102188 patent/WO2020211236A1/zh active Application Filing
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050066095A1 (en) * | 2003-09-23 | 2005-03-24 | Sachin Mullick | Multi-threaded write interface and methods for increasing the single file read and write throughput of a file server |
CN101339538A (zh) * | 2007-07-04 | 2009-01-07 | 三星电子株式会社 | 使用页结构的数据树存储方法、系统和计算机程序产品 |
US20120030439A1 (en) * | 2010-07-30 | 2012-02-02 | Ibm Corporation | Data Sharing for File Clones Using Reverse Ditto References |
CN102722449A (zh) * | 2012-05-24 | 2012-10-10 | 中国科学院计算技术研究所 | 基于SSD的Key-Value型本地存储方法及系统 |
US20160034508A1 (en) * | 2014-08-04 | 2016-02-04 | Cohesity, Inc. | Write operations in a tree-based distributed file system |
US20160034356A1 (en) * | 2014-08-04 | 2016-02-04 | Cohesity, Inc. | Backup operations in a tree-based distributed file system |
US20160034507A1 (en) * | 2014-08-04 | 2016-02-04 | Cohesity, Inc. | Read operations in a tree-based distributed file system |
CN104932953A (zh) * | 2015-06-04 | 2015-09-23 | 华为技术有限公司 | 一种数据分发方法、数据存储方法、相关装置以及系统 |
CN107430546A (zh) * | 2015-06-26 | 2017-12-01 | 华为技术有限公司 | 一种文件更新方法及存储设备 |
US20170060898A1 (en) * | 2015-08-27 | 2017-03-02 | Vmware, Inc. | Fast file clone using copy-on-write b-tree |
CN105868396A (zh) * | 2016-04-19 | 2016-08-17 | 上海交通大学 | 内存文件系统的多版本控制方法 |
CN106250321A (zh) * | 2016-07-28 | 2016-12-21 | 盛科网络(苏州)有限公司 | 2r1w存储器的数据处理方法及数据处理系统 |
US10254996B1 (en) * | 2018-08-10 | 2019-04-09 | Cohesity, Inc. | Fast migration of metadata |
Non-Patent Citations (1)
Title |
---|
耿庆田;狄婧;常亮;赵宏伟;: "基于B+树的数据索引存储", 吉林大学学报(理学版), no. 06 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111190861A (zh) * | 2019-12-27 | 2020-05-22 | 中移(杭州)信息技术有限公司 | 热点文件管理方法、服务器及计算机可读存储介质 |
CN111190861B (zh) * | 2019-12-27 | 2023-06-30 | 中移(杭州)信息技术有限公司 | 热点文件管理方法、服务器及计算机可读存储介质 |
CN111538864A (zh) * | 2020-03-25 | 2020-08-14 | 新华三技术有限公司合肥分公司 | 一种减少Buildrun消耗的方法及装置 |
CN111597185A (zh) * | 2020-04-01 | 2020-08-28 | 深圳英飞拓智能技术有限公司 | 一种基于树状结构资源分布的实时状态数快速统计方法 |
CN111597185B (zh) * | 2020-04-01 | 2023-04-28 | 深圳英飞拓仁用信息有限公司 | 一种基于树状结构资源分布的实时状态数快速统计方法 |
CN115190136A (zh) * | 2021-04-21 | 2022-10-14 | 统信软件技术有限公司 | 一种数据存储方法、数据传输方法及计算设备 |
CN115190136B (zh) * | 2021-04-21 | 2024-03-01 | 统信软件技术有限公司 | 一种数据存储方法、数据传输方法及计算设备 |
CN114254068A (zh) * | 2022-02-28 | 2022-03-29 | 杭州未名信科科技有限公司 | 一种数据流转方法和系统 |
CN114254068B (zh) * | 2022-02-28 | 2022-08-09 | 杭州未名信科科技有限公司 | 一种数据流转方法和系统 |
WO2023165374A1 (zh) * | 2022-03-04 | 2023-09-07 | 阿里云计算有限公司 | 数据库操作方法、装置、设备及存储介质 |
CN114791913A (zh) * | 2022-04-26 | 2022-07-26 | 北京人大金仓信息技术股份有限公司 | 数据库的共享内存缓冲池处理方法、存储介质与设备 |
Also Published As
Publication number | Publication date |
---|---|
WO2020211236A1 (zh) | 2020-10-22 |
CN110162525B (zh) | 2023-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110162525A (zh) | 基于b+树的读写冲突解决方法、装置及存储介质 | |
US10579344B2 (en) | Converting visual diagrams into code | |
CN107196788A (zh) | 一种埋点数据的处理方法、装置、服务器及客户端 | |
CN106104514B (zh) | 加速访问对象存储库中的对象的方法、系统及介质 | |
US8108437B2 (en) | Sortable hash table | |
CN109446218A (zh) | Sql语句生成方法、装置及计算机可读存储介质 | |
CN104298478A (zh) | 基于文件名对存储库动作的推断 | |
US9299082B2 (en) | Fast streams and substreams | |
US9842178B2 (en) | Systems and methods for binding mismatched schematic and layout design hierarchy | |
JP2005302038A (ja) | Bツリー中の連続キーの名前を変更する方法およびシステム | |
CN108399072A (zh) | 应用页面更新方法和装置 | |
CN107798082B (zh) | 一种文件标签的处理方法及装置 | |
CN103109264A (zh) | 创建配置文件模板 | |
CN109491962B (zh) | 一种文件目录树管理方法及相关装置 | |
CN108536745A (zh) | 基于Shell的数据表提取方法、终端、设备及存储介质 | |
CN112084270A (zh) | 一种数据血缘处理方法、装置、存储介质及设备 | |
CN106227769B (zh) | 数据存储方法及装置 | |
CN109597707A (zh) | 克隆卷数据拷贝方法、装置及计算机可读存储介质 | |
CN115544183A (zh) | 数据可视化方法、装置、计算机设备和存储介质 | |
WO2016155387A1 (zh) | 基于移动终端的插件管理方法及装置 | |
CN108737487B (zh) | 数据同步方法和装置、存储介质及电子装置 | |
US7548927B2 (en) | Abstracted metadata policy component and related architecture | |
US10909487B2 (en) | Workflow customization | |
CN110175022A (zh) | 自动生成pojo类的方法、装置及存储介质、计算机设备 | |
CN107911541A (zh) | 一种基于Android系统的多摄像头切换使用方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |