1.时序数据库与时序数据概论

      时序数据库是非关系型数据库的一种,其全称为时间序列数据库(Time Series Database)。时序数据库主要用于存取具有时间特征的数据。

时序数据是随时间产生的数据,其有着产生频率快、依赖时间、数据量庞大的特点。由于时序数据的数据量非常庞大,传统的关系型数据库在底层数据结构(可参见笔者文章)上导致了其无法对该类数据进行有效的存储和管理。数据数据库通过时序数据的特性,对时序数据采用特殊的存储方式,这使时序大数据得到了有效的管理。

例如,基于HBase的opentsdb,其采用“数据便是索引”的存储方式(关于HBase数据结构,可参加笔者相关文章),使得主键索引的利用更加高效,在大量、高并发的查询时,极大地降低了系统的I/O。

2.数据写入与查询(http接口形式)

以opentsdb为例:

1)数据写入:

官方文档地址:http://opentsdb.net/docs/build/html/api_http/put.html

数据写入数据结构:

[{"metric":"city.temperature","value":"24.7","timestamp":1572331517,"tags":{"city":"beijing"}}
]

以上示例便为各大TSDB常见的数据结构。metric为指标,value为该指标在该时刻的值,timestamp为时间戳,tags便为该指标的标记。

如上图所示,我们这条数据上报成功了。

2)数据查询

官方文档地址:http://opentsdb.net/docs/build/html/api_http/query/index.html

数据查询常用数据结构:

{"start": 1572331507,"end": 1572331527,"queries": [{"aggregator": "","metric": "city.temperature","downsample": "","rate": true,"filters": [{"type": "literal_or","tagk": "city","filter": "beijing","groupBy": false}]}]
}

字段说明:start查询开始时间,end查询结束时间,queries为查询的基本操作,aggregator为聚合方式(如avg、max、min、last、sum等),metric为查询的指标,downsample为采样方式(如1min-avg-null、1h-max-zero等,形式为采样时间-采样方式-补值策略),rate为是否求速率(根据需要决定),filters为根据tag进行过滤查询,type常用的为literal_or(查询的tag值之间为或的关系)和wildcard(使用通配符),groupBy为是否分组,将在下面进一步说明。

3.关于aggregator与downsample

时序数据是以时间线(TS)的形式存储在TSDB中的,现在,我们再上报1个城市的数据,并且对城市北京补充一些温度值:

[{"metric":"city.temperature","value":"24.7","timestamp":1572331517,"tags":{"city":"beijing"}},{"metric":"city.temperature","value":"23","timestamp":1572331577,"tags":{"city":"beijing"}},{"metric":"city.temperature","value":"21","timestamp":1572331637,"tags":{"city":"beijing"}},{"metric":"city.temperature","value":"27","timestamp":1572331517,"tags":{"city":"shanghai"}},{"metric":"city.temperature","value":"24","timestamp":1572331577,"tags":{"city":"shanghai"}},{"metric":"city.temperature","value":"22","timestamp":1572331637,"tags":{"city":"shanghai"}}
]

新的全部数据如上所示,其在TSDB中的时间线如下图所示:

在TSDB中,时间线的组织是以metric和tags进行组织的,例如,如果再上报一条:

[{"metric":"city.temperature","value":"24.7","timestamp":1572331517,"tags":{"city":"beijing","address":"tiananmen"}}
]

此时便会变为三条时间线,因此,只要metric和tag有任何不一样,便会产生一条时间线。

1)aggregator为不同时间线间数据的聚合方式,例如在上面的两条时间线中,我们要求每一时刻的两个城市(所有城市)的温度之和,可以这样请求:

在这个请求中,我们将aggregator设置为sum(当然也可以尝试max、min等),此时便求出了两个城市在不同时间的温度之和,aggregator的时间线操作如下图所示:

2)关于downsample,假如我们一秒一个点,这样会导致数据点繁多,为了解决这个问题,我们可以对1分钟(或5分钟等等)的数据进行采样,比如,我们想对北京这个城市的温度每5分钟进行一个采样,采样方式为去平均值,我们可以这样请求:

在上面的请求中,我们的采样方式为每五分钟进行采样,采样方式为取平均值,没有值时补值为null。downsample的时间线操作如下:

3)关于groupBy,group为对不同的tags是否进行分组,如果值为true,则为分组,如上两条时间线,分组查询会返回两条时间线:

返回如下:

[{"metric": "city.temperature","tags": {"city": "shanghai"},"aggregateTags": [],"dps": {"1572331500": 24.333333333333332,"1572331800": null,"1572332100": null}},{"metric": "city.temperature","tags": {"city": "beijing"},"aggregateTags": [],"dps": {"1572331500": 22.900000000000002,"1572331800": null,"1572332100": null}}
]

如果值为false,则为不分组,如上两条时间线,不分组查询会返回一条时间线:

返回如下:

[{"metric": "city.temperature","tags": {},"aggregateTags": ["city"],"dps": {"1572331500": 23.616666666666667,"1572331800": null,"1572332100": null}}
]

注:本例中我们同时使用了聚合方式和采样方式。

TSDB写入与查询讲解,聚合(aggregator)与采样(downsample)讲解—以opentsdb为例相关推荐

  1. HBase的安装、写入和查询操作

    实验材料及说明 在Ubuntu系统的/学号(每个人之间的学号)/salesInfo目录下,有买家的购买记录文件Sales,该文件记录了买家的id,购买商品的id以及购买日期,文件为名为Sales.Sa ...

  2. es的聚合mysql聚合速度_Elasticsearch(8) --- 聚合查询(Metric聚合)

    摘要: quot;:0,"aggs":{"stats_salary":{"stats":{"field":"s ...

  3. 【3-12】数据库子查询及聚合函数

    [3-12]数据库子查询及聚合函数 一.子查询 定义:把一条查询语句当做值来使用 注:子句的查询结果必须是一列 子句可以返回多行数据,但必须是一列 (1)基本多条件嵌套查询: select *from ...

  4. mysql DML操作、关联查询、联合查询、聚合函数使用

    目录 DML操作 关联查询.联合查询 按条件查询.聚合函数使用 DML操作 CREATE DATABASE db2USE db2; CREATE TABLE stu(sid INT PRIMARY K ...

  5. bool查询原理 es_吐血整理:一文看懂ES的R,查询与聚合

    对es查询的索引的company,其有如下字段,下面是一个示例数据 "id": "1", //id "name": "张三&quo ...

  6. 第五章模糊查询和聚合函数

    第五章模糊查询和聚合函数 一.模糊查询: 1.关键词:like 2._代表:一个字符,eg:like 'c',查询的结果是三个字,中间必须是c 3.%代表:多个字符,eg:like '%张',查询的结 ...

  7. 十一、PHP框架Laravel学习笔记——构造器的查询.分块.聚合

    一.构造器查询 table()方法引入相应的表,get()方法可以查询当前表的所有数据: //获取全部结果 $users = DB::table('users')->get(); first() ...

  8. MySQL 排序、分页查询、聚合查询

    文章目录 1. 排序 2. 分页查询 3. 聚合查询 3.1 分组聚合 GROUP BY 练习 LeetCode 176. 第二高的薪水 练习 LeetCode 177. 第N高的薪水 练习 Leet ...

  9. 【Spring Data ElasticSearch】高级查询,聚合

    [Spring Data ElasticSearch]高级查询,聚合 1. 高级查询 1.1 基本查询 1.2 自定义查询 1.3 分页查询 1.4 排序 2. 聚合 2.1 聚合为桶 2.2 嵌套聚 ...

最新文章

  1. com.android.dex.DexIndexOverflowException: Cannot merge new index 66299 into a non-jumbo instruction
  2. How to monitor your mobile application network traffic in your own LAPTOP
  3. python json是什么_python的json用法
  4. 泰克示波器截屏软件-Tektronix示波器上位机-OpenChoice安装。示波器波形发文章论文
  5. sort()、stable_sort()、partial_sort()、nth_element()、greater()、is_sorted()
  6. unity3D协程(Coroutine)原理深入剖析
  7. 现代软件工程—构建之法---第四章:练习与讨论
  8. C语言程序设计题库附答案
  9. arcmap 影像坐标批处理 python_ArcMap怎么把坐标系转换成投影坐标系?
  10. 网吧显示最近使用计算机,影子系统怎么用?实现像网吧电脑一样重启后自动还原系统教程...
  11. ParaView Volume MHD
  12. python矩阵连乘_动态规划之矩阵连乘问题Python实现方法
  13. jsp 图片下载功能
  14. MySQL运行内存设置
  15. 注塑机网关 HFCL-EDGE
  16. OLEDB 参数化查询
  17. CCNA-应试教育-思科网院-CCNAv7: Switching, Routing, and Wireless Essentials 交换、路由和无线基础。
  18. 读格林斯潘回忆录-9
  19. 扑克牌自动图像识别在博彩行业的应用
  20. 阿拉德之怒获取服务器配置文件失败,阿拉德之怒为什么安装失败?阿拉德之怒安装失败解决方案...

热门文章

  1. 《每日一题》NO.9:不懂这个概念一定过不了面试第一关
  2. 多图详解!10大高性能开发核心技术
  3. 聊一聊nacos是如何进行服务注册的
  4. 黑龙江大学的计算机科学技术专业的,黑龙江大学计算机科学技术学院师资队伍...
  5. strftime与strptime之间用法与区别
  6. “520”学历过滤不出爱情,论天津专升本对另一半爱情的重要性
  7. 经典ARP协议讲解,一定要看
  8. Unity实现智能巡逻兵小游戏
  9. 微信小程序调用拨打电话API,实现选择拨打固话或手机号。
  10. nuxt项目中使用store