FlashTsDB时序数据库介绍
1、What is FlashTsDB
1.1 背景
随着互联网、物联网的不断发展,对于海量具有时序特征数据的存储需求日益增多,TSDB(时序数据库)开始受到更多的关注。传统的商业时序数据库(例如OSI-PI)价格昂贵;Influxdb作为目前开源排名最高的时序数据库,集群版已经闭源商业化,开源版仅支持单机模式;OpenTsDB集群方案成熟(Hbase),但实测压缩比不高,性能也是差强人意。
在这样的大环境下,当前市面上无论是开源时序库还是商业时序库都有各自的问题,很难找到一款免费、稳定、高压缩比、高性能、可扩展的时序数据库软件。
1.2 FlashTsDB
FlashTsDB是本人自研的开源时序数据库软件,开发语言主要为Java,其基于SDT压缩算法、Hbase及Redis实现,具有可配置压缩比,高性能,可扩展等特性,FlashTsDB设计之初主要面对纯粹的设备类(例如传感器)数据,主要追求高压缩率、高性能、可扩展和支持线性插值等特性,根据性能测试结果,在同等硬件环境下,其存储和查询性能均优于influxdb。
FlashTsDB同时支持单机和集群模式。单机模式下,可以直接通过docker镜像部署,整个部署过程非常简单,性能也足以满足一般场景下的需求。
同时,FLashDB基于开源模式开发,开源地址:https://github.com/amon1991/flashdb
1.3 时序数据库概念
FlashTsDB定位于时序数据库。
时序数据是基于时间的一系列的数据。在有时间的坐标中将这些数据点连成线,往过去看可以做成多纬度报表,揭示其趋势性、规律性、异常性;往未来看可以做大数据分析,机器学习,实现预测和预警。
时序数据库就是存放时序数据的数据库,并且需要支持时序数据的快速写入、持久化、多纬度的聚合查询等基本功能。
2、Why FlashTsDB
FlashTsDB着眼于解决时序库的最核心问题,目前提供了如下特性:
-
自定义压缩率、支持插值查询
- FlashTsDB支持SDT压缩算法,可以自定义旋转门大小,控制数据实际压缩率;
- 支持线性插值算法,可插值查询任意时刻的测点数值
-
分布式存储
- FlashTsDB底层使用hbase进行数据持久化,支持分布式存储
- 测点的实时数据存储在Redis中,查询实时数据性能高
-
web端查询
- FlashTsDB支持在web端进行测点删选、历史数据查询、实时数据查询
- 历史数据查询的结果通过趋势图展示
-
提供开放平台API
- FlashTsDB支持Restful API新增测点、插入测点数据、查询测点数据
-
高性能
- 经测试,在千兆网络情况下,单进程模式下的FlashTsDB写入即可打满40%的网络带宽,查询可打满90%的网络带宽
- 在高并发场景下,FlashTsDB表现稳定,除平均响应时延增加外,无失败请求
-
部署简单
- FlashTsDB仅依赖hbase集群和redis数据库
- 可基于docker方式直接部署,部署方便
3、FlashTsDB at a glance
3.1 界面概览
上图是FlashTsDB的主界面
- 在页面左上方可查询当前数据库中的测点列表(支持模糊查询)
- 在页面右上方可新建测点
- 对于每个测点,可查询详情
上图为新建测点界面,其中可通过设置accuracy(精确度)设置压缩时旋转门的大小
3.2 查询测点实时/历史数据
- 在上图中,可查询测点的实时数据和历史数据
- 历史数据查询支持查询实际数据和插值数据
3.3 Restful API
用户可通过swagger界面查询和测试FlashTsDB支持的客户端API,具体支持的API功能如下所示:
3.3.1 创建测点元数据
URL
- /apis/flashtsdb/tags
请求类型
- POST
请求示例
[
{
"accuracyE": 5,
"tagCode": "testSensorCode",
"tagDescription": "testSensor Des",
"tagName": "testSensorName",
"tagUnit": "ka"
}
]
请求参数说明
参数名 | 类型 | 说明 |
---|---|---|
accuracyE | 数值 | 测点精确度(decimals,greater than 0) |
tagCode | 字符串 | 测点编码 (limit 200 characters) |
tagDescription | 字符串 | 测点描述 (limit 200 characters) |
tagName | 字符串 | 测点名称(limit 200 characters) |
tagUnit | 字符串 | 测点单位 (limit 50 characters) |
返回示例
{
"success": true,
"msg": "create tags successfully"
}
返回参数说明
参数名 | 类型 | 说明 |
---|---|---|
succes |