一种在REDIS上实现的存储大量时序数据的方法技术

技术编号:18007072 阅读:740 留言:0更新日期:2018-05-21 07:42
本发明专利技术公开了一种在REDIS上实现的存储大量时序数据的方法,该方法包括:基于Redis的SDS数据结构实现Gorilla压缩算法;基于Redis对象“redisObject”实现时间序列存储对象“TimeSeries”用来管理一个时间序列相关数据的存储;将时序数据的键值经过压缩后存储到Redis字典中;在Reids中实现基于时序数据对象的CRUD操作。本发明专利技术的有益效果:首先Redis时序数据存储方法可实现快速写入,单点插入可实现每秒20,000条;其次,借鉴Gorilla压缩算法的基础上将时序数据压缩存储到Redis中,节省了存储空间,从而节省成本;最后,Redis时序数据存储方法每秒能存储千万级的数据,并能毫秒级返回基于这些数据的查询,减少网络卡顿、网络延迟情况。

【技术实现步骤摘要】
一种在REDIS上实现的存储大量时序数据的方法
本专利技术涉及工业物联网领域,具体来说,涉及一种在REDIS上实现的存储大量时序数据的方法。
技术介绍
时序数据库用于存放时间序列(按时间顺序变化)的海量数据,并且需要支持时序数据的快速写入、持久化、多维度的聚合查询等基本功能。在工业物联网领域,随着智能化改造进程的推进,大量设备的工况数据需要存储起来,数据量极大。这些数据不但要实时生成,写入存储;还要支持快速查询,做可视化的展示,帮助管理者分析决策;并且也能够用来做大数据分析,发现深层次的问题,帮助企业节能减排,增加效益。对此,面对海量数据,传统关系型数据库在存储时间序列数据时无法满足这些需求。目前常用的时序数据库OpenTsdb底层使用Hbase作为其分布式存储引擎,采用的是LSMtree;Kairosdb底层使用Cassandra作为分布式存储引擎;在单机上InfluxDB采取类似于LSMtree的存储结构TSM。LSMtree核心思想就是通过内存写和后续磁盘的顺序写入获得更高的写入性能,避免了随机写入,但同时也牺牲了读取性能,因为同一个key的值可能存在于多个HFile中。时序数据库面向的是海量数据的写入存储读取,单机是无法解决问题的,所以需要采用多机存储,即分布式存储。Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型的高性能Key-Value数据库,并提供多种语言的API。redis是Nosql数据库中使用较为广泛的非关系型内存数据库,它支持复杂数据的存储,并显示出基于内存操作基础的高性能。Gorilla是Facebook内存级别的时序数据库,通过采用delta-of-delta编码的时间戳、浮点型值的XOR等压缩运算减少了10倍左右的存储空间,每秒能存储千万级的数据,并能毫秒级返回基于这些数据的查询,与传统的基于Hbase的TSDB相比,查询耗时缩短了73倍,吞吐量提高了14倍。
技术实现思路
针对相关技术中的上述技术问题,在借鉴Gorilla压缩算法的基础上将时序数据压缩存储到Redis中,结合Redis的高并发,本身群集的支持,及高可用性特点,本专利技术提出一种在REDIS上实现的存储大量时序数据的方法,能够在Redis中存储大量时序数据。为实现上述技术目的,本专利技术的技术方案是这样实现的:一种在REDIS上实现的存储大量时序数据的方法,包括以下步骤:S1基于Redis的SDS数据结构实现Gorilla压缩算法:首先实现基础的数据流对象“timeSeriesStream”,然后基于Gorilla算法先对插入数据进行压缩运算,将结果以二进制的形式插入的SDS数据结构中,创建iterator数据结构;S2基于Redis对象“redisObject”实现时间序列存储对象“TimeSeries”,“TimeSeries”用来管理一个时间序列相关数据的存储,通过Redis字典结构以KeyValue的形式记录所有时序数据内容,其中,Key为时序数据的唯一标识符,Value为“timeSeriesStream”数据结构;S3将时序数据的键值经过压缩后存储到Redis字典中,启用二进制压缩算法,将整个字典进行压缩存储;S4在Reids的命令解析层面中实现基于时序数据对象的CRUD操作;具体命令如下:1)TADDkeytimestampvalue将一个或多个时间序列数据插入到指定的key中2)TGETkey根据开始时间与结束时间和序列个数返回指定的时序数据3)TINFOkey根据时间序列ID查询序列统计信息4)TMADDTADD的批量方法5)TMGETTGET的批量方法S5基于Redis的RDB协议实现时序数据的持久化存储,将整个“timeSeriesStream”数据结构中的SDS结构以二进制的形式存储到RDB数据库中,并记录插入的中间状态;S6基于Redis的AOF持久化协议实现持久化存储,包括解析对应的相关命令,并以AOF文件格式存储;S7结合RedisCluster实现分布式高并发:实现时序数据标识的一致性Hash算法,根据计算得到的Hash值与群集节点id将不同时序标识和对应数据分配存储到不同节点,并通过Redis主备技术实现数据冗余;作为优选,S1具体包括:S11实现基础的数据流对象“timeSeriesStream”,包括时序数据起始时间、最近一次插入数据的时间戳、两次时间戳间隔“prev_timestamp_delta”、上一次时间点对应的时序数据以及基于二进制OR运算结果;S12实现基础的时序数据插入操作,基于Gorilla算法先对插入数据进行压缩运算,将结果以二进制的形式插入的SDS数据结构中;S13创建iterator数据结构,实现遍历数据流的接口。作为优选,S2具体包括:S21实现基础的double值与字符串转换方式,包括Hex字符串与数值字符串;S22通过Redis字典结构以KeyValue的形式记录所有时序数据内容,其中,Key为时序数据的唯一标识符,Value为“timeSeriesStream”数据结构;S23基于Redis字典实现插入时序数据的方法;S24基于Redis字典实现查找指定Key对应的时序数据的方法,查询时需要传入时序数据标识以及起始时间与结束时间,通过调用“timeSeriesStream”提供的遍历方法进行遍历;S25实现“timeSeriesStream”的统计查询方法,包括指定时序数据标识对应的数据总数,起始时间,结束时间。作为优选,S5具体包括:S51定义新的Redis对象枚举标明所要持久化存储的对象类型为时序数据;S52基于RedisRDB技术,将整个“timeSeriesStream”数据结构中的SDS结构以二进制的形式存储到RDB数据库中,并记录插入的中间状态;S53从RDB数据库中读取SDS数据及中间状态数据,以“timeSeriesStream”的数据结构返回给读取方法。作为优选,S7具体包括:S71实现时序数据标识的一致性Hash算法,计算Hash值;S72根据Hash值与群集节点id进行计算,将不同的时序标识及对应的数据分配存储到不同的节点,以达到分布式存储的目的;S73通过Redis的主备技术,实现数据冗余以达到高可用性。本专利技术的有益效果:首先Redis时序数据存储方法可实现快速写入,单点插入可实现每秒20,000条;其次,借鉴Gorilla压缩算法的基础上将时序数据压缩存储到Redis中,节省了存储空间,从而节省成本;最后,Redis时序数据存储方法每秒能存储千万级的数据,并能毫秒级返回基于这些数据的查询,减少网络卡顿、网络延迟情况。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是根据本专利技术实施例所述的一种在REDIS上实现的存储大量时序数据的方法的示意图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而本文档来自技高网
...
一种在REDIS上实现的存储大量时序数据的方法

【技术保护点】
一种在REDIS上实现的存储大量时序数据的方法,其特征在于,包括以下步骤:S1 基于Redis的SDS数据结构实现Gorilla压缩算法:首先实现基础的数据流对象“timeSeriesStream”,然后基于Gorilla算法先对插入数据进行压缩运算,将结果以二进制的形式插入的SDS数据结构中,创建iterator数据结构;S2基于Redis对象“redisObject”实现时间序列存储对象“TimeSeries”,“TimeSeries”用来管理一个时间序列相关数据的存储,通过Redis字典结构以Key Value的形式记录所有时序数据内容, 其中,Key 为时序数据的唯一标识符,Value为“timeSeriesStream”数据结构;S3 将时序数据的键值经过压缩后存储到Redis字典中,启用二进制压缩算法,将整个字典进行压缩存储;S4 在Reids的命令解析层面中实现基于时序数据对象的CRUD操作;S5 基于Redis的RDB协议实现时序数据的持久化存储,将整个“timeSeriesStream”数据结构中的SDS结构以二进制的形式存储到RDB数据库中,并记录插入的中间状态;S6 基于Redis的AOF持久化协议实现持久化存储,包括解析对应的相关命令,并以AOF文件格式存储;S7 结合Redis Cluster 实现分布式高并发:实现时序数据标识的一致性Hash算法,根据计算得到的Hash值与群集节点id将不同时序标识和对应数据分配存储到不同节点,并通过Redis主备技术实现数据冗余。...

【技术特征摘要】
1.一种在REDIS上实现的存储大量时序数据的方法,其特征在于,包括以下步骤:S1基于Redis的SDS数据结构实现Gorilla压缩算法:首先实现基础的数据流对象“timeSeriesStream”,然后基于Gorilla算法先对插入数据进行压缩运算,将结果以二进制的形式插入的SDS数据结构中,创建iterator数据结构;S2基于Redis对象“redisObject”实现时间序列存储对象“TimeSeries”,“TimeSeries”用来管理一个时间序列相关数据的存储,通过Redis字典结构以KeyValue的形式记录所有时序数据内容,其中,Key为时序数据的唯一标识符,Value为“timeSeriesStream”数据结构;S3将时序数据的键值经过压缩后存储到Redis字典中,启用二进制压缩算法,将整个字典进行压缩存储;S4在Reids的命令解析层面中实现基于时序数据对象的CRUD操作;S5基于Redis的RDB协议实现时序数据的持久化存储,将整个“timeSeriesStream”数据结构中的SDS结构以二进制的形式存储到RDB数据库中,并记录插入的中间状态;S6基于Redis的AOF持久化协议实现持久化存储,包括解析对应的相关命令,并以AOF文件格式存储;S7结合RedisCluster实现分布式高并发:实现时序数据标识的一致性Hash算法,根据计算得到的Hash值与群集节点id将不同时序标识和对应数据分配存储到不同节点,并通过Redis主备技术实现数据冗余。2.根据权利要求1所述的在REDIS上实现的存储大量时序数据的方法,其特征在于,S1具体包括:S11实现基础的数据流对象“timeSeriesStream”,包括时序数据起始时间、最近一次插入数据的时间戳、两次时间戳间隔“prev_timestamp_delta”、上一次时间点对应的时序数据以及基于二进制OR运...

【专利技术属性】
技术研发人员:徐汕刘强单酉刘明童奥黄文峰姜桥
申请(专利权)人:北京航天云路有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1