由于OpenTSDB没有支持Java的SDK进行调用,所以基于Java开发OpenTSDB的调用将要依靠HTTP请求的方式进行。

1.毫秒级数据写入

/api/put:通过POST方式插入JSON格式数据,将毫秒级的时间戳赋值给timestamp参数即可,JSON格式:

{
"metric":"self.test",
"timestamp":1567675709879,
"value":,
"tags":{
"host":"web1"
}
}

Java中毫秒级时间戳获取方式:

// 获取当前时间的Unix时间戳
long millisecond = System.currentTimeMillis();
long millisecond2 = DateTimeUtil.stringLongToMillisecond("2019/09/05 17:28:29:879"); // 日期时间格式字符串转换为(Unix时间戳)长整型类型
public static long stringLongToMillisecond(String string) throws Exception {
return stringLongToDate(string).getTime();
} // 日期时间格式字符串转换为Date类型
public static Date stringLongToDate(String string) throws Exception {
return sdfLong.parse(string);
} private static SimpleDateFormat sdfLong = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:SSS");

2.毫秒级数据查询

主要是设置msResolution这个参数,如果该字段为false,则同一秒内的点将按照 aggregator 指定的方式聚合得到该秒的最终值

(在查询时默认返回秒级数据(按照查询中指定的聚合方式对 1秒内的时序数据进行采样聚合,形成最终结果))

/api/query:可以选择 Get 或者 Post 两种方式,推荐使用 Post 方式,请求JSON 格式:

{
"start": 1456123705, // 该查询的起始时间
"end": 1456124985, // 该查询的结束时间
"globalAnnotation": false, // 查询结果中是否返回 global annotation
"noAnnotations": false, // 查询结果中是否返回 annotation
"msResolution": true, // 返回的点的精度是否为毫秒级,如果该字段为false,
// 则同一秒内的点将按照 aggregator 指定的方式聚合得到该秒的最终值
"showTSUIDs": true, // 查询结果中是否携带 tsuid
"showQuery": true, // 查询结果中是否返回对应的子查询
"showSummary": false, // 查询结果中是否携带此次查询时间的一些摘要信息
"showStats": false, // 查询结果中是否携带此次查询时间的一些详细信息
"delete": false, // 注意:如果该值设为true,则所有符合此次查询条件的点都会被删除
"queries": [
// 子查询,为一个数组,可以指定多条相互独立的子查询
]
}

子查询格式:

{
"metric": "JVM_Heap_Memory_Usage_MB", // 查询使用的 metric
"aggregator": "sum", // 使用的聚合函数
"downsample": "1ms", // 采样时间间隔和采样函数
"tags": { // tag组合,在OpenTSDB 2.0 中已经标记为废弃
// 推荐使用下面的 filters 字段
"host": "server01"
},
"filters": [], // TagFilter,下面将详细介绍 Filter 相关的内容
"explicitTags": false, // 查询结果是否只包含 filter 中出现的 tag
"rate": false, // 是否将查询结果转换成 rate
"rateOption": {} // 记录了 rate 相关的参数,具体参数后面会进行介绍
}

3.测试结果

向OpenTSDB中插入两条时间相差1ms的数据

分别采用秒级和毫秒级对该时间段进行查询,结果:

秒级查询结果:[{"metric":"metric1","tags":{"tag1":"test","tag2":"mort"},"aggregateTags":[],"dps":{"1567675709":43.0}}]
毫秒级查询结果:[{"metric":"metric1","tags":{"tag1":"test","tag2":"mort"},"aggregateTags":[],"dps":{"1567675709879":21.0,"1567675709880":22.0}}]

秒级查询返回一条数据(将两条进行聚合,代码中zimsum方式,返回21+22)

毫秒级查询直接返回所有数据,无聚合、降采

效果图:

参考:

https://blog.csdn.net/zx711166/article/details/80913861

https://github.com/shifeng258/opentsdb-client

OpenTSDB查询和写入毫秒级数据的更多相关文章

  1. OpenTSDB在HBase中的底层数据结构设计

    0.时序数据库 时间序列(Time Series):是一组按照时间发生先后顺序进行排列的数据点序列,通常一组时间序列的时间间隔为一恒定值(如1秒,5分钟,1小时等). 时间序列数据可被简称为时序数据. ...

  2. 双汇大数据方案选型:从棘手的InfluxDB+Redis到毫秒级查询的TDengine

    双汇发展多个分厂的能源管控大数据系统主要采用两种技术栈:InfluxDB/Redis和Kafka/Redis/HBase/Flink,对于中小型研发团队来讲,无论是系统搭建,还是实施运维都非常棘手.经 ...

  3. Elasticsearch如何做到亿级数据查询毫秒级返回?

    阅读本文大概需要 6 分钟. 如果面试的时候碰到这样一个面试题:ES 在数据量很大的情况下(数十亿级别)如何提高查询效率? 这个问题说白了,就是看你有没有实际用过 ES,因为啥?其实 ES 性能并没有 ...

  4. ES 调优查询亿级数据毫秒级返回!怎么做到的?--文件系统缓存

    一道面试题的引入: 如果面试的时候碰到这样一个面试题:ElasticSearch(以下简称ES) 在数据量很大的情况下(数十亿级别)如何提高查询效率? 这个问题说白了,就是看你有没有实际用过 ES,因 ...

  5. 使用bitset实现毫秒级查询

    前言 因为业务要求api的一次请求响应时间在10ms以内,所以传统的数据库查询操作直接被排除(网络io和磁盘io).通过调研,最终使用了bieset,目前已经正常运行了很久 *** bitset介绍 ...

  6. linq根据传入数据集合查询对应子级数据

    工作中经常用到的linq根据传入数据集合查询对应子级数据,整理共享,希望大家都能用得上,代码中doublesArray 为父节点对应ID数据集合,再根据ID数据集合查询全部子级数据. //获取缓存数据 ...

  7. linq依据传入数据集合查询相应子级数据

    工作中经经常使用到的linq依据传入数据集合查询相应子级数据,整理共享,希望大家都能用得上,代码中doublesArray 为父节点相应ID数据集合,再依据ID数据集合查询所有子级数据. //获取缓存 ...

  8. python 连接数据库,查询结果写入数据到excel

    使用Python链接数据库查询数据,并将查询结果写入到Excel中,实现方法上主要有两步,第一,查数据,第二,写Excel. 一.导入需要的包 import time import xlwt from ...

  9. mysql搭建亿级cmd5数据库,毫秒级查询 完全过程

    前言: 最近也在玩数据库,感觉普通机子搞数据库,还是差了点,全文查找,慢的要查一分钟更久. 但是搞cmd5库很不错,亿级数据库,毫秒级. qq 944520563好吧,下面开始,首先你得需要一个mys ...

随机推荐

  1. C# SqlDataReader

    var reader = MSSQLHelper.ExecuteReader(sb.ToString(), out erro, ConnectionString); //SqlDataReader / ...

  2. 微信支付(公众号)爬坑记,包含 total_fee 失败和 JSAPI 签名验证失败等等

    做商城类网站不免会需要做支付功能,目前在中国大陆通用的做法就是使用支付宝支付和微信支付,上一篇博文已经讲个支付宝支付. 这篇文章来讲一讲微信支付,微信支付的方式有很多种,本文主要讲 JSAPI 支付的 ...

  3. 分区间统计sql、删除重复数据

    删除重复数据 备份表 删除最早的评论

  4. oracle ROW_NUMBER() OVER(PARTITION BY '分组' ORDER BY '排序' DESC) 用法

    转载:https://blog.csdn.net/dbagaoshou/article/details/51330829 SELECT * FROM ( SELECT ROW_NUMBER() OVE ...

  5. BruteXSS

    0X01安装 我是按照下面这位大牛的博客来的 https://www.cnblogs.com/Pitcoft/p/6341322.html 0X02使用BruteXSS的使用 #在目录 BruteXS ...

  6. 分布式-信息方式-ActiveMQ的静态网络连接

                           ActiveMQ的静态网络连接 在一台服务器上启动多个Broker步骤如下:1:把整个conf文件夹复制一份,比如叫做conf22:修改里面的 activ ...

  7. xpath元素定位方法

    XPath 使用路径表达式来选取 XML 文档中的节点或者节点集.这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似.XPath 含有超过 100 个内建的函数.这些函数用于字符串值.数值 ...

  8. php 发送邮件(2)qq邮箱开通

    一 首选登录qq邮箱,在最上面那里找到设置,点击打开 二 下拉,找到账号安全和它下面的内容 ,开启服务 imap/smtp

  9. 将 vue 的项目放在 手机上查看 及 测试 bug

    首先:我们应该让电脑和手机 处在同一个局域网下面,最简单的方法,就是让手机链接电脑的 WiFi ,或者让电脑链接手机的 WiFi ,然后得到我们的 ip 地址 在电脑上获取 ip 地址就行 获取方法: ...

  10. android 播放音乐媒体文件(二)

    MediaPlayer使用 官方文档: https://developer.android.com/guide/topics/media/mediaplayer.html 示例代码: 首先网络音频资源 ...