公司的主营业务是给企业客户提供短信服务,内部有一个强大的运营监控平台。每日短信业务量巨大,监控平台需要使用时序数据库来对发送的海量短信分地理区域、运营商、接收状态等类别进行统计和监控。以前一直在用InfluxDB,对于时间跨度稍大些的查询(比如一个月的数据)就显得非常慢了。从TDengine开源后,便知道了这个很牛的家伙,于是尝试着使用TDengine。
在搞懂了基本的功能后,便上线了TDengine版的监控系统,但是发现,在grafana中居然不能“group by”,只能通过写where多条语句将多个短信状态数据放到一个仪表盘里,如图:
如果where条件有更多,这样的方法就太笨,并且灵活性太差。
于是,开始仔细研究官方文档,搞懂了“超级表”、“连续查询“等,在这个过程中遇到过不少问题,在这里做一下记录(测试环境,数据是模拟产生的)。
测试环境:
安装很简单:
配置都用默认的(未改配置文件)
启动TDengine:
在命令行输入“taos”
以下建库、建表操作都在此提示符下进行
1. 创建数据库
说明:
keep 365表示该库保存365天内的数据,365天之前的数据会被自动清除(因为是时序数据库,所以不能对库中的表进行delete操作);
precision ‘us’表示数据库中的时间戳精度为“微秒”,(默认是毫秒,也可以显示写为precision ‘ms’), 经测试,此处用单引号和双引号都是可以的,但是不能没有引号。
配置文件中已经不支持时间精度的配置,必须在建库的时候指定(测试了很多配置都不生效,Issues后得到的官方回复)
TDengine的设计初衷是用于物联网,设备的信息采集精度到“毫秒”已经足够用,但我司的短信平台会有突发大量数据产生,为了避免可能会导致的数据丢失,将精度设置为“微秒”,经测试,效果很好,测试的模拟数据插入时间戳都用“now”获取,下图左侧为“毫秒”精度,能看到有“0 row(s)”的情况出现,表示有数据未插入, 右侧为“微秒”精度,未见未插入数据。
2. 创建超级表
进入数据库“jk”
短信系统中有3种type,几百种subtype,所以将这些静态信息(或者简单地理解为需要将进行group by的字段设置为tag)
解释一下超级表:
对subtype进行分组聚合查询:
对type和subtype进行分组聚合查询:
INSERT INTO <tb_name> USING <stb_name> TAGS (<tag1_value>, ...)
VALUES (field_value, ...) (field_value, ...) ...;
3. 启动Grafana
在最下方找到“TDengine”
配置图形显示
本文分享自微信公众号 - TDengine(taosdata_news)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。