一种数据存储和查询方法、装置、存储介质及电子设备转让专利

申请号 : CN202111285655.4

文献号 : CN114116795B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 冯刚义

申请人 : 北京力控元通科技有限公司

摘要 :

本发明公开了一种数据存储和查询方法、装置、存储介质及电子设备,该方法包括:获取待存储数据,存储到待存储数据的缓存区中;根据待存储数据的时间戳及二分法确定缓存区中待存储数据的插入位置;将缓存区中插入的待存储数据写入内存文件中,并确定内存文件中索引块和数据块的位置;根据二分法及读取的数据块中的数据确定内存文件中的待存储缓冲区待存储数据的位置,并根据该位置更新数据块的个数;判断待存储缓冲区中有无剩余数据,并根据判断结果确定存储后的内存文件;根据存储后的内存文件进行数据查询。基于时间顺序读取的方式保证了数据的准确性和连续性,将索引位置和数据分开存储,保证了读取和存储的高效性,保证了查询和存储的效率。

权利要求 :

1.一种数据存储和查询方法,其特征在于,包括:

获取待存储数据,存储到所述待存储数据的缓存区中,所述待存储数据为数据库中任一数据点增加的实时数据;

根据所述待存储数据的时间戳及二分法确定所述缓存区中所述待存储数据的插入位置;

将所述缓存区中插入的所述待存储数据写入内存文件中,并确定所述内存文件中索引块和数据块的位置,所述内存文件包括索引文件和数据文件,所述索引文件中包含多个索引,所述数据文件中包含多个数据块,每个索引对应一个数据块;

根据二分法及读取的数据块中的数据确定所述内存文件的待存储缓冲区中所述待存储数据的位置,并根据所述位置更新所述数据块的个数;

判断所述待存储缓冲区中有无剩余数据,并根据判断结果确定存储后的内存文件;

根据存储后的内存文件进行数据查询;

所述将所述缓存区中插入的所述待存储数据写入内存文件中,并确定所述内存文件中索引块和数据块的位置,包括:根据存储的数据点读取索引个数,当读取的索引个数大于0时,直接读取出索引块,并根据缓存区中数据的开始时间和结束时间确定索引块的位置,当读取的索引个数小于0时,创建索引块并获取当前数据文件的大小更新当前索引块中记录的数据块的位置,然后扩充数据文件的大小,并在当前索引块记录的位置创建数据块;

根据所述索引块中记录的位置定位所述数据块的位置,并读取数据块的个数,以及根据数据块的个数读取数据块;

所述根据二分法及读取的数据块中的数据确定所述内存文件的待存储缓冲区中所述待存储数据的位置,并根据所述位置更新所述数据块的个数,包括:当所述缓存区中所述待存储数据的时间戳与所述待存储缓冲区中所述待存储数据的时间戳相同时,过滤所述待存储数据;

将所述待存储缓冲区中保留的所述待存储数据进行排序;

将排序后的所述待存储数据写入到数据文件偏移后的文件指针指向的位置上,修改所述文件指针到写入的所述数据块开始的位置并更新数据块的个数,以及获取当前数据块的文件指针偏移位置,更新对应索引块中记录的数据块的位置。

2.如权利要求1所述的数据存储和查询方法,其特征在于,根据所述待存储数据的时间戳及二分法确定所述缓存区中所述待存储数据的插入位置,包括:获取所述缓存区的数据头部的时间戳和数据尾部的时间戳;

将待存储数据的时间戳和所述数据尾部的时间戳进行比较;

当待存储数据的时间戳大于所述数据尾部的时间戳时,确定待插入位置为数据尾部的后方;

将待存储数据的时间戳和所述数据头部的时间戳进行比较;

当待存储数据的时间戳小于所述数据头部的时间戳时,确定待插入位置为数据头部的前方。

3.如权利要求2所述的数据存储和查询方法,其特征在于,根据所述待存储数据的时间戳及二分法确定所述缓存区中所述待存储数据的插入位置,还包括:当待存储数据的时间戳小于所述数据尾部的时间戳且大于所述数据头部的时间戳时,将待存储数据的时间戳和缓存区中中间数据的时间戳进行比较;

当待存储数据的时间戳和缓存区中中间数据的时间戳相等时,确定待插入位置为中间位置;

当待存储数据的时间戳大于缓存区中中间数据的时间戳时,根据缓存区右侧数据的时间戳确定待插入位置;

当待存储数据的时间戳小于缓存区中中间数据的时间戳时,根据缓存区左侧数据的时间戳确定待插入位置。

4.如权利要求1所述的数据存储和查询方法,其特征在于,判断所述待存储缓冲区中有无剩余数据,并根据判断结果确定存储后的内存文件,包括:当所述待存储缓冲区没有剩余数据时,数据存储完成,得到存储后的内存文件;

当所述待存储缓冲区有剩余数据时,增加索引,与索引块中的最大索引数进行比较,确定是否新建索引块;

根据判断结果更新所述数据块的个数,并继续确定所述待存储缓冲区中有无剩余数据。

5.如权利要求1所述的数据存储和查询方法,其特征在于,根据存储后的内存文件进行数据查询,包括:

获取所述数据点的待查询时间;

根据二分法及所述待查询时间确定索引区间;

遍历所述索引区间,根据遍历结果返回查询后的数据。

6.一种数据存储和查询装置,其特征在于,包括:

数据获取模块,用于获取待存储数据,存储到所述待存储数据的缓存区中,所述待存储数据为数据库中任一数据点增加的实时数据;

位置确定模块,用于根据所述待存储数据的时间戳及二分法确定所述缓存区中所述待存储数据的插入位置;

写入及读取模块,用于将所述缓存区中插入的所述待存储数据写入内存文件中,并确定所述内存文件中索引块和数据块的位置,所述内存文件包括索引文件和数据文件,所述索引文件中包含多个索引,所述数据文件中包含多个数据块,每个索引对应一个数据块;

位置确定及更新模块,用于根据二分法及读取的数据块中的数据确定所述内存文件的待存储缓冲区中所述待存储数据的位置,并根据所述位置更新所述数据块的个数;

存储模块,用于判断所述待存储缓冲区中有无剩余数据,并根据判断结果确定存储后的内存文件;

查询模块,用于根据存储后的内存文件进行数据查询;

所述将所述缓存区中插入的所述待存储数据写入内存文件中,并确定所述内存文件中索引块和数据块的位置,包括:根据存储的数据点读取索引个数,当读取的索引个数大于0时,直接读取出索引块,并根据缓存区中数据的开始时间和结束时间确定索引块的位置,当读取的索引个数小于0时,创建索引块并获取当前数据文件的大小更新当前索引块中记录的数据块的位置,然后扩充数据文件的大小,并在当前索引块记录的位置创建数据块;

根据所述索引块中记录的位置定位所述数据块的位置,并读取数据块的个数,以及根据数据块的个数读取数据块;

所述根据二分法及读取的数据块中的数据确定所述内存文件的待存储缓冲区中所述待存储数据的位置,并根据所述位置更新所述数据块的个数,包括:当所述缓存区中所述待存储数据的时间戳与所述待存储缓冲区中所述待存储数据的时间戳相同时,过滤所述待存储数据;

将所述待存储缓冲区中保留的所述待存储数据进行排序;

将排序后的所述待存储数据写入到数据文件偏移后的文件指针指向的位置上,修改所述文件指针到写入的所述数据块开始的位置并更新数据块的个数,以及获取当前数据块的文件指针偏移位置,更新对应索引块中记录的数据块的位置。

7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行如权利要求1‑5任一项所述的数据存储和查询方法。

8.一种电子设备,其特征在于,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行如权利要求1‑5任一项所述的数据存储和查询方法。

说明书 :

一种数据存储和查询方法、装置、存储介质及电子设备

技术领域

[0001] 本发明涉及数据分析技术领域,具体涉及一种数据存储和查询方法、装置、存储介质及电子设备。

背景技术

[0002] 随着现代科技的快速发展,智能化、自动化的工业软件在工业领域变得越来越重要,其中在企业日常的生产中会产生大量的数据需要被存储,并且对数据的时间和数据的有效性有着极高的要求,所以需要对日常产生的数据按照时间顺序进行存储保证数据的一致性和对查询的准确性和高效性,在企业存储和读取数据时需要一种高效的查询算法。

发明内容

[0003] 有鉴于此,本发明实施例提供了涉及一种数据存储和查询方法、装置、存储介质及电子设备,以解决现有技术中大量数据查询的低效性的技术问题。
[0004] 本发明提出的技术方案如下:
[0005] 本发明实施例第一方面提供一种数据存储和查询方法,该数据存储和查询方法包括:获取待存储数据,存储到所述待存储数据的缓存区中,所述待存储数据为数据库中任一数据点增加的实时数据;根据所述待存储数据的时间戳及二分法确定所述缓存区中所述待存储数据的插入位置;将所述缓存区中插入的所述待存储数据写入内存文件中,并确定所述内存文件中索引块和数据块的位置,所述内存文件包括索引文件和数据文件,所述索引文件中包含多个索引,所述数据文件中包含多个数据块,每个索引对应一个数据块;根据二分法及读取的数据块中的数据确定所述内存文件中的待存储缓冲区所述待存储数据的位置,并根据所述位置更新所述数据块的个数;判断所述待存储缓冲区中有无剩余数据,并根据判断结果确定存储后的内存文件;根据存储后的内存文件进行数据查询。
[0006] 可选地,根据所述待存储数据的时间戳及二分法确定所述缓存区中所述待存储数据的插入位置,包括:获取所述缓存区的数据头部的时间戳和数据尾部的时间戳;将待存储数据的时间戳和所述数据尾部的时间戳进行比较;当待存储数据的时间戳大于所述数据尾部的时间戳时,确定待插入位置为数据尾部的后方;将待存储数据的时间戳和所述数据头部的时间戳进行比较;当待存储数据的时间戳小于所述数据头部的时间戳时,确定待插入位置为数据头部的前方。
[0007] 可选地,根据二分法以及待存储数据的时间戳在缓存区中查询待插入位置,还包括:当待存储数据的时间戳小于所述数据尾部的时间戳且大于所述数据头部的时间戳时,将待存储数据的时间戳和缓存区中中间数据的时间戳进行比较;当待存储数据的时间戳和缓存区中中间数据的时间戳相等时,确定待插入位置为中间位置;当待存储数据的时间戳大于缓存区中中间数据的时间戳时,根据缓存区右侧数据的时间戳确定待插入位置;当待存储数据的时间戳小于缓存区中中间数据的时间戳时,根据缓存区左侧数据的时间戳确定待插入位置。
[0008] 可选地,将所述缓存区中插入的所述待存储数据写入内存文件中,并确定所述内存文件中索引块和数据块的位置,包括:根据数据点读取索引个数,并根据所述索引个数及二分法确定所述索引块的位置;根据所述索引块的位置读取数据块的个数并确定所述数据块中包含的数据个数。
[0009] 可选地,根据二分法及读取的数据块中的数据确定所述内存文件的待存储缓冲区中所述待存储数据的位置,并根据所述位置更新所述数据块的个数,包括:当所述待存储缓冲区中所述待存储数据的时间戳与所述内存文件中所述待存储数据的时间戳相同时,过滤所述待存储数据;将所述待存储缓冲区中保留的所述待存储数据进行排序;将排序后的所述待存储数据写入到数据文件偏移后的文件的指定的位置上,根据数据块的个数将数据文件指针移动到记录数据个数的位置将数据个数进行更新。
[0010] 可选地,判断所述待存储缓冲区缓存区中有无剩余数据,并根据判断结果确定存储后的内存文件,包括:当所述待存储缓冲区没有剩余数据时,数据存储完成,得到存储后的内存文件;当所述待存储缓冲区有剩余数据时,增加索引,与索引块中的最大索引数进行比较,确定是否新建索引块;根据判断结果更新所述数据块的个数,并继续确定所述待存储缓冲区中有无剩余数据。
[0011] 可选地,根据存储后的内存文件进行数据查询,包括:获取所述数据点的待查询时间;根据二分法及所述待查询时间确定索引区间;遍历所述索引区间,根据所述遍历结果返回查询后的数据。
[0012] 本发明实施例第二方面提供一种数据存储和查询装置,该数据存储和查询装置包括:数据获取模块,用于获取待存储数据,存储到所述待存储数据的缓存区中,所述待存储数据为数据库中任一数据点增加的实时数据;位置确定模块,用于根据所述待存储数据的时间戳及二分法确定所述缓存区中所述待存储数据的插入位置;写入及读取模块,用于将所述缓存区中插入的所述待存储数据写入内存文件中,并确定所述内存文件中索引块和数据块的位置,所述内存文件包括索引文件和数据文件,所述索引文件中包含多个索引,所述数据文件中包含多个数据块,每个索引对应一个数据块;位置确定及更新模块,用于根据二分法及读取的数据块中的数据确定所述内存文件的待存储缓冲区中所述待存储数据的位置,并根据所述位置更新所述数据块的个数;存储模块,用于判断所述待存储缓冲区中有无剩余数据,并根据判断结果确定存储后的内存文件;查询模块,用于根据存储后的内存文件进行数据查询。
[0013] 本发明实施例第三方面提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行如本发明实施例第一方面及第一方面任一项所述的数据存储和查询方法。
[0014] 本发明实施例第四方面提供一种电子设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行如本发明实施例第一方面及第一方面任一项所述的数据存储和查询方法。
[0015] 本发明提供的技术方案,具有如下效果:
[0016] 本发明实施例提供的一种数据存储和查询方法、装置、存储介质及电子设备,获取待存储数据,存储到所述待存储数据的缓存区中,所述待存储数据为数据库中任一数据点增加的实时数据;根据所述待存储数据的时间戳及二分法确定所述缓存区中所述待存储数据的插入位置;将所述缓存区中插入的所述待存储数据写入内存文件中,并确定所述内存文件中索引块和数据块的位置,所述文件包括索引文件和数据文件,所述索引文件中包含多个索引,所述数据文件中包含多个数据块,每个索引对应一个数据块;根据二分法及读取的数据块中的数据确定所述内存文件中所述待存储数据的位置,并根据所述位置更新所述数据块的个数;判断所述缓存区中有无剩余数据,并根据判断结果确定存储后的内存文件;根据存储后的内存文件进行数据查询。该方法采用基于时间顺序读取和存储历史数据的方式保证了数据的准确性和连续性,并且按照索引位置和数据分开存储的方式体现了读取和存储的高效性,保证了查询和存储的效率。因此,通过实施本发明,保证了读取和存储的高效性,提高了查询和存储的效率。

附图说明

[0017] 为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0018] 图1是根据本发明实施例的数据存储和查询方法的流程图;
[0019] 图2是根据本发明实施例的数据存储的内存文件确定的流程图;
[0020] 图3是根据本发明实施例提供的数据读取的流程图;
[0021] 图4是根据本发明实施例的数据存储和查询装置的结构框图;
[0022] 图5是根据本发明实施例提供的计算机可读存储介质的结构示意图;
[0023] 图6是根据本发明实施例提供的电子设备的结构示意图。

具体实施方式

[0024] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0025] 本发明实施例提供一种数据存储和查询方法,如图1所示,该方法包括如下步骤:
[0026] 步骤S101:获取待存储数据,存储到待存储数据的缓存区中,待存储数据为数据库中任一数据点增加的实时数据。具体地,该待存储数据可以是企业日常产生的数据,也可以是其他待存储的数据,本发明实施例对此不作限定。
[0027] 步骤S102:根据待存储数据的时间戳及二分法确定缓存区中待存储数据的插入位置。具体地,获取待存储数据之后,首先获取缓存区的数据头部与尾部的时间戳,并为待存储数据申请时间戳,将缓存区的数据头部与尾部的时间戳与待存储数据时间戳进行比较,确定待插入位置。其中,时间戳是使用数字签名技术产生的数据,用来对数据产生的时间进行认证。二分法是将待存储数据所在区间一分为二,使区间两端的数据逐步逼近待存储数据,进而得到待存储数据近似值的方法。
[0028] 步骤S103:将缓存区中插入的待存储数据写入内存文件中,并确定内存文件中索引块和数据块的位置,所述内存文件包括索引文件和数据文件,所述索引文件中包含多个索引,所述数据文件中包含多个数据块,每个索引对应一个数据块。具体地,确定待存储数据的待插入位置之后,将该待存储数据写入到内存文件中,并读取索引个数,根据索引个数读取索引块,然后根据读取的索引块读取数据块个数并确定数据块的位置。
[0029] 步骤S104:根据二分法及读取的数据块中的数据确定内存文件的待存储缓冲区中待存储数据的位置,并根据位置更新数据块的个数。具体地,在读取存储在内存文件的数据文件中相应位置的数据块之后,将数据块中的数据载入到待存储缓冲区中,并根据二分法在该待存储缓冲区中确定待存储数据的具体位置,然后根据该位置进一步更新数据块个数。
[0030] 步骤S105:判断待存储缓冲区中有无剩余数据,并根据判断结果确定存储后的内存文件。具体地,在更新数据块个数之后,判断待存储缓冲区有无剩余数据,根据判断结果进一步确定数据存储完成后的内存文件。
[0031] 步骤S106:根据存储后的内存文件进行数据查询。具体地,在得到存储后的内存文件之后,对文件中存储的数据进行查询。
[0032] 本发明实施例提供的数据存储和查询方法,获取待存储数据,存储到所述待存储数据的缓存区中,所述待存储数据为数据库中任一数据点增加的实时数据;根据所述待存储数据的时间戳及二分法确定所述缓存区中所述待存储数据的插入位置;将所述缓存区中插入的所述待存储数据写入内存文件中,并确定所述内存文件中索引块和数据块的位置,所述文件包括索引文件和数据文件,所述索引文件中包含多个索引,所述数据文件中包含多个数据块,每个索引对应一个数据块;根据二分法及读取的数据块中的数据确定所述内存文件中所述待存储数据的位置,并根据所述位置更新所述数据块的个数;判断所述缓存区中有无剩余数据,并根据判断结果确定存储后的内存文件;根据存储后的内存文件进行数据查询。该方法采用基于时间顺序读取和存储历史数据的方式保证了数据的准确性和连续性,并且按照索引位置和数据分开存储的方式体现了读取和存储的高效性,保证了查询和存储的效率。因此,通过实施本发明,保证了读取和存储的高效性,提高了查询和存储的效率。
[0033] 作为本发明实施例一种可选的实施方式,根据待存储数据的时间戳及二分法确定缓存区中待存储数据的插入位置,如图2所示步骤a和步骤b,获取待存储数据之后,分别为缓存区的数据及待存储数据申请时间戳,得到缓存区中数据头部的时间戳、数据尾部的时间戳以及待存储数据的时间戳,然后当待存储数据时间戳小于数据头部的时间戳或者大于数据尾部的时间戳时,终止查找,否则根据二分查找法在缓存区中进行查找,确定待存储数据时间戳需要插入的位置。
[0034] 具体地,将待存储数据的时间戳与缓存区中数据头部的时间戳和数据尾部的时间戳分别进行比较,当待存储数据的时间戳大于数据尾部的时间戳时,确定待插入位置为数据尾部的后方;当待存储数据的时间戳小于数据头部的时间戳时,确定待插入位置为数据头部的前方。
[0035] 在一实施例中,定义待插入位置pos,对其进行判断。当待插入位置pos所在时间(待存储数据的时间戳)大于缓存区中最晚的时间(数据尾部的时间戳)时,确定待插入位置pos在缓存区的最后方,即pos>count,然后将待存储数据直接添加到内存的索引文件的尾部;当待插入位置pos所在时间(待存储数据的时间戳)小于缓存区中最早的时间(数据头部的时间戳)时,确定待插入位置pos在缓存区的最前方,即pos=0。
[0036] 具体地,将待存储数据的时间戳与缓存区中数据头部的时间戳和数据尾部的时间戳分别进行比较,还包括:当待存储数据的时间戳小于数据尾部的时间戳且大于数据头部的时间戳时,将待存储数据的时间戳和缓存区中间数据的时间戳进行比较,当待存储数据的时间戳和缓存区中间数据的时间戳相等时,确定待插入位置为中间位置;当待存储数据的时间戳大于缓存区中间数据的时间戳时,根据缓存区右侧数据的时间戳确定待插入位置,当待存储数据的时间戳小于缓存区中间数据的时间戳时,根据缓存区左侧数据的时间戳确定待插入位置。
[0037] 在一实施例中,待插入位置pos所在时间大于缓存区中最早的时间且小于缓存区中最晚的时间时,确定待插入位置pos在缓存区的中间,即0<pos<count,其中,count用来计数缓存区中的数据;然后将待插入位置pos所在时间与缓存区中间位置所在时间(中间数据的时间戳)进行比较,当待插入位置pos所在时间与缓存区中间位置所在时间相等时,确定待插入位置pos为缓存区的中间位置。具体地,将上述缓存区中的n个数据块分成大致相同的两部分,a[n/2]表示缓存区中间位置数据的时间戳,将待存储数据的时间戳t和中间位置数据的时间戳a[n/2]比较,当t=a[n/2]时,则待插入位置pos为中间位置。
[0038] 当待插入位置pos所在时间与缓存区中间位置所在时间不相等时,利用折半查找算法进行查找。具体地,当待插入位置pos所在时间大于缓存区中间位置所在时间,即t>a[n/2]时,根据缓存区右侧数据的时间戳确定待插入位置,即在数组a右半部分搜索t,当搜索到数据点与时间戳t相等时,确定该数据点位置为待插入位置pos;当待插入位置pos所在时间小于缓存区中间位置所在时间,即t<a[n/2]时,根据缓存区左侧数据的时间戳确定待插入位置,即在数组a左半部分搜索t,当搜索到数据点与时间戳t相等时,确定该数据点位置为待插入位置pos。
[0039] 作为本发明实施例一种可选的实施方式,将缓存区中插入的待存储数据写入内存文件中,并确定内存文件中索引块和数据块的位置,如图2所示步骤c和步骤d所示。具体地,在确定缓存区中待存储数据插入的位置之后,根据确定的位置将数据插入到程序运行中的内存的缓存中,即将该待存储数据写入到内存文件中,插入后的缓存区中的数据即为有序的数据。
[0040] 首先判断当前是否存在索引文件和数据文件,若不存在,则创建索引文件和数据文件,其中,创建索引文件时为每个数据点创建400(此数值可以根据需要配置)个索引;若存在,则根据存储的数据点读取索引个数,当读取的索引个数大于0时,直接读取出索引块,并根据缓存区中数据的开始时间和结束时间确定索引块的位置;当读取的索引个数小于0时,即当前的数据文件中不存在当前数据点的数据,直接创建索引块并获取当前数据文件的大小并作为当前索引块中记录的数据文件的偏移位置,然后扩充数据文件的大小,并在当前索引块记录的偏移位置创建数据块;根据获取的索引块的位置读取数据块的个数,并根据数据块的个数读取出多个数据块。
[0041] 作为本发明实施例一种可选的实施方式,根据二分法及读取的数据块中的数据确定内存文件的待存储缓冲区中待存储数据的位置,如图2所示步骤e。具体地,读取数据块之后,根据插入待存储数据的缓存区使用二分法读取待存储缓冲区中待存储数据的位置。
[0042] 在一实施例中,根据插入数据后的缓存区(缓冲区a)的最早时间(开始时间)和最晚时间(结束时间)使用二分法在读取出的多个数据块中的待存储缓冲区(缓冲区b)中确定待存储数据的具体位置,并将缓冲区a中的数据插入到缓冲区b中。
[0043] 在确定插入位置之后,根据时间戳过滤掉相同时间戳的值。具体地,将插入位置的时间戳和待存储缓冲区中数据的时间戳进行比较,当二者相同时,将待存储数据覆盖数据块中的相应数据,保证同一时刻的数据是唯一的。
[0044] 如图2所示步骤f,过滤重复值之后,将待存储缓冲区中保留的待存储数据进行排序,保证了存入文件中的数据是有序的。将排序后的待存储数据写入到数据文件偏移后的文件的指定的位置上,根据数据块的个数将数据文件指针移动到记录数据个数的位置将数据个数进行更新,如图2所示步骤g。
[0045] 在一实施例中,将缓冲区b中的数据进行排序,并将获取到的待存储数据(缓冲区b)写入到数据文件偏移后的文件的指定的位置上,然后修改文件指针到写入的数据块开始的位置更新数据块的个数。
[0046] 作为本发明实施例一种可选的实施方式,更新数据块个数之后判断待存储缓冲区中有无剩余数据,并根据判断结果确定存储后的内存文件,如图2所示步骤g。其中,每个数据块中最多只能存储600个数据,当缓冲区中的数据超过600的话就进行下一次存储,依次循环直到缓冲区中的数据全部存完。
[0047] 具体地,当待存储缓冲区没有剩余数据时,数据存储完成,得到存储后的内存文件;当待存储缓冲区有剩余数据时,增加索引,并与索引块中的最大索引数进行比较,确定是否新建索引块;然后根据判断结果更新数据块的个数,并继续确定待存储缓冲区中有无剩余数据。
[0048] 在一实施例中,如果缓冲区b中的数据还有剩余,将索引的引用计数加1,判断引用计数增加后的索引是否超过当前索引块最大的索引数。当超过当前索引块最大的索引数时,创建新的索引块,并对应的在数据文件中的末尾创建新的数据块,将剩余的数据存入新创建的数据块中并将数据文件中新创建数据块的位置和当前数据块中的第一个数据的时间戳记录到索引文件的索引中。
[0049] 作为本发明实施例一种可选的实施方式,根据存储后的内存文件进行数据查询,具体地,首先获取待查询的起止时间,之后根据二分法及待查询时间确定索引区间并遍历索引区间,遍历结束之后返回所有查询后的数据。
[0050] 在一实施例中,如图3所示,首先获取数据点的待查询时间,然后根据数据点的序号将索引个数读取出来,并根据读取出的索引个数将索引块中的索引读取到索引缓冲区中,然后将获取到的索引缓冲区根据二分法并按照查询的起止时间查找符合条件的索引块的索引,即查找时间在起始时间和结束时间这段时间之内的索引块的索引。查找结束后,遍历获取到的索引,根据每个索引中记录的数据块的位置在数据文件中读取数据块的数据个数,并根据数据个数将数据块中的数据读取到数据缓冲区中,然后遍历数据缓冲区中的数据,并将符合条件的数据添加到待返回的数据缓冲区中。当数据缓冲区中的数据遍历完成后进行下一个索引的数据块的数据的读取,直到将所有的符合条件的索引遍历完毕返回所有查询后的数据。
[0051] 本发明实施例还提供一种数据存储和查询装置,如图4所示,该装置包括:
[0052] 数据获取模块10,用于获取待存储数据,存储到所述待存储数据的缓存区中,所述待存储数据为数据库中任一数据点增加的实时数据;详细内容参见上述方法实施例中步骤S101的相关描述。
[0053] 位置确定模块20,用于根据所述待存储数据的时间戳及二分法确定所述缓存区中所述待存储数据的插入位置;详细内容参见上述方法实施例中步骤S102的相关描述。
[0054] 写入及读取模块30,用于将所述缓存区中插入的所述待存储数据写入内存文件中,并确定所述内存文件中索引块和数据块的位置,所述内存文件包括索引文件和数据文件,所述索引文件中包含多个索引,所述数据文件中包含多个数据块,每个索引对应一个数据块;详细内容参见上述方法实施例中步骤S103的相关描述。
[0055] 位置确定及更新模块40,用于根据二分法及读取的数据块中的数据确定所述内存文件的待存储缓冲区中所述待存储数据的位置,并根据所述位置更新所述数据块的个数;详细内容参见上述方法实施例中步骤S104的相关描述。
[0056] 存储模块50,用于判断所述待存储缓冲区中有无剩余数据,并根据判断结果确定存储后的内存文件;详细内容参见上述方法实施例中步骤S105的相关描述。
[0057] 查询模块60,用于根据存储后的内存文件进行数据查询。详细内容参见上述方法实施例中步骤S106的相关描述。
[0058] 本发明实施例提供的数据存储和查询装置,获取待存储数据,存储到所述待存储数据的缓存区中,所述待存储数据为数据库中任一数据点增加的实时数据;根据所述待存储数据的时间戳及二分法确定所述缓存区中所述待存储数据的插入位置;将所述缓存区中插入的所述待存储数据写入内存文件中,并确定所述内存文件中索引块和数据块的位置,所述内存文件包括索引文件和数据文件,所述索引文件中包含多个索引,所述数据文件中包含多个数据块,每个索引对应一个数据块;根据二分法及读取的数据块中的数据确定所述内存文件中的待存储缓冲区所述待存储数据的位置,并根据所述位置更新所述数据块的个数;判断所述待存储缓冲区中有无剩余数据,并根据判断结果确定存储后的内存文件;根据存储后的内存文件进行数据查询。该方法采用基于时间顺序读取和存储历史数据的方式保证了数据的准确性和连续性,并且按照索引位置和数据分开存储的方式体现了读取和存储的高效性,保证了查询和存储的效率。因此,通过实施本发明,保证了读取和存储的高效性,提高了查询和存储的效率。
[0059] 本发明实施例提供的数据存储和查询装置的功能描述详细参见上述实施例中数据存储和查询方法描述。
[0060] 本发明实施例还提供一种存储介质,如图5所示,其上存储有计算机程序601,该指令被处理器执行时实现上述实施例中数据存储和查询方法的步骤。该存储介质上还存储有音视频流数据,特征帧数据、交互请求信令、加密数据以及预设数据大小等。其中,存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(Random Access Memory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,缩写:HDD)或固态硬盘(Solid-State Drive,SSD)等;所述存储介质还可以包括上述种类的存储器的组合。
[0061] 本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(RandomAccessMemory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,缩写:HDD)或固态硬盘(Solid-State Drive,SSD)等;所述存储介质还可以包括上述种类的存储器的组合。
[0062] 本发明实施例还提供了一种电子设备,如图6所示,该电子设备可以包括处理器51和存储器52,其中处理器51和存储器52可以通过总线或者其他方式连接,图6中以通过总线连接为例。
[0063] 处理器51可以为中央处理器(Central Processing Unit,CPU)。处理器51还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
[0064] 存储器52作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的对应的程序指令/模块。处理器51通过运行存储在存储器52中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的数据存储和查询方法。
[0065] 存储器52可以包括存储程序区和存储数据区,其中,存储程序区可存储操作装置、至少一个功能所需要的应用程序;存储数据区可存储处理器51所创建的数据等。此外,存储器52可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器52可选包括相对于处理器51远程设置的存储器,这些远程存储器可以通过网络连接至处理器51。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0066] 所述一个或者多个模块存储在所述存储器52中,当被所述处理器51执行时,执行如图1-2所示实施例中的数据存储和查询方法。
[0067] 上述电子设备具体细节可以对应参阅图1至图2所示的实施例中对应的相关描述和效果进行理解,此处不再赘述。
[0068] 虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。