我正在参加「掘金·启航计划」
IoTDB是一个时序数据库,能够针对时序数据进行收集、存储与分析一体化的数据管理引擎,同时该数据库轻量易用,较好入门。该文主要简单通过IoTDB session搭建一个基于spring boot的CPU使用率监视器用于对IoTDB进行一个入门。详细项目代码可见项目地址
时序数据库的启动
通过官网即可下载IoTDB的发行版本,由于只做应用,这里我们选择0.14.0分分布式二进制版本,省去了编译的环节
解压后目录如下
单点启动
当不使用集群时,我们可以直接启动数据库,在当前目录下使用命令,直接启动脚本
./datanode/sbin/start-server.sh
集群搭建
若要使用0.14.0的分布式集群功能,则要同时启动CofigNode和DataNode,需要启动至少一个ConfigNode和至少一个DataNode(若要对数据备份,备份N份则至少启动N个)
- 启动ConfigNode,若要启动多个则需要注意IP和端口不能冲突
./confignode/sbin/start-confignode.sh
- 启动DataNode
./datanode/sbin/start-datanode.sh
之后便可以使用时序数据库了
session连接数据库
在使用中,我们在java中使用session和数据库进行交互,首先在maven中添加以下依赖,便可以在项目中直接导入session使用
<dependency>
<groupId>org.apache.iotdb</groupId>
<artifactId>iotdb-session</artifactId>
<version>0.11.1</version>
</dependency>
之后通过session连接数据库并创建一个名为root.demo的存储组和root.demo.cpu.usage的时间序列,这里HOST和PORT等数据是启动时序数据库时配置的
session = new Session(HOST,PORT,USERNAME,PASSWORD);
session.open();
session.setStorageGroup("root.demo");
session.createTimeseries("root.demo.cpu.usage", TSDataType.TEXT, TSEncoding.PLAIN, CompressionType.SNAPPY);
DeviceId = "root.demo.cpu";
Session操作数据库
各种操作方式可以参考官方文档,这里主要涉及时间序列数据的插入和查询
// 数据插入
String usage = Tool.getCPUInfo();
List<String> measurements = new ArrayList<>();
List<String> values = new ArrayList<>();
measurements.add("usage");
values.add(usage);
session.insertRecord(DeviceId,System.currentTimeMillis(),measurements,values);
数据查询时,我们会在每次启动监视器时记录当时的时间戳,每次只查询启动至当前的数据
SessionDataSet sessionDataSet = session.executeRawDataQuery(path,startTime,System.currentTimeMillis());
while (sessionDataSet.hasNext()){
List<String> names = sessionDataSet.getColumnNames();
SessionDataSet.DataIterator dataIterator = sessionDataSet.iterator();
String stringBuilder = new Timestamp(Long.parseLong(dataIterator.getString("Time"))) +
" " + dataIterator.getString("root.demo.cpu.usage");
ret.add(stringBuilder);
}
结果展示
为了方便,我们使用ajax去定时访问接口并动态更新界面
$.ajax({
url:"/result",
type:"GET",
async: true,
success:function(data){
for(let i=0;i<data.length;i++){
$("#list").append("<li>"+data[i]+"</li>");
}
}
});
最后展示结果如下