CN111367916A - 一种数据存储方法及装置 - Google Patents
一种数据存储方法及装置 Download PDFInfo
- Publication number
- CN111367916A CN111367916A CN202010145051.9A CN202010145051A CN111367916A CN 111367916 A CN111367916 A CN 111367916A CN 202010145051 A CN202010145051 A CN 202010145051A CN 111367916 A CN111367916 A CN 111367916A
- Authority
- CN
- China
- Prior art keywords
- data
- leaf node
- stored
- tree
- target
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种数据存储方法及装置,该方法包括:接收待存储数据;根据该时间戳确定该待存储数据为有序数据或无序数据;在该待存储数据为有序数据且检测到B+树已创建的最后一个叶子节点中已存储数据的数据量大于或等于第一预设阈值的情况下,创建第一叶子节点,并将该待存储数据以键值的方式存储到该第一叶子节点中;在该待存储数据为无序数据的情况下,将该待存储数据以键值的方式插入该B+树已创建的叶子节点中,可以解决相关技术中通过比较叶子节点和数据的大小,判断叶子节点是否满,如果叶子节点满则进行B+树的分裂导致存储空间利用率不高的问题,提高了B+树叶子节点使用率以及查询效率。
Description
技术领域
本发明涉及数据处理技术领域,具体而言,涉及一种数据存储方法及装置。
背景技术
标准B+树定义每个叶子节点(除根节点外)里面至少保存T个数据,最多保存2T个数据,当叶子节点中已经保存有2T个数据之后,如果还需要往该节点里面添加数据,就会触发原来的叶子节点进行分裂,将一个叶子节点分裂成2个叶子节点,其中一个叶子节点保存T个数据,另外一个叶子节点保存T+1个数据;B+树的这种写满在写的情况下需要分裂是为了解决后续写入的数据是无序的情况下,新加入的数据可能需要存储到前面的叶子节点上的时候,在前面的叶子节点里面有空间保存新的数据。
图1是根据相关技术中的数据存储的示意图一,如图1所示,一个节点里面最多可以保存10个数据;当原来的叶子节点中已经有10个数据0、1、2、3、4、5、6、7、8和9的情况下,新增数据10之后叶子节点被写满,此时B+树需要分裂产生2个叶子节点,并且第一个叶子节点保存5个数据,数据分别为0、1、2、3和4;第二个叶子节点保存6个数据,数据分别为5、6、7、8、9和10。
当删除叶子节点里面的数据之后,如果2个相邻的叶子节点里面的数据数量都小于T,则将这2个相邻的叶子节点合并为一个叶子节点。图2是根据相关技术中的数据存储的示意图二,如图2所示,有2个叶子节点,其中一个叶子节点有5个数据,分别为:0、1、2、3和4,另外一个叶子节点有6个数据,分别为:5、6、7、8、9和10;先删除数据4,第一个叶子节点只剩下4个数据,再删除数据5和6,第二个叶子节点里面的数据剩下4个,2个相邻的叶子节点里面的数据量都小于(T=5),将2个叶子节点合并成一个叶子节点,该叶子节点里面的数据分别为:0、1、2、3、7、8、9和10一共8个数据。
B+树节点里面数据满之后再插入数据需要分裂的技术,如果每次需要插入B+树中的数据是升序的,后面插入的数据比前面的数据要更大,这样就会造成后面的叶子节点一直都在分裂,并且由于新增加的数据都比前面加入的数据要大,所以前面的叶子节点里面都不会新增加新的数据,结果就是造成基本所有的叶子节点里面都只有一半的数据量,只有最后一个叶子节点里面的数据量大于叶子节点最大数据量的一半。
图3是根据相关技术中的数据存储的示意图三,如图3所示,虽然每个叶子节点可以最多保存10个数据,但是实际在使用的过程中发现每个叶子节点基本只有5个数据,从这个来看空间利用率不高,并且每次读硬盘IO之后获取到的有效数据也比较少,造成查询效率不高。
针对相关技术中通过比较叶子节点和数据的大小,判断叶子节点是否满,如果叶子节点满则进行B+树的分裂导致存储空间利用率不高的问题,尚未提出解决方案。
发明内容
本发明实施例提供了一种数据存储方法及装置,以至少解决相关技术中通过比较叶子节点和数据的大小,判断叶子节点是否满,如果叶子节点满则进行B+树的分裂导致存储空间利用率不高的问题。
根据本发明的一个实施例,提供了一种数据存储方法,包括:
接收待存储数据,其中,所述待存储数据中携带有时间戳;
根据所述时间戳确定所述待存储数据为有序数据或无序数据;
在所述待存储数据为有序数据且检测到B+树已创建的最后一个叶子节点中已存储数据的数据量大于或等于第一预设阈值的情况下,创建第一叶子节点,并将所述待存储数据以键值的方式存储到所述第一叶子节点中,其中,所述待存储数据的键与所述时间戳一一对应;
在所述待存储数据为无序数据的情况下,将所述待存储数据以键值的方式插入所述B+树已创建的叶子节点中。
可选地,将所述待存储数据以键值的方式插入B+树已创建的叶子节点中包括:
从所述B+树已创建的叶子节点中获取用于存储所述待存储数据的目标叶子节点;
判断所述目标叶子节点是否为所述B+树中已创建的最后一个叶子节点;
在所述目标叶子节点为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量小于所述第一预设阈值的情况下,将所述待存储数据以键值的方式存储到所述目标叶子节点;
在所述目标叶子节点不为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量小于第二预设阈值的情况下,将所述待存储数据以键值的方式存储到所述目标叶子节点中,其中,所述第二预设阈值大于所述第一预设阈值。
可选地,将所述待存储数据以键值的方式插入B+树已创建的叶子节点中还包括:
在所述目标叶子节点不为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量大于所述第二预设阈值的情况下,将所述目标叶子节点分裂为第二叶子节点和第三叶子节点,并将所述待存储数据以键值的方式存储到所述第二叶子节点或所述第三叶子节点中;
在所述目标叶子节点为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量大于或等于所述第二预设阈值的情况下,创建第四叶子节点,并将所述待存储数据以键值的方式存储到所述第四叶子节点中。
可选地,从所述B+树已创建的叶子节点中获取用于存储所述待存储数据的目标叶子节点包括:
获取所述B+树已创建的叶子节点的标识信息,其中,所述标识信息用于表征叶子节点中已存储数据的键的区间范围;
根据所述标识信息确定用于存储所述待存储数据的所述目标叶子节点。
可选地,根据所述时间戳确定所述待存储数据为有序数据或无序数据包括:
获取所述待存储数据的时间戳,其中,所述叶子节点中已存储数据的键与所述已存储数据的时间戳一一对应;
在所述待存储数据的时间戳大于所述B+树中已创建的最后一个叶子节点中已存储数据的键对应的时间戳的情况下,确定所述待存储数据为有序数据;
在所述待存储数据的时间戳小于所述B+树中已创建的最后一个叶子节点中已存储数据的键对应的时间戳的情况下,确定所述待存储数据为无序数据。
根据本发明的另一个实施例,还提供了一种数据存储装置,包括:
接收模块,用于接收待存储数据,其中,所述待存储数据中携带有时间戳;
确定模块,用于根据所述时间戳确定所述待存储数据为有序数据或无序数据;
存储模块,用于在所述待存储数据为有序数据且检测到B+树已创建的最后一个叶子节点中已存储数据的数据量大于或等于第一预设阈值的情况下,创建第一叶子节点,并将所述待存储数据以键值的方式存储到所述第一叶子节点中,其中,所述待存储数据的键与所述时间戳一一对应;
插入模块,用于在所述待存储数据为无序数据的情况下,将所述待存储数据以键值的方式插入所述B+树已创建的叶子节点中。
可选地,所述插入模块包括:
第一获取子模块,用于从所述B+树已创建的叶子节点中获取用于存储所述待存储数据的目标叶子节点;
判断子模块,用于判断所述目标叶子节点是否为所述B+树中已创建的最后一个叶子节点;
第一存储子模块,用于在所述目标叶子节点为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量小于所述第一预设阈值的情况下,将所述待存储数据以键值的方式存储到所述目标叶子节点;
第二存储子模块,用于在所述目标叶子节点不为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量小于第二预设阈值的情况下,将所述待存储数据以键值的方式存储到所述目标叶子节点中,其中,所述第二预设阈值大于所述第一预设阈值。
可选地,所述插入模块还包括:
第三存储子模块,用于在所述目标叶子节点不为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量大于所述第二预设阈值的情况下,将所述目标叶子节点分裂为第二叶子节点和第三叶子节点,并将所述待存储数据以键值的方式存储到所述第二叶子节点或所述第三叶子节点中;
第四存储子模块,用于在所述目标叶子节点为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量大于或等于所述第二预设阈值的情况下,创建第四叶子节点,并将所述待存储数据以键值的方式存储到所述第四叶子节点中。
可选地,所述第一获取子模块包括:
获取单元,用于获取所述B+树已创建的叶子节点的标识信息,其中,所述标识信息用于表征叶子节点中已存储数据的键的区间范围;
确定单元,用于根据所述标识信息确定用于存储所述待存储数据的所述目标叶子节点。
可选地,所述确定模块包括:
第二获取子模块,用于获取所述待存储数据的时间戳,其中,所述叶子节点中已存储数据的键与所述已存储数据的时间戳一一对应;
第一确定子模块,用于在所述待存储数据的时间戳大于所述B+树中已创建的最后一个叶子节点中已存储数据的键对应的时间戳的情况下,确定所述待存储数据为有序数据;
第二确定子模块,用于在所述待存储数据的时间戳小于所述B+树中已创建的最后一个叶子节点中已存储数据的键对应的时间戳的情况下,确定所述待存储数据为无序数据。
根据本发明的又一个实施例,还提供了一种计算机可读的存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本发明,接收待存储数据,其中,所述待存储数据中携带有时间戳;根据所述时间戳确定所述待存储数据为有序数据或无序数据;在所述待存储数据为有序数据且检测到B+树已创建的最后一个叶子节点中已存储数据的数据量大于或等于第一预设阈值的情况下,创建第一叶子节点,并将所述待存储数据以键值的方式存储到所述第一叶子节点中,其中,所述待存储数据的键与所述时间戳一一对应;在所述待存储数据为无序数据的情况下,将所述待存储数据以键值的方式插入所述B+树已创建的叶子节点中,可以解决相关技术中通过比较叶子节点和数据的大小,判断叶子节点是否满,如果叶子节点满则进行B+树的分裂导致存储空间利用率不高的问题,通过减少B+树的叶子节点的分裂频率,达到提高B+树叶子节点使用率以及查询效率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据相关技术中的数据存储的示意图一;
图2是根据相关技术中的数据存储的示意图二;
图3是根据相关技术中的数据存储的示意图三;
图4是本发明实施例的数据存储方法的移动终端的硬件结构框图;
图5是根据本发明实施例的数据存储方法的流程图;
图6是根据本发明实施例的数据插入的流程图;
图7是根据本发明实施例的数据插入的表现的示意图;
图8是根据本发明实施例的数据存储装置的框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
实施例1
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图4是本发明实施例的数据存储方法的移动终端的硬件结构框图,如图4所示,移动终端10可以包括一个或多个(图4中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,可选地,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图4所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端10还可包括比图4中所示更多或者更少的组件,或者具有与图4所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的报文接收方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种运行于上述移动终端或网络架构的数据存储方法,图5是根据本发明实施例的数据存储方法的流程图,如图5所示,该流程包括如下步骤:
步骤S502,接收待存储数据,其中,所述待存储数据中携带有时间戳;
步骤S504,根据所述时间戳确定所述待存储数据为有序数据或无序数据;
本发明实施例中,上述步骤S204具体可以包括:
获取所述待存储数据的时间戳,其中,所述叶子节点中已存储数据的键与所述已存储数据的时间戳一一对应;
在所述待存储数据的时间戳大于所述B+树中已创建的最后一个叶子节点中已存储数据的键对应的时间戳的情况下,确定所述待存储数据为有序数据;
在所述待存储数据的时间戳小于所述B+树中已创建的最后一个叶子节点中已存储数据的键对应的时间戳的情况下,确定所述待存储数据为无序数据。
步骤S506,在所述待存储数据为有序数据且检测到B+树已创建的最后一个叶子节点中已存储数据的数据量大于或等于第一预设阈值的情况下,创建第一叶子节点,并将所述待存储数据以键值的方式存储到所述第一叶子节点中,其中,所述待存储数据的键与所述时间戳一一对应;
步骤S508,在所述待存储数据为无序数据的情况下,将所述待存储数据以键值的方式插入所述B+树已创建的叶子节点中。
通过上述步骤S502至S508,可以解决相关技术中通过比较叶子节点和数据的大小,判断叶子节点是否满,如果叶子节点满则进行B+树的分裂导致存储空间利用率不高的问题,通过减少B+树的叶子节点的分裂频率,达到提高B+树叶子节点使用率以及查询效率。
本发明实施例中,上述步骤S508具体可以包括:
从所述B+树已创建的叶子节点中获取用于存储所述待存储数据的目标叶子节点;具体的,获取所述B+树已创建的叶子节点的标识信息,其中,所述标识信息用于表征叶子节点中已存储数据的键的区间范围;根据所述标识信息确定用于存储所述待存储数据的所述目标叶子节点;
判断所述目标叶子节点是否为所述B+树中已创建的最后一个叶子节点;
在所述目标叶子节点为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量小于所述第一预设阈值的情况下,将所述待存储数据以键值的方式存储到所述目标叶子节点;
在所述目标叶子节点不为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量小于第二预设阈值的情况下,将所述待存储数据以键值的方式存储到所述目标叶子节点中,其中,所述第二预设阈值大于所述第一预设阈值。
进一步的,上述步骤S508还可以包括:
在所述目标叶子节点不为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量大于所述第二预设阈值的情况下,将所述目标叶子节点分裂为第二叶子节点和第三叶子节点,并将所述待存储数据以键值的方式存储到所述第二叶子节点或所述第三叶子节点中,具体的,将目标叶子节点分裂时,新增加一个节点,与目标叶子节点一起为两个叶子节点,分别为第二叶子节点、第三叶子节点,若目标叶子节点为第二叶子节点,则在该第二叶子节点上保留前一半的数据节点,并且将后一半的数据搬移到新增加的第三叶子节点上;若目标叶子节点为第三叶子节点,则在第三叶子节点上保留前一半的数据节点,并将后一般的数据搬移到新增加的第三叶子节点上,即将待存储数据存储到第二叶子节点或第三叶子节点上;
在所述目标叶子节点为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量大于或等于所述第二预设阈值的情况下,创建第四叶子节点,并将所述待存储数据以键值的方式存储到所述第四叶子节点中。
本发明实施例的主要应用场景是插入到B+树中的数据在大多数情况下是有规律有序的数据,极少插入的数据是无序的情况(比如时间戳,大部分情况下是升序的,偶尔时间同步可能出现时间戳回退)。
以一个B+树的叶子节点里面可以最多保存2T的数据量为例,为了可以处理极少数量的无序数据,一个B+树叶子节点里面插入的数据量到达M(T<M<2T)的时候,就需要重新申请新的叶子节点,原有的叶子节点不分裂,将新的数据加入到新叶子节点上,如果偶尔有无序数据需要插入,则将数据插入到以前的叶子节点中,如果出现比较多的数据存在无序状态,这种情况下原来的叶子节点可能被写满,写满之后如果还需要往这个叶子节点里面加数据则需要将该叶子节点分裂成2个叶子节点。
图6是根据本发明实施例的数据插入的流程图,如图6所示,包括:
步骤S601,获取目标叶子节点,其中,该目标叶子节点用于存储新加入的数据;
步骤S602,判断目标叶子节点是否为最后一个叶子节点,在判断结果为是的情况下,执行步骤S603,否则执行步骤S605;
步骤S603,判断该目标叶子节点的数据量是否小于M,在判断结果为否的情况下,执行步骤S604,否则执行步骤S607;
步骤S604,申请新的叶子节点;
步骤S605,判断该目标叶子节点是否已经写满,在判断结果为是的情况下,执行步骤S606,否则执行步骤S607;
步骤S606,将目标叶子节点分裂成2个叶子节点;
步骤S607,将数据写入该目标叶子节点中。
具体的,如果目标叶子节点的数据量小于M,则将数据存储到该目标叶子节点中;如果目标叶子节点数据量已经大于等于M,则需要重新申请一个叶子节点,同时将数据写到新申请的叶子节点中;如果目标叶子节点不是B+树最后一个叶子节点,则需要判断该目标叶子节点是否已经写满;如果已经写满则需要将该目标叶子节点分裂成2个叶子节点;保存新数据到叶子节点中;如果目标叶子节点还没有写满则直接将数据写到该目标叶子节点中。
图7是根据本发明实施例的数据插入的表现的示意图,如图7所示,T为5,M为8;新加入的数据为11,这是一个无序数据,需要将数据插入到节点为0的叶子节点中,并且该叶子节点现在有8个数据,将11插入到该叶子节点之后该叶子节点里面有9个数据;后面加入的数据13也是无序数据,需要将13插入到节点为0的叶子节点中,当前该叶子节点中有9个数据,将13插入到该叶子节点之后该叶子节点有10个数据并且该叶子节点已经写满;后面加入的数据9也需要往节点为0的叶子节点中加入数据,但是该叶子节点已经写满,所以需要将该叶子节点分裂成2个叶子节点,原来的叶子节点保存其中的5个数据,新的叶子节点保存6个数据;
本发明实施例,对于插入到B+树中的数据是有序的情况下,B+树的叶子节点使用率更高,查询效率也更好;对于插入到B+树中的数据是有序的情况下,减少B+树叶子节点的分裂频率。
实施例2
根据本发明的另一个实施例,还提供了一种数据存储装置,图8是根据本发明实施例的数据存储装置的框图,如图8所示,包括:
接收模块82,用于接收待存储数据,其中,所述待存储数据中携带有时间戳;
确定模块84,用于根据所述时间戳确定所述待存储数据为有序数据或无序数据;
存储模块86,用于在所述待存储数据为有序数据且检测到B+树已创建的最后一个叶子节点中已存储数据的数据量大于或等于第一预设阈值的情况下,创建第一叶子节点,并将所述待存储数据以键值的方式存储到所述第一叶子节点中,其中,所述待存储数据的键与所述时间戳一一对应;
插入模块88,用于在所述待存储数据为无序数据的情况下,将所述待存储数据以键值的方式插入所述B+树已创建的叶子节点中。
可选地,所述插入模块88包括:
第一获取子模块,用于从所述B+树已创建的叶子节点中获取用于存储所述待存储数据的目标叶子节点;
判断子模块,用于判断所述目标叶子节点是否为所述B+树中已创建的最后一个叶子节点;
第一存储子模块,用于在所述目标叶子节点为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量小于所述第一预设阈值的情况下,将所述待存储数据以键值的方式存储到所述目标叶子节点;
第二存储子模块,用于在所述目标叶子节点不为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量小于第二预设阈值的情况下,将所述待存储数据以键值的方式存储到所述目标叶子节点中,其中,所述第二预设阈值大于所述第一预设阈值。
可选地,所述插入模块88还包括:
第三存储子模块,用于在所述目标叶子节点不为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量大于所述第二预设阈值的情况下,将所述目标叶子节点分裂为第二叶子节点和第三叶子节点,并将所述待存储数据以键值的方式存储到所述第二叶子节点或所述第三叶子节点中;
第四存储子模块,用于在所述目标叶子节点为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量大于或等于所述第二预设阈值的情况下,创建第四叶子节点,并将所述待存储数据以键值的方式存储到所述第四叶子节点中。
可选地,所述第一获取子模块包括:
获取单元,用于获取所述B+树已创建的叶子节点的标识信息,其中,所述标识信息用于表征叶子节点中已存储数据的键的区间范围;
确定单元,用于根据所述标识信息确定用于存储所述待存储数据的所述目标叶子节点。
可选地,所述确定模块84包括:
第二获取子模块,用于获取所述待存储数据的时间戳,其中,所述叶子节点中已存储数据的键与所述已存储数据的时间戳一一对应;
第一确定子模块,用于在所述待存储数据的时间戳大于所述B+树中已创建的最后一个叶子节点中已存储数据的键对应的时间戳的情况下,确定所述待存储数据为有序数据;
第二确定子模块,用于在所述待存储数据的时间戳小于所述B+树中已创建的最后一个叶子节点中已存储数据的键对应的时间戳的情况下,确定所述待存储数据为无序数据。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
实施例3
本发明的实施例还提供了一种计算机可读的存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,接收待存储数据,其中,所述待存储数据中携带有时间戳;
S2,根据所述时间戳确定所述待存储数据为有序数据或无序数据;
S3,在所述待存储数据为有序数据且检测到B+树已创建的最后一个叶子节点中已存储数据的数据量大于或等于第一预设阈值的情况下,创建第一叶子节点,并将所述待存储数据以键值的方式存储到所述第一叶子节点中,其中,所述待存储数据的键与所述时间戳一一对应;
S4,在所述待存储数据为无序数据的情况下,将所述待存储数据以键值的方式插入所述B+树已创建的叶子节点中。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
实施例4
本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,接收待存储数据,其中,所述待存储数据中携带有时间戳;
S2,根据所述时间戳确定所述待存储数据为有序数据或无序数据;
S3,在所述待存储数据为有序数据且检测到B+树已创建的最后一个叶子节点中已存储数据的数据量大于或等于第一预设阈值的情况下,创建第一叶子节点,并将所述待存储数据以键值的方式存储到所述第一叶子节点中,其中,所述待存储数据的键与所述时间戳一一对应;
S4,在所述待存储数据为无序数据的情况下,将所述待存储数据以键值的方式插入所述B+树已创建的叶子节点中。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种数据存储方法,其特征在于,包括:
接收待存储数据,其中,所述待存储数据中携带有时间戳;
根据所述时间戳确定所述待存储数据为有序数据或无序数据;
在所述待存储数据为有序数据且检测到B+树已创建的最后一个叶子节点中已存储数据的数据量大于或等于第一预设阈值的情况下,创建第一叶子节点,并将所述待存储数据以键值的方式存储到所述第一叶子节点中,其中,所述待存储数据的键与所述时间戳一一对应;
在所述待存储数据为无序数据的情况下,将所述待存储数据以键值的方式插入所述B+树已创建的叶子节点中。
2.根据权利要求1所述的方法,其特征在于,将所述待存储数据以键值的方式插入B+树已创建的叶子节点中包括:
从所述B+树已创建的叶子节点中获取用于存储所述待存储数据的目标叶子节点;
判断所述目标叶子节点是否为所述B+树中已创建的最后一个叶子节点;
在所述目标叶子节点为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量小于所述第一预设阈值的情况下,将所述待存储数据以键值的方式存储到所述目标叶子节点;
在所述目标叶子节点不为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量小于第二预设阈值的情况下,将所述待存储数据以键值的方式存储到所述目标叶子节点中,其中,所述第二预设阈值大于所述第一预设阈值。
3.根据权利要求2所述的方法,其特征在于,将所述待存储数据以键值的方式插入B+树已创建的叶子节点中还包括:
在所述目标叶子节点不为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量大于所述第二预设阈值的情况下,将所述目标叶子节点分裂为第二叶子节点和第三叶子节点,并将所述待存储数据以键值的方式存储到所述第二叶子节点或所述第三叶子节点中;
在所述目标叶子节点为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量大于或等于所述第二预设阈值的情况下,创建第四叶子节点,并将所述待存储数据以键值的方式存储到所述第四叶子节点中。
4.根据权利要求2所述的方法,其特征在于,从所述B+树已创建的叶子节点中获取用于存储所述待存储数据的目标叶子节点包括:
获取所述B+树已创建的叶子节点的标识信息,其中,所述标识信息用于表征叶子节点中已存储数据的键的区间范围;
根据所述标识信息确定用于存储所述待存储数据的所述目标叶子节点。
5.根据权利要求1至4中任一项所述的方法,其特征在于,根据所述时间戳确定所述待存储数据为有序数据或无序数据包括:
获取所述待存储数据的时间戳,其中,所述叶子节点中已存储数据的键与所述已存储数据的时间戳一一对应;
在所述待存储数据的时间戳大于所述B+树中已创建的最后一个叶子节点中已存储数据的键对应的时间戳的情况下,确定所述待存储数据为有序数据;
在所述待存储数据的时间戳小于所述B+树中已创建的最后一个叶子节点中已存储数据的键对应的时间戳的情况下,确定所述待存储数据为无序数据。
6.一种数据存储装置,其特征在于,包括:
接收模块,用于接收待存储数据,其中,所述待存储数据中携带有时间戳;
确定模块,用于根据所述时间戳确定所述待存储数据为有序数据或无序数据;
存储模块,用于在所述待存储数据为有序数据且检测到B+树已创建的最后一个叶子节点中已存储数据的数据量大于或等于第一预设阈值的情况下,创建第一叶子节点,并将所述待存储数据以键值的方式存储到所述第一叶子节点中,其中,所述待存储数据的键与所述时间戳一一对应;
插入模块,用于在所述待存储数据为无序数据的情况下,将所述待存储数据以键值的方式插入所述B+树已创建的叶子节点中。
7.根据权利要求6所述的装置,其特征在于,所述插入模块包括:
第一获取子模块,用于从所述B+树已创建的叶子节点中获取用于存储所述待存储数据的目标叶子节点;
判断子模块,用于判断所述目标叶子节点是否为所述B+树中已创建的最后一个叶子节点;
第一存储子模块,用于在所述目标叶子节点为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量小于所述第一预设阈值的情况下,将所述待存储数据以键值的方式存储到所述目标叶子节点;
第二存储子模块,用于在所述目标叶子节点不为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量小于第二预设阈值的情况下,将所述待存储数据以键值的方式存储到所述目标叶子节点中,其中,所述第二预设阈值大于所述第一预设阈值。
8.根据权利要求7所述的装置,其特征在于,所述插入模块还包括:
第三存储子模块,用于在所述目标叶子节点不为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量大于所述第二预设阈值的情况下,将所述目标叶子节点分裂为第二叶子节点和第三叶子节点,并将所述待存储数据以键值的方式存储到所述第二叶子节点或所述第三叶子节点中;
第四存储子模块,用于在所述目标叶子节点为所述B+树中已创建的最后一个叶子节点且所述目标叶子节点中已存储数据的数据量大于或等于所述第二预设阈值的情况下,创建第四叶子节点,并将所述待存储数据以键值的方式存储到所述第四叶子节点中。
9.一种计算机可读的存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行所述权利要求1至5任一项中所述的方法。
10.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行所述权利要求1至5任一项中所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010145051.9A CN111367916B (zh) | 2020-03-04 | 2020-03-04 | 一种数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010145051.9A CN111367916B (zh) | 2020-03-04 | 2020-03-04 | 一种数据存储方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111367916A true CN111367916A (zh) | 2020-07-03 |
CN111367916B CN111367916B (zh) | 2023-03-31 |
Family
ID=71206449
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010145051.9A Active CN111367916B (zh) | 2020-03-04 | 2020-03-04 | 一种数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111367916B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112084250A (zh) * | 2020-09-15 | 2020-12-15 | 深圳市宝能投资集团有限公司 | 数据存储方法、数据查询方法和电子设备 |
CN113709203A (zh) * | 2021-04-08 | 2021-11-26 | 曾春峰 | 一种应用于区块链中的高效通信方法及系统 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103324763A (zh) * | 2013-07-18 | 2013-09-25 | 北京金和软件股份有限公司 | 一种手机端树形数据结构的展现方法 |
WO2015096582A1 (zh) * | 2013-12-27 | 2015-07-02 | 华为技术有限公司 | 一种时空数据的索引建立方法、查询方法、装置及设备 |
CN107040582A (zh) * | 2017-02-17 | 2017-08-11 | 阿里巴巴集团控股有限公司 | 一种数据处理方法及装置 |
CN107391600A (zh) * | 2017-06-30 | 2017-11-24 | 北京百度网讯科技有限公司 | 用于在内存中存取时序数据的方法和装置 |
CN109902088A (zh) * | 2019-02-13 | 2019-06-18 | 北京航空航天大学 | 一种面向流式时序数据的数据索引方法 |
CN109933584A (zh) * | 2019-01-31 | 2019-06-25 | 北京大学 | 一种多级无序索引方法与系统 |
CN110110685A (zh) * | 2019-05-14 | 2019-08-09 | 重庆紫光华山智安科技有限公司 | 数据建档方法、装置及服务器 |
CN110276609A (zh) * | 2018-03-14 | 2019-09-24 | 北京三快在线科技有限公司 | 业务数据处理方法及装置、电子设备、计算机可读介质 |
CN111475508A (zh) * | 2020-03-31 | 2020-07-31 | 浙江大学 | 一种优化叶子节点合并操作的高效索引方法 |
-
2020
- 2020-03-04 CN CN202010145051.9A patent/CN111367916B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103324763A (zh) * | 2013-07-18 | 2013-09-25 | 北京金和软件股份有限公司 | 一种手机端树形数据结构的展现方法 |
WO2015096582A1 (zh) * | 2013-12-27 | 2015-07-02 | 华为技术有限公司 | 一种时空数据的索引建立方法、查询方法、装置及设备 |
CN107040582A (zh) * | 2017-02-17 | 2017-08-11 | 阿里巴巴集团控股有限公司 | 一种数据处理方法及装置 |
CN107391600A (zh) * | 2017-06-30 | 2017-11-24 | 北京百度网讯科技有限公司 | 用于在内存中存取时序数据的方法和装置 |
US20190005101A1 (en) * | 2017-06-30 | 2019-01-03 | Beijing Baidu Netcom Science And Technology Co., Ltd. | Method and apparatus for accessing time series data in memory |
CN110276609A (zh) * | 2018-03-14 | 2019-09-24 | 北京三快在线科技有限公司 | 业务数据处理方法及装置、电子设备、计算机可读介质 |
CN109933584A (zh) * | 2019-01-31 | 2019-06-25 | 北京大学 | 一种多级无序索引方法与系统 |
CN109902088A (zh) * | 2019-02-13 | 2019-06-18 | 北京航空航天大学 | 一种面向流式时序数据的数据索引方法 |
CN110110685A (zh) * | 2019-05-14 | 2019-08-09 | 重庆紫光华山智安科技有限公司 | 数据建档方法、装置及服务器 |
CN111475508A (zh) * | 2020-03-31 | 2020-07-31 | 浙江大学 | 一种优化叶子节点合并操作的高效索引方法 |
Non-Patent Citations (2)
Title |
---|
冀倩倩;李小芳;叶茂生;: "基于B+树的优化树查找技术" * |
曾碧贵;叶少珍;: "时间序列数据摘要与索引机制" * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112084250A (zh) * | 2020-09-15 | 2020-12-15 | 深圳市宝能投资集团有限公司 | 数据存储方法、数据查询方法和电子设备 |
CN113709203A (zh) * | 2021-04-08 | 2021-11-26 | 曾春峰 | 一种应用于区块链中的高效通信方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111367916B (zh) | 2023-03-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111767143B (zh) | 交易数据处理方法、装置、设备及系统 | |
CN101316226B (zh) | 一种获取资源的方法、装置及系统 | |
CN107911249B (zh) | 一种网络设备的命令行发送方法、装置和设备 | |
CN111400407B (zh) | 数据的同步方法及装置、存储介质及电子装置 | |
EP3125501A1 (en) | File synchronization method, server, and terminal | |
CN110209348B (zh) | 数据存储方法、装置、电子设备及存储介质 | |
CN107277181A (zh) | 一种消息推送方法、服务器及消息推送系统 | |
CN112434039A (zh) | 数据的存储方法、装置、存储介质以及电子装置 | |
CN111367916B (zh) | 一种数据存储方法及装置 | |
CN108762979B (zh) | 一种基于匹配树的终端信息备份方法及备份设备 | |
CN111177243B (zh) | 数据的导出方法及装置、存储介质和电子装置 | |
US10938773B2 (en) | Method and apparatus for synchronizing contact information and medium | |
CN110460668B (zh) | 一种文件上传方法、装置、计算机设备和存储介质 | |
CN104063377A (zh) | 信息处理方法和使用其的电子设备 | |
CN112416557B (zh) | 调用关系的确定方法和装置、存储介质及电子装置 | |
CN117874033A (zh) | 数据库分表方法、装置、电子设备及存储介质 | |
EP2290897A2 (en) | System and method for correlating messages within a wireless transaction | |
CN112711683A (zh) | 数据比对方法、装置及计算机设备 | |
CN102523112B (zh) | 信息处理方法及设备 | |
CN110417860A (zh) | 文件传输管理方法、装置、设备及存储介质 | |
CN107977381B (zh) | 数据配置方法、索引管理方法、相关装置以及计算设备 | |
CN105634999A (zh) | 一种介质访问控制地址的老化方法及装置 | |
CN114945020A (zh) | 一种基于云平台的云边协同数据接入方法以及系统 | |
CN110209645A (zh) | 任务处理方法、装置、电子设备及存储介质 | |
CN106156169B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |