如何用IoTDB搭建一个CPU使用率监视器?

148 阅读2分钟

我正在参加「掘金·启航计划」

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个)

  1. 启动ConfigNode,若要启动多个则需要注意IP和端口不能冲突
./confignode/sbin/start-confignode.sh
  1. 启动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>");
        }

    }
});

最后展示结果如下 在这里插入图片描述