一种时间顺序数据存储方法、装置、设备及可读存储介质与流程

文档序号:23090469发布日期:2020-11-27 12:42阅读:142来源:国知局
本发明涉及计算机应用
技术领域
:,特别是涉及一种时间顺序数据存储方法、装置、设备及可读存储介质。
背景技术
::“时间轴形式数据”,即数据按照时间先后顺序排列,例如日志数据,一些记录数据等。如果将“时间轴形式数据”存储在数据库,在存储的数据量较大时,便需要进行排序,速度慢。同时也给mysql服务器增加压力,影响正常其他业务。综上所述,如何有效地提高“时间轴形式数据”的存储等问题,是目前本领域技术人员急需解决的技术问题。技术实现要素:本发明的目的是提供一种时间顺序数据存储方法、装置、设备及可读存储介质,能够加快“时间轴形式数据”的存储效率,避免影响其他业务性能。为解决上述技术问题,本发明提供如下技术方案:一种时间顺序数据存储方法,包括:获取需按照时间顺序排列的目标数据,并将所述目标数据确定为目标元素;确定所述目标元素对应的目标类;所述目标继承具有时间戳成员的抽象类;利用所述目标类,确定出采用nio方式存储所述目标元素的目标文件;将所述目标元素放入所述目标文件的目标缓存,并将所述目标元素存入所述目标文件的目标通道。优选地,将所述目标元素放入所述目标文件的目标缓存,并将所述目标元素存入所述目标文件的目标通道,包括:获取所述目标文件的文件操作锁;获取所述目标通道中的数据大小;比较所述数据大小与记录大小的对应关系;根据所述对应关系,将所述目标元素放入所述目标缓存,并存入所述目标通道。优选地,根据所述对应关系,将所述目标元素放入所述目标缓存,并存入所述目标通道,包括:在所述数据大小大于等于所述记录大小的情况下,根据所述记录大小申请对应大小的目标缓存;读取所述目标通道中的最后一个元素,并判断所述元素的时间戳成员赋值是否大于等于所述目标元素的时间戳成员赋值;若是,则利用所述目标元素的时间戳成员赋值,删除所述目标通道中晚于所述目标元素的元素;并在删除结束后,将所述目标数据放入所述目标缓存,并存入所述目标通道。优选地,根据所述对应关系,将所述目标元素放入所述目标缓存,并存入所述目标通道,包括:在所述数据大小小于所述记录大小的情况下,将所述目标元素放入所述目标文件的所述目标缓存,并存入所述目标通道。优选地,还包括:接收并解析数据读取请求,得到待读数据对应的指定类和时间信息;利用所述指定类确定待读取数据的存储文件;利用所述时间信息,从所述存储文件中读取对象数据集。优选地,所述时间信息包括传入的开始时间和结束时间,利用所述时间信息,从所述存储文件中读取对象数据集,包括:在所述存储文件的通道中查找出所述开始时间和所述结束时间对应的元素个数;根据所述元素个数申请读取缓存;循环所述存储文件的通道中的元素,根据step递进读取元素至所述读取缓存中;利用已满的所述读取缓存,通过反射生产所述对象数据集。优选地,获取需按照时间顺序排列的目标数据,包括:接收数据存储请求,并确定待存储数据;判断所述待存储数据是否需按照时间顺序进行排列;若是,则将所述待存储数据确定为所述目标数据。一种时间顺序数据存储装置,包括:目标元素确定模块,用于获取需按照时间顺序排列的目标数据,并将所述目标数据确定为目标元素;目标类确定模块,用于确定所述目标元素对应的目标类;所述目标继承具有时间戳成员的抽象类;目标文件确定模块,用于利用所述目标类,确定出采用nio方式存储所述目标元素的目标文件;存储模块,用于将所述目标元素放入所述目标文件的目标缓存,并将所述目标元素存入所述目标文件的目标通道。一种时间顺序数据存储设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现上述时间顺序数据存储方法的步骤。一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述时间顺序数据存储方法的步骤。应用本发明实施例所提供的方法,获取需按照时间顺序排列的目标数据,并将目标数据确定为目标元素;确定目标元素对应的目标类;目标继承具有时间戳成员的抽象类;利用目标类,确定出采用nio方式存储目标元素的目标文件;将目标元素放入目标文件的目标缓存,并将目标元素存入目标文件的目标通道。由于,nio(新的输入/输出)与原来的i/o的区别主要在于数据打包和传输的方式。具体的,原来的i/o以流的方式处理数据,而nio以块的方式处理数据。按块处理数据比按流式的字节处理数据要快得多。在本方法中,采用nio对有时间顺序排序要求的目标数据进行存储,以加快数据存储效率。在本方法中,在存储目标数据时,兼顾考虑时间顺序排列,提出方案:首先,将需要按照时间顺序排列的目标数据确定为目标元素,然后确定出目标元素等于的目标类。特别地,为了保障时间顺序排列,目标类还需继承具有时间戳成员的抽象类,也就是为目标元素标注时间戳。而后,基于目标类确定出以nio方式存放目标元素的目标文件。最后,将目标元素访问到目标文件的目标缓存,将目标元素存入目标文件的目标通道,完成数据存储。可见,在本方法中,基于时间戳成员可实现数据按照时间轴进行排序,以nio方式进行存储可以加快数据存储效率,能够避免因存储大量“时间轴形式数据”而影响其他业务性能。相应地,本发明实施例还提供了与上述时间顺序数据存储方法相对应的时间顺序数据存储装置、设备和可读存储介质,具有上述技术效果,在此不再赘述。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例中一种时间顺序数据存储方法的实施流程图;图2为本发明实施例中一种文件拓扑关系示意图;图3为本发明实施例中一种时间顺序数据存储装置的结构示意图;图4为本发明实施例中一种时间顺序数据存储设备的结构示意图;图5为本发明实施例中一种时间顺序数据存储设备的结构示意图。具体实施方式为了使本
技术领域
:的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。请参考图1,图1为本发明实施例中一种时间顺序数据存储方法的流程图,该方法包括以下步骤:s101、获取需按照时间顺序排列的目标数据,并将目标数据确定为目标元素。需要说明的是,在本发明实施例中主要针对需要按照时间顺序排序的目标数据进行高效存储。该目标数据可以为实时获取的系统监控信息,如日志,也可以为需要按照时间顺序排序的其他数据,如气象记录数据等。为了便于描述,在得到目标数据后,将该目标数据确定为目标元素。具体的,目标数据的获取过程,包括:步骤一、接收数据存储请求,并确定待存储数据;步骤二、判断待存储数据是否需按照时间顺序进行排列;步骤三、若是,则将待存储数据确定为目标数据。为便于描述,下面将上述三个步骤结合起来进行说明。在接收到数据存储请求后,首先确定出待存储数据。在判断待存储数据是否为需按照时间顺序进行排列的时间的方式,可以具体为预先设置需按照时间顺序进行排序的数据类型、数据来源、数据标签等信息。在得到待存储数据之后通过比对,便可确定出待存储数据是否需要按照时间顺序进行排列。确定需按照时间顺序排列的情况下,便可将该待存储数据确定为目标数据。s102、确定目标元素对应的目标类;目标继承具有时间戳成员的抽象类。请参考图2,图2为本发明实施例中一种文件拓扑关系示意图。在本发明实施例中,database表示数据库,里面有很多种类型的表,每一种table类型为具体的java类,成员对应字段,由于java基本类型可自由组合,根据组合可以生成一个固定sized的buffer,即nio里的buffer。record对应表里的某一行记录,每个record有一个唯一标识作为nio文件名存储,每个文件里存储很多根据时间顺序排序的数据集。其中,抽象类,即数据格式抽象类,对应mysql中的表,在此,所有具体格式的类继承此抽象类。该抽象类中只有timestamp(时间戳)成员,在构造函数中取当前系统时间为其赋值。基于此,在本发明实施例中,在获取到目标元素之后,可确定出其对应的目标类。s103、利用目标类,确定出采用nio方式存储目标元素的目标文件。数据库表操作类datatable设计,该类为数据操作进行封装。在确定出目标元素的目标类之后,便可基于目标类确定出采用nio方式存储目标元素的目标文件。也就是说,目标文件是针对存储目标类对应的数据的文件。s104、将目标元素放入目标文件的目标缓存,并将目标元素存入目标文件的目标通道。确定出应存放目标元素的目标文件之后,便可将目标元素放入目标文件的目标缓存,并将目标元素存入目标文件的目标通道,最终实现落盘。具体的存储过程,包括:步骤一、获取目标文件的文件操作锁;步骤二、获取目标通道中的数据大小;步骤三、比较数据大小与记录大小的对应关系;步骤四、根据对应关系,将目标元素放入目标缓存,并存入目标通道。为了便于描述下面将上述四个步骤结合起来进行说明。为了避免出现多个线程同时操作同一个目标文件,导致数据混乱。在本发明实施例可首先获取到目标文件的文件操作锁。然后,获取该目标文件的目标通道的数据大小,目标文件当前channel中的数据size。通过比较数据size与记录大小(recordsize),确定在目标文件中的哪一个位置存储目标元素。具体的,根据数据大小与记录大小的对应关系,上述步骤四可具体包括以下两种不同的处理模式:模式1:在数据大小大于等于记录大小的情况对应的处理过程,包括:步骤1.1、在所述数据大小大于等于所述记录大小的情况下,根据所述记录大小申请对应大小的目标缓存;步骤1.2、读取所述目标通道中的最后一个元素,并判断所述元素的时间戳成员赋值是否大于等于所述目标元素的时间戳成员赋值;步骤1.3、若是,则利用所述目标元素的时间戳成员赋值,删除所述目标通道中晚于所述目标元素的元素;并在删除结束后,将所述目标数据放入所述目标缓存,并存入所述目标通道。在模式1中,在目标文件的channel中的数据size大于等于当前recordsize,则根据recordsize申请对应大小的buffer;读取channel中的最后一个元素,若取出该元素对应时间大于等于将要存入目标元素对应时间,则根据将要存入的目标元素时间计算channel中时间开始大于目标元素对应时间的元素下标,并将保留早于目标元素的数据(可通过二分法查找)。最终,将目标元素放入buffer,并存入channel。若取出该元素对应时间小于将要存入目标元素对应时间,则可直接在该元素后放入目标元素。模式2:在数据大小小于记录大小的情况对应的处理过程,包括:在数据大小小于记录大小的情况下,将目标元素放入目标文件的目标缓存,并存入目标通道。举例说明,可利用方法:appenddata(trecord)确定存储位置并进行存储。该appenddata(trecord)可以根据传入的具体类型,算出目标元素在nio文件中应该所处的位置,并将目标元素写入到nio文件中。应用本发明实施例所提供的方法,获取需按照时间顺序排列的目标数据,并将目标数据确定为目标元素;确定目标元素对应的目标类;目标继承具有时间戳成员的抽象类;利用目标类,确定出采用nio方式存储目标元素的目标文件;将目标元素放入目标文件的目标缓存,并将目标元素存入目标文件的目标通道。由于,nio(新的输入/输出)与原来的i/o的区别主要在于数据打包和传输的方式。具体的,原来的i/o以流的方式处理数据,而nio以块的方式处理数据。按块处理数据比按流式的字节处理数据要快得多。在本方法中,采用nio对有时间顺序排序要求的目标数据进行存储,以加快数据存储效率。在本方法中,在存储目标数据时,兼顾考虑时间顺序排列,提出方案:首先,将需要按照时间顺序排列的目标数据确定为目标元素,然后确定出目标元素等于的目标类。特别地,为了保障时间顺序排列,目标类还需继承具有时间戳成员的抽象类,也就是为目标元素标注时间戳。而后,基于目标类确定出以nio方式存放目标元素的目标文件。最后,将目标元素访问到目标文件的目标缓存,将目标元素存入目标文件的目标通道,完成数据存储。可见,在本方法中,基于时间戳成员可实现数据按照时间轴进行排序,以nio方式进行存储可以加快数据存储效率,能够避免因存储大量“时间轴形式数据”而影响其他业务性能。需要说明的是,基于上述实施例,本发明实施例还提供了相应的改进方案。在优选/改进实施例中涉及与上述实施例中相同步骤或相应步骤之间可相互参考,相应的有益效果也可相互参照,在本文的优选/改进实施例中不再一一赘述。优选地,基于上述实施例所提供的时间顺序数据存储方法,还可对数据读取过程进行加速。具体实现过程,包括:步骤一、接收并解析数据读取请求,得到待读数据对应的指定类和时间信息;步骤二、利用指定类确定待读取数据的存储文件;步骤三、利用时间信息,从存储文件中读取对象数据集。为便于描述,下面将上述三个步骤结合起来进行说明。在接收到数据读取请求后,通过解析该数据读取请求,可以得到待读数据对应的指定类和时间信息。然后基于指定类,便可确定出要从哪个文件中读取存储文件。需要说明的是,该存储文件即与指定类对应的文件。此时,可获取该存储文件的文件操作锁,然后利用该时间信息,可从存储文件中读取对象数据集。其中,时间信息包括传入的开始时间和结束时间,利用时间信息;其中,步骤三中的从存储文件中读取对象数据集,具体包括:步骤3.1、在存储文件的通道中查找出开始时间和结束时间对应的元素个数;步骤3.2、根据元素个数申请读取缓存;步骤3.3、循环存储文件的通道中的元素,根据step递进读取元素至读取缓存中;步骤3.4、利用已满的读取缓存,通过反射生产对象数据集。具体的,可在确定存储文件后,首先获取该存储文件的文件操作锁,然后根据传入的开始时间和结束时间,用二分法找出channel中元素最大和最小下标,可得到元素个数。然后,根据元素个数算出元素递进step的值,根据元素个数申请一个独权缓存buffer,循环channel里的元素,根据step递进去元素,直达buffer满了。最终根据返回的buffer,通过反射生产具体的对象数据集。特别地,基于step递进,便可对时间轴排列的数据基于时间进行均匀采样。也就是说,在本发明实施例,不仅可以加速数据读取效率,还可实现均匀采样。举例说明:可采用方法:list<t>readrecord(longstarttime,longendtime,intmaxrecord),该方法用于读取数据记录。其中,longstarttime对应分别表示开始时间,longendtime对应结束时间,intmaxrecord对应返回的最大记录个数,传入时间参数范围内的数据集个数若是大于传入的最大记录数,返回的数据集将均匀分布在时间轴上。优选地,考虑到在实际应用中,还会对“时间轴形式数据”进行修改、删除、查看等操作,因而在本发明的其他实施例中,还可对设计数据库操作类database。该类为对数据库表操作进行封装,主要内容包含如下:1、方法:databasegetinstance(class<t>clazz),该方法用于生成database对象实例。2、方法:adddata(trecord,intrecordid),其中record为继承了record类的子类类型,recordid为该类型数据的记录id,类似数据库里的主键。函数主要功能是调用datatable的appenddata方法进行存储数据。3、方法:readrecords(intrecordid,longstarttime,longendtime,intmaxrecornum)。该方法用于查找某个表某个记录中的数据。函数主要功能是调用datatable的readrecord方法。4、方法:delete(intrecordid),该方法用于删除表中的某条记录,即删除对应的nio文件。相应于上面的方法实施例,本发明实施例还提供了一种时间顺序数据存储装置,下文描述的时间顺序数据存储装置与上文描述的时间顺序数据存储方法可相互对应参照。参见图3所示,该装置包括以下模块:目标元素确定模块101,用于获取需按照时间顺序排列的目标数据,并将目标数据确定为目标元素;目标类确定模块102,用于确定目标元素对应的目标类;目标继承具有时间戳成员的抽象类;目标文件确定模块103,用于利用目标类,确定出采用nio方式存储目标元素的目标文件;存储模块104,用于将目标元素放入目标文件的目标缓存,并将目标元素存入目标文件的目标通道。应用本发明实施例所提供的装置,获取需按照时间顺序排列的目标数据,并将目标数据确定为目标元素;确定目标元素对应的目标类;目标继承具有时间戳成员的抽象类;利用目标类,确定出采用nio方式存储目标元素的目标文件;将目标元素放入目标文件的目标缓存,并将目标元素存入目标文件的目标通道。由于,nio(新的输入/输出)与原来的i/o的区别主要在于数据打包和传输的方式。具体的,原来的i/o以流的方式处理数据,而nio以块的方式处理数据。按块处理数据比按流式的字节处理数据要快得多。在本装置中,采用nio对有时间顺序排序要求的目标数据进行存储,以加快数据存储效率。在本装置中,在存储目标数据时,兼顾考虑时间顺序排列,提出方案:首先,将需要按照时间顺序排列的目标数据确定为目标元素,然后确定出目标元素等于的目标类。特别地,为了保障时间顺序排列,目标类还需继承具有时间戳成员的抽象类,也就是为目标元素标注时间戳。而后,基于目标类确定出以nio方式存放目标元素的目标文件。最后,将目标元素访问到目标文件的目标缓存,将目标元素存入目标文件的目标通道,完成数据存储。可见,在本装置中,基于时间戳成员可实现数据按照时间轴进行排序,以nio方式进行存储可以加快数据存储效率,能够避免因存储大量“时间轴形式数据”而影响其他业务性能。在本发明的一种具体实施方式中,存储模块104,具体用于获取目标文件的文件操作锁;获取目标通道中的数据大小;比较数据大小与记录大小的对应关系;根据对应关系,将目标元素放入目标缓存,并存入目标通道。在本发明的一种具体实施方式中,存储模块104,具体用于在所述数据大小大于等于所述记录大小的情况下,根据所述记录大小申请对应大小的目标缓存;读取所述目标通道中的最后一个元素,并判断所述元素的时间戳成员赋值是否大于等于所述目标元素的时间戳成员赋值;若是,则利用所述目标元素的时间戳成员赋值,删除所述目标通道中晚于所述目标元素的元素;并在删除结束后,将所述目标数据放入所述目标缓存,并存入所述目标通道。在本发明的一种具体实施方式中,存储模块104,具体用于在数据大小小于记录大小的情况下,将目标元素放入目标文件的目标缓存,并存入目标通道。在本发明的一种具体实施方式中,还包括:数据读取模块,用于接收并解析数据读取请求,得到待读数据对应的指定类和时间信息;利用指定类确定待读取数据的存储文件;利用时间信息,从存储文件中读取对象数据集。在本发明的一种具体实施方式中,时间信息包括传入的开始时间和结束时间,数据读取模块,具体用于在存储文件的通道中查找出开始时间和结束时间对应的元素个数;根据元素个数申请读取缓存;循环存储文件的通道中的元素,根据step递进读取元素至读取缓存中;利用已满的读取缓存,通过反射生产对象数据集。在本发明的一种具体实施方式中,目标元素确定模块101,具体用于接收数据存储请求,并确定待存储数据;判断待存储数据是否需按照时间顺序进行排列;若是,则将待存储数据确定为目标数据。相应于上面的方法实施例,本发明实施例还提供了一种时间顺序数据存储设备,下文描述的一种时间顺序数据存储设备与上文描述的一种时间顺序数据存储方法可相互对应参照。参见图4所示,该时间顺序数据存储设备包括:存储器332,用于存储计算机程序;处理器322,用于执行计算机程序时实现上述方法实施例的时间顺序数据存储方法的步骤。具体的,请参考图5,图5为本实施例提供的一种时间顺序数据存储设备的具体结构示意图,该时间顺序数据存储设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessingunits,cpu)322(例如,一个或一个以上处理器)和存储器332,存储器332存储有一个或一个以上的计算机应用程序342或数据344。其中,存储器332可以是短暂存储或持久存储。存储在存储器332的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对时间顺序数据存储设备中的一系列指令操作。更进一步地,中央处理器322可以设置为与存储器332通信,在时间顺序数据存储设备301上执行存储器332中的一系列指令操作。时间顺序数据存储设备301还可以包括一个或一个以上电源326,一个或一个以上有线或无线网络接口350,一个或一个以上输入输出接口358,和/或,一个或一个以上操作系统341。上文所描述的时间顺序数据存储方法中的步骤可以由时间顺序数据存储设备的结构实现。相应于上面的方法实施例,本发明实施例还提供了一种可读存储介质,下文描述的一种可读存储介质与上文描述的一种时间顺序数据存储方法可相互对应参照。一种可读存储介质,可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例的时间顺序数据存储方法的步骤。该可读存储介质具体可以为u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可存储程序代码的可读存储介质。本领域技术人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1