CN107391600A - 用于在内存中存取时序数据的方法和装置 - Google Patents
用于在内存中存取时序数据的方法和装置 Download PDFInfo
- Publication number
- CN107391600A CN107391600A CN201710524250.9A CN201710524250A CN107391600A CN 107391600 A CN107391600 A CN 107391600A CN 201710524250 A CN201710524250 A CN 201710524250A CN 107391600 A CN107391600 A CN 107391600A
- Authority
- CN
- China
- Prior art keywords
- information
- leaf node
- series data
- time series
- time
- 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.)
- Pending
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/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2477—Temporal data queries
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
-
- 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
- G06F16/2322—Optimistic concurrency control using timestamps
-
- 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/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- 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/24—Querying
- G06F16/242—Query formulation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Probability & Statistics with Applications (AREA)
- Fuzzy Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明的目的是提供一种用于存取时序数据的方法和装置。根据本发明的方法,包括:获取时序查询信息;基于所述时序查询信息,确定对应的时偏信息,其中,所述时偏信息包括小时信息、分钟信息和偏移信息;基于所述时偏信息,查找其对应的时间树上的叶子节点;在该叶子节点中基于所述偏移信息进行查询以获得相应的时序数据。本发明优点在于:具有较低复杂度,提高了时序数据的查询效率。并且,占用的内存较少,支持乱序写入。
Description
技术领域
本发明涉及计算机技术领域,尤其一种用于在内存中存取时序数据的方法和装置。
背景技术
随着计算机与互联网技术的发展,时序数据库得到越来越广泛的应用。时序数据库是存储海量时间序列数据(亦即,每个数据都与一个时间点信息对应)的数据库,能支持对这些海量数据的查询。
时序数据库的一个主要使用场景是监控查询,用户会频繁的定时的查询最近1分钟、1小时或1天的数据,这就要求时序数据库能对最近的数据进行快速的写入和读取。
一个典型的思路是将最近1小时或1天的时序数据持久化到硬盘的同时,缓存在内存中,从而实现对最近数据的快速的写入和读取。
然而,数据在内存中如何组织,将很大程度上影响数据的读写速度(由于时序数据库是写多读少的,因此应该首先优化写入速度,其次才是读取速度);另一方面,内存的成本比硬盘高很多,如何减少内存的占用,将影响数据存储的成本;最后,内存的大小是有限的,因此只能保存最近1小时或者1天的数据,超过时间的数据需要被清除,如何快速的清除这些过期的数据,影响系统的性能。
为解决该问题,现有的技术包括Facebook的Gorilla内存缓存系统等。具体地,Facebook的Gorilla内存缓存系统使用两级的索引结构去建立每个时间序列的id到数据的索引,每个时间序列的数据(timestamp和value)以两小时为分隔,每两小时内的数据都保存在一个string中,当前两小时的string是可写但只能追加,之前的string都是只读的。但其存在以下问题:(1)将两小时的数据保存在一个string结构中,当string容量不足时,要申请更大的空间,并将原有数据拷贝到新的空间中,写入性能较差;(2)查找数据时需要在两小时的string内以O(n)的时间复杂度进行查找,查询性能较差;(3)索引结构只是针对时间序列id,如果需要清除过期的数据,需要遍历所有时间序列,清除效率较低;(5)该系统对数据有一个限制,就是时序数据必须按时间戳顺序写入,不支持数据的乱序写入,限制了使用场景。
此外,还有一种思路,对缓存数据使用二叉排序树组织,保证数据根据timestamp有序,从而方便查询。该种方式的问题在于:(1)使用非平衡的二叉排序树,查询性能较差,最坏情况下需要O(n)的时间复杂度;(2)二叉树中每个节点需要保存左指针和右指针,需要额外消耗大量内存,成本较高。
发明内容
本发明的目的是提供一种用于存取时序数据的方法和装置。
根据本发明的方案,提供了一种存取时序数据的方法,其中,时序数据存储于时间树的叶子节点中,所述方法包括以下步骤:
-获取时序查询信息;
-基于所述时序查询信息,确定对应的时偏信息,其中,所述时偏信息包括小时信息、分钟信息和偏移信息;
-基于所述时偏信息,查找其对应的时间树上的叶子节点;
-在该叶子节点中基于所述偏移信息进行查询以获得相应的时序数据。
根据本发明的方案,提供了一种存取时序数据的存取装置,其中,时序数据存储于时间树的叶子节点中,所述存取装置包括:
第一获取装置,用于获取时序查询信息;
第一确定装置,用于基于所述时序查询信息,确定对应的时偏信息,其中,所述时偏信息包括小时信息、分钟信息和偏移信息;
第一查询装置,用于基于所述时偏信息,查找其对应的时间树上的叶子节点;
第二查询装置,用于在该叶子节点中基于所述偏移信息进行查询以获得相应的时序数据。
根据本发明的方案,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现所述的方法。
根据本发明的方案,提供了一种算机可读的存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现所述的方法。
与现有技术相比,本发明具有以下优点:根据本发明的方案,通过建立两级的树状结构,在时间树的根节点处查找叶子节点的时间复杂度仅为O(1),而在叶子节点中由于可采用二分法等方式,其查找时间复杂度为O(logN),显然,与现有技术的O(N)相比,本方案具有较低复杂度,提高了时序数据的查询效率。并且,与现有技术中的二叉树相比,根据本发明的数据结构占用的内存较少,并且通过在小时信息处采用二级索引的方式,能够方便地实现以小时为单位对过期数据进行清理。此外本方案中还能够方便地支持乱序写入的情况。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1示意出了根据本发明的一种优选实施例的用于在内存中存取时序数据的一种数据结构的结构示意图;
图2示意出了根据本发明的一种用于在内存中存取时序数据的方法流程图;
图3示意出了根据本发明的一种用于在内存中存取时序数据的结构示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本发明作进一步详细描述。
其中,执行本发明方法的存取装置通过计算机设备来实现。所述计算机具有存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行程序相应的计算机程序时实现如存取装置所执行的方法。此外,通过在计算机可读存储介质上存储相应的计算机程序,以使得处理器执行该程序时可实现如存取装置对应的方法。
其中,所述计算机设备包括一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。所述计算机设备包括网络设备和/或用户设备。
其中,所述用户设备包括但不限于任何一种可与用户触控方式进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、PDA、游戏机、或IPTV等。
其中,所述网络设备包括但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(Cloud Computing)的由大量主机或网络服务器构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。
其中,所述网络设备所处的网络包括但不限于互联网、广域网、城域网、局域网、VPN网络等。需要说明的是,所述用户设备、网络设备以及网络仅为举例,其他现有的或今后可能出现网络设备以及网络如可适用于本发明,也应包含在本发明保护范围以内,并以引用方式包含于此。
其中,根据本发明方法与装置可应用于内存中的时序数据的存取,更优选地,可应用于缓存中的时序数据的存取。
根据本发明的时序数据存储于时间树的叶子节点中。
其中,所述时序数据包括具有时间特性的数据信息。例如,与某一时间点对应的监控画面信息,又例如,与某一时间点对应的cpu频率信息等。
优选地,根据本发明的时序数据均具有相应的时间点信息。
优选地,所述时间点信息采用时间戳来表示。
其中,根据精确度或系统差异,时间点信息可采用秒或者毫秒等单位来表示。
例如,系统时间戳采用秒为单位,起始时间点为0点0时0秒,则接下去的1点40分30秒对应的时间戳为6030秒;如采用毫秒做单位,则当前的1点40分30秒对应的时间戳为6030×103毫秒。
本领域技术人员应可理解上述仅为举例,通常系统中往往采用从某一标准时刻累计至今的方式,例如,Unix系的时间戳是从世界标准时间(UTC,Coordinated UniversalTime)时间1970年1月1日0点开始累计至今的秒数或毫秒数等。
其中,本领域技术人员应可根据实际情况和需求来确定时间戳所采用的精度。
其中,根据本发明的时序数据存储时采用两级索引,其中,一级索引包括小时指针,其中,时序数据可基于其时间点信息对应的小时信息,来确定相应的小时指针。该小时指针指向该小时对应的时间树。
时间树用于存储至少一个分钟下的时序数据及其偏移信息。
其中,时间树包括多个叶子节点,叶子节点用于存储一分钟内的时序数据及其偏移信息。
其中,时间树中通过树节点,或者其他数组元素,来指向相应分钟的叶子节点。
优选地,根据本发明的一个实施例,时间树包括对应于每一分钟的分钟节点,该分钟节点下包括偏移节点,该叶子节点中用于存储该分钟的至少一个时序数据以及与该时序数据对应的偏移信息。
优选地,根据本发明的又一优选实施例,时间树在根节点维持一长度为60的数组,该数组的每一个元素对应一分钟指针,该分钟指针指向叶子节点。
其中,所述偏移信息包括一分钟内的时间偏移量。偏移信息可根据时间点信息所采用的精度来表示。
参考图1,图1示意出了本发明的一种优选实施例的存取时序数据的一种数据结构的结构示意图。
图1中示意出了一级索引、二级索引、时间树以及一叶子节点的数据结构。
其中,一级索引采用0-23的数组形式,数组中的每一个元素为一小时指针,例如,0位的元素为第0小时的小时指针。该小时指针指向二级索引,根据本实施例的二级索引采用键值对(key-value)的方式来组织,其中,键为tsid,与小时信息对应,值为该小时相对应的时间树的指针。
其中,时间树的根节点包括一长度为60的数组,其中每个元素对应一分钟,当该分钟存在相应的时序数据时,该分钟的数组元素指向一叶子节点,该叶子节点中包括分别用于存储偏移信息和时序数据的数组。其中,当某一分钟下尚无时序数据时,该分钟的数组元素设定为null。
接着,结合图2所示意的方法流程图,来做进一步的说明。图2示意出了根据本发明的一种用于在内存中存取时序数据的方法流程图,根据本发明的方法包括由存取装置执行的步骤S1、步骤S2、步骤S3以及步骤S4。
在步骤S1中,存取装置获取时序查询信息。
其中,所述时序查询信息包括至少一个时间点信息.
优选地,所述时序查询信息可以为包括多个时间点信息的一段时间信息。
具体地,存取装置接收来自网络或者本地提交的时序查询信息。
接着,在步骤S2中,存取装置基于所述时序查询信息,确定对应的时偏信息。
其中,所述时偏信息包括小时信息、分钟信息和偏移信息。
具体地,通过相应的单位换算来确定于时序查询信息对应的时偏信息。
优选地,当所述时序查询信息包含多个时间点信息时,分别确定各个时间点信息对应的时偏信息。
例如,当时间戳采用毫秒作为单位时,可采用以下公式来确定时间点信息对应的时偏信息。
小时信息=(时间点信息/3,600,000)%24;
分钟信息=(时间点信息/60,000)%60;
偏移信息=时间点信息%60,000;
其中,本发明中“/”表示除法,%表示模除。
其中,本领域技术人员应可根据实际情况和需求来确定,所需使用的确定时偏信息的方式。
接着,在步骤S3中,存取装置基于所述时偏信息,查找其对应的时间树上的叶子节点。
其中,叶子节点中用于存储一分钟内的至少一个时序数据以及与该时序数据对应的偏移信息。
存取装置根据小时信息获取对应的小时指针,并基于该小时指针来获得相应的时间树。接着,存取装置基于所述分钟信息,确定所述时间树中该分钟信息对应的叶子节点。
接着在步骤S4中,存取装置在该叶子节点中基于所述偏移信息进行查询以获得相应的时序数据。
优选地,该存取装置可采用二分法基于偏移信息进行查询,以获得时序数据。
根据本发明的第一示例,用户提交一时序查询信息:“1点30分5秒至1点30分10秒的cpu使用频率信息”。当前存取设备采用秒作为时间精度,时序数据的存储结构如图1所示。则存取装置在步骤S1处获得该时序查询信息后,确定其对应的时间点信息包括从5405秒到5410秒共5项。
接着,存取装置在步骤S2中,分别确定各项时间点信息对应的时偏信息。例如,对于时间点信息5405,其小时信息=(5405/3600)%24=1;其分钟信息=(5405/60)%60=30;其偏移信息=(5405%60)=5;则存取装置在步骤S3中,根据小时信息1,确定一级索引中标号为1的项对应的小时指针,并获取该小时指针对应的时间树。
接着,存储设备在步骤S4中,在该时间树根节点的数组中查询第30分钟对应的数组元素,并基于该元素指向的叶子节点,在该叶子节点的偏移信息数组中查询偏移信息为5的元素,并获取与该偏移信息为5的元素具有相同下标的时序数据,作为查询获得的时序数据。
根据本发明的一个优选实施例,根据本发明的方法还包括步骤S5(图未示)和S6(图未示)。
在步骤S5中,存取装置判断所述叶子节点下是否存在乱序插入的时序数据。
具体地,该分钟下的叶子节点中可设置一指示信息,当顺序插入时,该指示信息为“true”;当乱序插入时,该指示信息为“false”。则存取装置根据该指示信息来判断当前是否为乱序插入。
接着,在步骤S6中,当存在乱序插入的数据时,存取装置基于所述偏移信息对相应的时序数据进行排序。
具体地,存取装置根据偏移信息的大小对时序数据进行排序。
其中,本领域技术人员应可根据实际情况和需求,选择排序的方式,此处不再赘述。
根据本发明的一个优选实施例,根据本发明的方法还包括步骤S7(图未示)、步骤S8(图未示)、步骤S9(图未示)以及步骤S10(图未示)。
在步骤S7中,存取装置获取时序数据。
其中,存取装置可基于物联网实时获取时序数据,或者,从网络获取时序数据,或者,从本地存储设备获取时序数据。
具体地,存取装置获取时序数据的数据值本身及其对应的时间点信息。
接着,在步骤S8中,存取装置根据所述时序数据的时间点信息,确定其时偏信息。
其中,存取装置根据所述时序数据的时间点信息,确定其时偏信息的方式已在前述步骤S2中存取装置基于所述时序查询信息,确定对应的时偏信息的说明过程中提及,此处不再赘述。
接着,在步骤S9中,存取装置根据时偏信息查找其对应的时间树上的叶子节点。
其中,所述存取装置根据时偏信息查找其对应的时间树上的叶子节点的方式与前述步骤S3中存取装置基于所述时偏信息,查找其对应的时间树上的叶子节点的方式相同或相似,此处不再赘述。
接着,在步骤S10中,当查询到该叶子节点后,存取装置将所述时序数据及其相应的偏移信息插入该叶子节点中。
具体地,存取装置可基于顺序插入的规则,将时序数据及其偏移信息插入至数组最后,或者;存取装置可乱序插入,随机将时序数据及其偏移信息相应地插入至数组某一位置。
优选地,插入后的时序数据及其偏移信息在存储结构中的下标一致。
根据本方案的一个优选方案,在步骤S10之前,先判断叶子节点的存储空间是否已满,当该叶子节点的存储空间已满时,存取装置为该叶子节点分配更多的存储空间;并将所述时序数据及其偏移信息存储至该叶子节点的存储空间中。
优选地,存取装置给该叶子节点分配更多的存储空间后,先将原先存储的时序数据及相应的偏移信息复制到新的存储空间,然后插入当前的时序数据和偏移信息。
根据本方案的一个更优选方案,存取装置在查询叶子节点时,分别判断是否存在与该时偏信息中的各项信息对应的存储元素;当不存在与所述时偏信息中的各个信息对应的存储元素时,新建该存储元素。
具体地,存取装置根据该时偏信息中的小时信息,确定是否存在与该小时信息对应的时间树;当不存在该时间树时,新建与该小时信息对应的时间树;接着,存取装置根据该时偏信息中的分钟信息,判断该小时信息对应地方时间树中是否存在与该分钟信息对应的分钟元素;当不存在该分钟元素时,新建与该分钟信息对应的分钟元素;接着,存取装置根据该时偏信息中的偏移信息,判断该小时信息对应的分钟节点下是否存在与该偏移信息对应的叶子节点;当不存在该叶子节点时,新建与该偏移信息对应的叶子节点。
优选地,时间树内包含一空间尺寸信息,该空间尺寸信息用于指示当前各个叶子节点中采用的数组空间的最大值。
在新建叶子节点时,根据该待新建的叶子节点所对应的时间树中,存储空间最大的叶子节点,确定该待新建的叶子节点对应的存储空间。
优选地,当存取装置给叶子节点分配的新空间大于前述时间树内的空间尺寸信息时,将该时间树的空间尺寸信息更新为该新空间的尺寸信息。
根据本发明的一个优选方案,其中,当存取装置写入/读取时序数据时,锁定相应的存储结构内的数据。
具体地,当存取装置在叶子节点中查询与偏移信息对应的存储结构时,先锁定该叶子节点,以避免同时被其他用户读/写该叶子节点内的数据。并当读取/写入相应的时序数据后,再打开该锁定,供其他用户读/写该叶子节点内的数据。
优选地,在步骤S3或步骤S9之前锁定相应的叶子节点,并在步骤S4或步骤S10之后解锁。
根据本发明的方案,通过建立两级的树状结构,在时间树的根节点处查找叶子节点的时间复杂度仅为O(1),而在叶子节点中由于可采用二分法等方式,其查找时间复杂度为O(logN),显然,与现有技术的O(N)相比,本方案具有较低复杂度,提高了时序数据的查询效率。并且,与现有技术中的二叉树相比,根据本发明的数据结构占用的内存较少,并且通过在小时信息处采用二级索引的方式,能够方便地实现以小时为单位对过期数据进行清理。此外本方案中还能够方便地支持乱序写入的情况。
接着,结合图3所示意的结构示意图,来做进一步的说明。图3示意出了根据本发明的一种用于在内存中存取时序数据的存取装置,根据本发明的存取装置包括用于获取时序查询信息的装置(以下称为“第一获取装置1”)、用于基于所述时序查询信息,确定对应的时偏信息的装置(以下称为“第一确定装置2”)、用于基于所述时偏信息,查找其对应的时间树上的叶子节点的装置(以下称为“第一查询装置3”)、以及用于在该叶子节点中基于所述偏移信息进行查询以获得相应的时序数据的装置(以下称为“第二查询装置4”)。
第一获取装置1获取时序查询信息。
其中,所述时序查询信息包括至少一个时间点信息.
优选地,所述时序查询信息可以为包括多个时间点信息的一段时间信息。
具体地,第一获取装置1接收来自网络或者本地提交的时序查询信息。
接着,第一确定装置2基于所述时序查询信息,确定对应的时偏信息。
其中,所述时偏信息包括小时信息、分钟信息和偏移信息。
具体地,通过相应的单位换算来确定于时序查询信息对应的时偏信息。
优选地,当所述时序查询信息包含多个时间点信息时,分别确定各个时间点信息对应的时偏信息。
例如,当时间戳采用毫秒作为单位时,可采用以下公式来确定时间点信息对应的时偏信息。
小时信息=(时间点信息/3,600,000)%24;
分钟信息=(时间点信息/60,000)%60;
偏移信息=时间点信息%60,000;
其中,本发明中“/”表示除法,%表示模除。
其中,本领域技术人员应可根据实际情况和需求来确定,所需使用的确定时偏信息的方式。
接着,第一查询装置3基于所述时偏信息,查找其对应的时间树上的叶子节点。
其中,叶子节点中用于存储一分钟内的至少一个时序数据以及与该时序数据对应的偏移信息。
第一查询装置3根据小时信息获取对应的小时指针,并基于该小时指针来获得相应的时间树。接着,第一查询装置3基于所述分钟信息,确定所述时间树中该分钟信息对应的叶子节点。
接着,第二查询装置4在该叶子节点中基于所述偏移信息进行查询以获得相应的时序数据。
优选地,该第二查询装置4可采用二分法基于偏移信息进行查询,以获得时序数据。
根据本发明的第一示例,用户提交一时序查询信息:“1点30分5秒至1点30分10秒的CPU使用频率信息”。当前存取设备采用秒作为时间精度,时序数据的存储结构如图1所示。则第一获取装置1获得该时序查询信息后,确定其对应的时间点信息包括从5405秒到5410秒共5项。
接着,第一确定装置2分别确定各项时间点信息对应的时偏信息。例如,对于时间点信息5405,其小时信息=(5405/3600)%24=1;其分钟信息=(5405/60)%60=30;其偏移信息=(5405%60)=5;则第一查询装置3根据小时信息1,确定一级索引中标号为1的项对应的小时指针,获取该小时指针对应的时间树,并在该时间树根节点的数组中查询第30分钟对应的数组元素,并基于该元素指向的叶子节点;接着,第二查询装置4在该叶子节点的偏移信息数组中查询偏移信息为5的元素,并获取与该偏移信息为5的元素具有相同下标的时序数据,作为查询获得的时序数据。
根据本发明的一个优选实施例,根据本发明的存取装置还包括:用于判断所述叶子节点下是否存在乱序插入的时序数据的装置(以下称为“判断装置”,图未示),和用于当存在乱序插入的数据时,先基于所述偏移信息对相应的时序数据进行排序的装置(以下称为“排序装置”,图未示)。
判断装置判断所述叶子节点下是否存在乱序插入的时序数据。
具体地,该分钟下的叶子节点中可设置一指示信息,当顺序插入时,该指示信息为“true”;当乱序插入时,该指示信息为“false”。则判断装置根据该指示信息来判断当前是否为乱序插入。
接着,当存在乱序插入的数据时,排序装置基于所述偏移信息对相应的时序数据进行排序。
具体地,排序装置根据偏移信息的大小对时序数据进行排序。
其中,本领域技术人员应可根据实际情况和需求,选择排序的方式,此处不再赘述。
根据本发明的一个优选实施例,根据本发明的存取装置还包括:用于获取时序数据的装置(以下称为“第二获取装置”,图未示);用于根据所述时序数据的时间点信息,确定其时偏信息的装置(以下称为“第二确定装置”,图未示);用于根据时偏信息查找其对应的时间树上的叶子节点的装置(以下称为“第三查询装置”,图未示);以及,用于当查询到该叶子节点后,将所述时序数据及其相应的偏移信息插入该叶子节点中的装置(以下称为“插入装置”,图未示)。
第二获取装置获取时序数据。
其中,第二获取装置可基于物联网实时获取时序数据,或者,从网络获取时序数据,或者,从本地存储设备获取时序数据。
具体地,第二获取装置获取时序数据的数据值本身及其对应的时间点信息。
接着,第二确定装置根据所述时序数据的时间点信息,确定其时偏信息。
其中,第二确定装置根据所述时序数据的时间点信息,确定其时偏信息的方式已在前述第一确定装置2基于所述时序查询信息,确定对应的时偏信息的说明过程中提及,此处不再赘述。
接着,第三查询装置根据时偏信息查找其对应的时间树上的叶子节点。
其中,所述第三查询装置根据时偏信息查找其对应的时间树上的叶子节点的方式与前述第一查询装置3存取装置基于所述时偏信息,查找其对应的时间树上的叶子节点的方式相同或相似,此处不再赘述。
接着,当查询到该叶子节点后,插入装置将所述时序数据及其相应的偏移信息插入该叶子节点中。
具体地,插入装置可基于顺序插入的规则,将时序数据及其偏移信息插入至数组最后,或者;插入装置可乱序插入,随机将时序数据及其偏移信息相应地插入至数组某一位置。
优选地,插入后的时序数据及其偏移信息在存储结构中的下标一致。
根据本方案的一个优选方案,在插入时序数据之前,先判断叶子节点的存储空间是否已满,当该叶子节点的存储空间已满时,存取装置为该叶子节点分配更多的存储空间;并将所述时序数据及其偏移信息存储至该叶子节点的存储空间中。
优选地,存取装置给该叶子节点分配更多的存储空间后,先将原先存储的时序数据及相应的偏移信息复制到新的存储空间,然后插入当前的时序数据和偏移信息。
根据本方案的一个更优选方案,存取装置在查询叶子节点时,分别判断是否存在与该时偏信息中的各项信息对应的存储元素;当不存在与所述时偏信息中的各个信息对应的存储元素时,新建该存储元素。
具体地,存取装置根据该时偏信息中的小时信息,确定是否存在与该小时信息对应的时间树;当不存在该时间树时,新建与该小时信息对应的时间树;接着,存取装置根据该时偏信息中的分钟信息,判断该小时信息对应地方时间树中是否存在与该分钟信息对应的分钟元素;当不存在该分钟元素时,新建与该分钟信息对应的分钟元素;接着,存取装置根据该时偏信息中的偏移信息,判断该小时信息对应的分钟节点下是否存在与该偏移信息对应的叶子节点;当不存在该叶子节点时,新建与该偏移信息对应的叶子节点。
优选地,时间树内包含一空间尺寸信息,该空间尺寸信息用于指示当前各个叶子节点中采用的数组空间的最大值。
在新建叶子节点时,根据该待新建的叶子节点所对应的时间树中,存储空间最大的叶子节点,确定该待新建的叶子节点对应的存储空间。
优选地,当存取装置给叶子节点分配的新空间大于前述时间树内的空间尺寸信息时,将该时间树的空间尺寸信息更新为该新空间的尺寸信息。
根据本发明的一个优选方案,其中,当存取装置写入/读取时序数据时,锁定相应的存储结构内的数据。
具体地,当存取装置在叶子节点中查询与偏移信息对应的存储结构时,先锁定该叶子节点,以避免同时被其他用户读/写该叶子节点内的数据。并当读取/写入相应的时序数据后,再打开该锁定,供其他用户读/写该叶子节点内的数据。
优选地,在第一查询装置3或第三查询装置执行操作之前锁定相应的叶子节点,并在第二查询装置4或插入装置执行操作之后解锁。
根据本发明的方案,通过建立两级的树状结构,在时间树的根节点处查找叶子节点的时间复杂度仅为O(1),而在叶子节点中由于可采用二分法等方式,其查找时间复杂度为O(logN),显然,与现有技术的O(N)相比,本方案具有较低复杂度,提高了时序数据的查询效率。并且,与现有技术中的二叉树相比,根据本发明的数据结构占用的内存较少,并且通过在小时信息处采用二级索引的方式,能够方便地实现以小时为单位对过期数据进行清理。此外本方案中还能够方便地支持乱序写入的情况。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (20)
1.一种在内存中存取时序数据的方法,其中,时序数据存储于时间树的叶子节点中,所述方法包括以下步骤:
-获取时序查询信息;
-基于所述时序查询信息,确定对应的时偏信息,其中,所述时偏信息包括小时信息、分钟信息和偏移信息;
-基于所述时偏信息,查找其对应的时间树上的叶子节点;
-在该叶子节点中基于所述偏移信息进行查询以获得相应的时序数据。
2.根据权利要求1所述的方法,其中,所述时间树包括对应于每一分钟的分钟元素,该分钟元素指向偏移节点,该叶子节点中用于存储该时序数据以及与该时序数据对应的偏移信息。
3.根据权利要求1或2所述的方法,其中,所述小时信息采用两层索引结构,其中,第一级索引包括小时指针,指向该小时的二级索引信息,该二级索引信息指向该小时的时间树。
4.根据权利要求1至3中任一项所述的方法,其中,所述方法在步骤d之前还包括以下步骤:
-所述叶子节点下是否存在乱序插入的时序数据;
-当存在乱序插入的数据时,先基于所述偏移信息对相应的时序数据进行排序。
5.根据权利要求1至4中任一项所述的方法,其中,所述方法还包括以下步骤:
-获取时序数据;
-根据所述时序数据的时间点信息,确定其时偏信息;
-根据时偏信息查找其对应的时间树上的叶子节点;
-当查询到该叶子节点后,将所述时序数据及其相应的偏移信息插入该叶子节点中。
6.根据权利要求5所述的方法,其中,将所述时序数据及其相应的偏移信息插入该叶子节点中的步骤进一步包括:
-当该叶子节点的存储空间已满时,为该叶子节点分配更多的存储空间;
-将所述时序数据及其偏移信息存储至该叶子节点的存储空间中。
7.根据权利要求6所述的方法,其中,所述方法还包括以下步骤:
-分别判断是否存在与该时偏信息中的各项信息对应的存储结构;
-当不存在与所述时偏信息中的各个信息对应的存储结构时,新建该存储结构。
8.根据权利要求7所述的方法,其中,对于时偏信息中的偏移信息,该判断步骤进一步包括:
-判断是否存在与该偏移信息对应的叶子节点;
-当不存在该叶子节点时,新建该叶子节点。
9.根据权利要求8所述的方法,其中,所述新建叶子节点的步骤进一步包括:
-根据该待新建的叶子节点所对应的时间树中,存储空间最大的叶子节点的,确定待新建的叶子节点对应的存储空间。
10.根据权利要求1至9中任一项所述的方法,其中,所述方法还包括以下步骤:
-当写入/读取时序数据时,锁定相应的存储结构内的数据。
11.一种在内存中存取时序数据的存取装置,其中,时序数据存储于时间树的叶子节点中,所述存取装置包括:
用于获取时序查询信息的装置;
用于基于所述时序查询信息,确定对应的时偏信息的装置,其中,所述时偏信息包括小时信息、分钟信息和偏移信息;
用于基于所述时偏信息,查找其对应的时间树上的叶子节点的装置;
用于在该叶子节点中基于所述偏移信息进行查询以获得相应的时序数据的装置。
12.根据权利要求11所述的存取装置,其中,所述存取装置还包括:
用于判断所述叶子节点下是否存在乱序插入的时序数据的装置;
用于当存在乱序插入的数据时,先基于所述偏移信息对相应的时序数据进行排序的装置。
13.根据权利要求11或12所述的存取装置,其中,所述存取装置还包括:
用于获取时序数据的装置;
用于根据所述时序数据的时间点信息,确定其时偏信息的装置;
用于根据时偏信息查找其对应的时间树上的叶子节点的装置;
用于当查询到该叶子节点后,将所述时序数据及其相应的偏移信息插入该叶子节点中的装置。
14.根据权利要求13所述的存取装置,其中,存取装置进一步包括:
用于当该叶子节点的存储空间已满时,为该叶子节点分配更多的存储空间的装置;
用于将所述时序数据及其偏移信息存储至该叶子节点的存储空间中的装置。
15.根据权利要求14所述的存取装置,其中,所述存取装置还包括:
用于分别判断是否存在与该时偏信息中的各项信息对应的存储结构的装置;
用于当不存在与所述时偏信息中的各个信息对应的存储结构时,新建该存储结构的装置。
16.根据权利要求15所述的存取装置,其中,对于时偏信息中的偏移信息,该存取装置进一步包括:
用于判断是否存在与该偏移信息对应的叶子节点的装置;
用于当不存在该叶子节点时,新建该叶子节点的装置。
17.根据权利要求16所述的存取装置,其中,所述存取装置进一步包括:
用于根据该待新建的叶子节点所对应的时间树中,存储空间最大的叶子节点的,确定待新建的叶子节点对应的存储空间的装置。
18.根据权利要求11至17中任一项所述的存取装置,其中,所述存取装置还包括:
用于当写入/读取时序数据时,锁定相应的存储结构内的数据的装置。
19.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-10中任一所述的方法。
20.一种计算机可读的存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-10中任一所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710524250.9A CN107391600A (zh) | 2017-06-30 | 2017-06-30 | 用于在内存中存取时序数据的方法和装置 |
US15/902,440 US11294920B2 (en) | 2017-06-30 | 2018-02-22 | Method and apparatus for accessing time series data in memory |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710524250.9A CN107391600A (zh) | 2017-06-30 | 2017-06-30 | 用于在内存中存取时序数据的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107391600A true CN107391600A (zh) | 2017-11-24 |
Family
ID=60334751
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710524250.9A Pending CN107391600A (zh) | 2017-06-30 | 2017-06-30 | 用于在内存中存取时序数据的方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11294920B2 (zh) |
CN (1) | CN107391600A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108228865A (zh) * | 2018-01-15 | 2018-06-29 | 沈阳延云云计算技术有限公司 | 一种数据查询方法和装置 |
CN108268589A (zh) * | 2017-12-05 | 2018-07-10 | 北京百度网讯科技有限公司 | 时序数据的聚合查询方法、装置、计算机设备及可读介质 |
CN110569397A (zh) * | 2019-09-06 | 2019-12-13 | 百度在线网络技术(北京)有限公司 | 网络社区的信息查询方法、装置、设备及存储介质 |
CN111367916A (zh) * | 2020-03-04 | 2020-07-03 | 浙江大华技术股份有限公司 | 一种数据存储方法及装置 |
CN112131433A (zh) * | 2020-08-20 | 2020-12-25 | 贝壳技术有限公司 | 区间计数查询方法及装置 |
CN113282604A (zh) * | 2021-07-14 | 2021-08-20 | 北京远舢智能科技有限公司 | 基于消息队列实现的高可用时序数据库集群系统 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020047584A1 (en) * | 2018-09-04 | 2020-03-12 | Future Grid Pty Ltd | Method and system for indexing of time-series data |
GB2592421B (en) * | 2020-02-27 | 2022-03-02 | Crfs Ltd | Real-time data processing |
CN114116795B (zh) * | 2021-11-01 | 2022-12-20 | 北京力控元通科技有限公司 | 一种数据存储和查询方法、装置、存储介质及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103186537A (zh) * | 2011-12-27 | 2013-07-03 | 腾讯科技(北京)有限公司 | 一种基于索引排序的数据读写方法及装置 |
CN103488727A (zh) * | 2013-09-16 | 2014-01-01 | 河海大学 | 基于周期对数的二维时序数据存储和查询方法 |
CN104750708A (zh) * | 2013-12-27 | 2015-07-01 | 华为技术有限公司 | 一种时空数据的索引建立方法、查询方法、装置及设备 |
CN106844555A (zh) * | 2016-12-30 | 2017-06-13 | 江苏瑞中数据股份有限公司 | 一种用于电网wams系统的时序数据存储方法 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5440730A (en) * | 1990-08-09 | 1995-08-08 | Bell Communications Research, Inc. | Time index access structure for temporal databases having concurrent multiple versions |
US6192051B1 (en) * | 1999-02-26 | 2001-02-20 | Redstone Communications, Inc. | Network router search engine using compressed tree forwarding table |
US6694323B2 (en) * | 2002-04-25 | 2004-02-17 | Sybase, Inc. | System and methodology for providing compact B-Tree |
US20050182776A1 (en) * | 2004-02-18 | 2005-08-18 | Clark Yennie | Time-addressed database management system |
JP2008083769A (ja) * | 2006-09-26 | 2008-04-10 | Just Syst Corp | 文書検索装置および文書検索方法 |
US8261312B2 (en) * | 2008-06-27 | 2012-09-04 | Cisco Technology, Inc. | Linear hint video streaming |
US7868789B1 (en) * | 2009-06-28 | 2011-01-11 | Sap Ag | Dictionary-based order-preserving string compression for main memory column stores |
US20120197900A1 (en) * | 2010-12-13 | 2012-08-02 | Unisys Corporation | Systems and methods for search time tree indexes |
US8868531B2 (en) * | 2012-09-10 | 2014-10-21 | Apple Inc. | Concurrent access methods for tree data structures |
US9916356B2 (en) * | 2014-03-31 | 2018-03-13 | Sandisk Technologies Llc | Methods and systems for insert optimization of tiered data structures |
US10445433B2 (en) * | 2014-04-28 | 2019-10-15 | Venkatachary Srinivasan | Methods and systems of query engines and secondary indexes implemented in a distributed database |
-
2017
- 2017-06-30 CN CN201710524250.9A patent/CN107391600A/zh active Pending
-
2018
- 2018-02-22 US US15/902,440 patent/US11294920B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103186537A (zh) * | 2011-12-27 | 2013-07-03 | 腾讯科技(北京)有限公司 | 一种基于索引排序的数据读写方法及装置 |
CN103488727A (zh) * | 2013-09-16 | 2014-01-01 | 河海大学 | 基于周期对数的二维时序数据存储和查询方法 |
CN104750708A (zh) * | 2013-12-27 | 2015-07-01 | 华为技术有限公司 | 一种时空数据的索引建立方法、查询方法、装置及设备 |
CN106844555A (zh) * | 2016-12-30 | 2017-06-13 | 江苏瑞中数据股份有限公司 | 一种用于电网wams系统的时序数据存储方法 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108268589A (zh) * | 2017-12-05 | 2018-07-10 | 北京百度网讯科技有限公司 | 时序数据的聚合查询方法、装置、计算机设备及可读介质 |
CN108228865A (zh) * | 2018-01-15 | 2018-06-29 | 沈阳延云云计算技术有限公司 | 一种数据查询方法和装置 |
CN110569397A (zh) * | 2019-09-06 | 2019-12-13 | 百度在线网络技术(北京)有限公司 | 网络社区的信息查询方法、装置、设备及存储介质 |
CN111367916A (zh) * | 2020-03-04 | 2020-07-03 | 浙江大华技术股份有限公司 | 一种数据存储方法及装置 |
CN111367916B (zh) * | 2020-03-04 | 2023-03-31 | 浙江大华技术股份有限公司 | 一种数据存储方法及装置 |
CN112131433A (zh) * | 2020-08-20 | 2020-12-25 | 贝壳技术有限公司 | 区间计数查询方法及装置 |
CN112131433B (zh) * | 2020-08-20 | 2021-10-29 | 贝壳找房(北京)科技有限公司 | 区间计数查询方法及装置 |
CN113282604A (zh) * | 2021-07-14 | 2021-08-20 | 北京远舢智能科技有限公司 | 基于消息队列实现的高可用时序数据库集群系统 |
CN113282604B (zh) * | 2021-07-14 | 2021-10-22 | 北京远舢智能科技有限公司 | 基于消息队列实现的高可用时序数据库集群系统 |
Also Published As
Publication number | Publication date |
---|---|
US20190005101A1 (en) | 2019-01-03 |
US11294920B2 (en) | 2022-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391600A (zh) | 用于在内存中存取时序数据的方法和装置 | |
US9952783B2 (en) | Data processing method and apparatus, and shared storage device | |
US20130013602A1 (en) | Database system | |
CN106911743B (zh) | 小文件的写聚合、读聚合方法及系统和客户端 | |
Dai et al. | IOGP: An incremental online graph partitioning algorithm for distributed graph databases | |
CN110321325A (zh) | 文件索引节点查找方法、终端、服务器、系统及存储介质 | |
EP3251033B1 (en) | Hybrid data distribution in a massively parallel processing architecture | |
EP3401807B1 (en) | Synopsis based advanced partition elimination | |
CN108694188B (zh) | 一种索引数据更新的方法以及相关装置 | |
CN106294772A (zh) | 分布式内存列式数据库的缓存管理方法 | |
CN106682042B (zh) | 一种关系数据缓存及查询方法及装置 | |
US20160314177A1 (en) | Method and apparatus of maintaining data for online analytical processing in a database system | |
US20150363446A1 (en) | System and Method for Indexing Streams Containing Unstructured Text Data | |
CN104956341A (zh) | 数据迁移方法、装置和处理器 | |
Pei et al. | An efficient query scheme for hybrid storage blockchains based on merkle semantic trie | |
CN104978324A (zh) | 一种数据处理方法和装置 | |
CN104123356A (zh) | 一种大数据量下提高网页响应的方法 | |
CN108647266A (zh) | 一种异构数据快速分布存储、交互方法 | |
CN112749198A (zh) | 一种基于版本号的多级数据缓存方法及装置 | |
Eyal et al. | Cache serializability: Reducing inconsistency in edge transactions | |
US9390131B1 (en) | Executing queries subject to different consistency requirements | |
Feng et al. | HQ-Tree: A distributed spatial index based on Hadoop | |
CN108733584B (zh) | 用于优化数据缓存的方法和设备 | |
US11210272B2 (en) | Low latency cache synchronization in distributed databases | |
CN113127717A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171124 |
|
RJ01 | Rejection of invention patent application after publication |