由于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. 闰年计算——JavaScript 语言计算

    ㈠闰年是如何来的? 闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的.补上时间差的年份为闰年. ㈡什么是闰年? 凡阳历中有闰日(二月为二十九日)的年, ...

  2. CSS3动画之按钮抖动

    今天要分享一组代码,当鼠标悬停在按钮上时.按钮抖动!!! <!DOCTYPE html> <html lang="en"> <head> < ...

  3. JavaWeb_(session和application)用户登录注册模板_进阶版

    用户登录注册模板_基础版 传送门 用户登录注册模板进阶版 添加了获得获得当前登录用户信息及存储登录人数 用户登录后,在首页.注册页.登录页显示登录用户信息和存储登录人数信息 目录结构 <%@pa ...

  4. vue中使用iconfont和在旧有的iconfont中添加新的图标

    todo 使用参考:https://blog.csdn.net/qq_34802010/article/details/81451278 大体步骤是正确的,具体可参考官方文档和下载下来的代码中的dem ...

  5. Java基础教程免费分享

    这是我自己早前听课时整理的Java全套知识,适用于初学者,也可以适用于中级进阶的人,你们可以下载,我认为是比较系统全面的,可以抵得上市场上90%的学习资料.讨厌那些随便乱写的资料还有拿出来卖钱的人!在 ...

  6. centos6 centos7 配置开机启动服务

    centos 6 :使用chkconfig命令即可. 我们以apache服务为例: #chkconfig --add apache 添加nginx服务 #chkconfig apache on 开机自 ...

  7. 11、kubernetes之dashboard

    一.准备dashboard使用的证书 # cd /etc/kubernetes/pki/ pki]# (umask 077; openssl genrsa -out dashboard.key 204 ...

  8. Mysql 实用语句记录

    都是工作中遇到的需求,但不是常用sql,特此记录,方便以后使用: 1.将指定列的数据拼起来存到某一列 UPDATE table_name SET b_col_name=CONCAT(b_col_nam ...

  9. jenkins入门-----(1)安装、配置

    Jenkins概念 Jenkins是一个开源的.可扩展的持续集成.交付.部署(软件/代码的编译.打包.部署)的基于web界面的平台.允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构 ...

  10. leetcode 116填充每个节点的下一个右侧节点指针

    time O(n) ,sapce O(n) /* // Definition for a Node. class Node { public: int val; Node* left; Node* r ...