IoTDB使用

1,安装IoTDB服务。

https://iotdb.apache.org/Download/

2.解压启动单机服务

3,使用命令启动IoTDB

sbin\start-cli.bat -h 127.0.0.1 -p 6667 -u root -pw root

3.1如果报查询不到JDK

 修改start-cli.bat中classpath的内容为双引号“”

 启动成功

 

 

5.springboot整合IoTDB

5.1导入依赖

  <!--iotdb实时数据库-->
            <dependency>
                <groupId>org.apache.iotdb</groupId>
                <artifactId>iotdb-session</artifactId>
                <version>${iotdb.version}</version>
            </dependency>

5.2 yml配置IoTDB

#时序数据库
iotdb:
  host: 127.0.0.1
  port: 6667
  user: root
  password: root
  maxSize: 100

5.3整合IoTDB

复制代码
package com.weizu;

import lombok.Data;
import org.apache.iotdb.session.pool.SessionPool;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author 党王
 * @since 2023/8/21
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "iotdb")
public class IoTDBConfig {
    private String host;
    private int port;
    private String user;
    private String password;
    private int maxSize;

    // getters and setters...

    @Bean
    public SessionPool sessionPool() {
        return new SessionPool(host, port, user, password,maxSize);
    }
}
复制代码

5.4操作数据库

复制代码
package com.weizu;

import org.apache.iotdb.isession.SessionDataSet;
import org.apache.iotdb.isession.pool.SessionDataSetWrapper;
import org.apache.iotdb.rpc.IoTDBConnectionException;
import org.apache.iotdb.rpc.StatementExecutionException;
import org.apache.iotdb.session.pool.SessionPool;
import org.apache.iotdb.tsfile.exception.write.WriteProcessException;
import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;

import org.apache.iotdb.tsfile.read.common.RowRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * @author 党王
 * @since 2023/8/21
 */
@Service
public class IoTDBService {
    @Autowired
    private SessionPool sessionPool;

    public void createTimeseries() throws IoTDBConnectionException, StatementExecutionException {
        String path = "root.sg1.d1.s1";
        TSDataType dataType = TSDataType.INT64;
        TSEncoding encoding = TSEncoding.RLE;
        CompressionType compression = CompressionType.SNAPPY;
        sessionPool.createTimeseries(path, dataType, encoding, compression);
    }

    public void insertRecord() throws IoTDBConnectionException, StatementExecutionException {
        String deviceId = "root.sg1.d1";
        long time = System.currentTimeMillis();
        List<String> measurements = Arrays.asList("s1");
        List<TSDataType> types = Arrays.asList(TSDataType.INT64);
        RowRecord record = new RowRecord((int) time);
        record.addField(100L, types.get(0));
        List<TSDataType> dataTypes = Arrays.asList(TSDataType.INT64);
        List<String> values = Arrays.asList(String.valueOf(100L));
        sessionPool.insertRecord(deviceId,time, measurements, values);
    }

    // ... Other service methods for IoTDB operations


    public void deleteTimeseries() throws IoTDBConnectionException, StatementExecutionException {
        String path = "root.sg1.d1.s1";
        sessionPool.deleteTimeseries(Arrays.asList(path));
    }

    public void deleteData() throws IoTDBConnectionException, StatementExecutionException {
        String deviceId = "root.sg1.d1";
        String measurement = "s1";
        long endTime = System.currentTimeMillis(); // Deleting up to current time
        sessionPool.deleteData(deviceId, endTime);
    }

    public void updateData() throws IoTDBConnectionException, StatementExecutionException, WriteProcessException {
        String deviceId = "root.sg1.d1";
        long time = System.currentTimeMillis();
        List<String> measurements = Arrays.asList("s1");
        List<TSDataType> types = Arrays.asList(TSDataType.INT64);
        RowRecord record = new RowRecord(time);
        record.addField(200L, types.get(0));  // Updated value
        List<Object> values = Arrays.asList(100L);
        sessionPool.insertRecord(deviceId, time,measurements, types,values);
    }

    public List<String> queryData() throws IoTDBConnectionException, StatementExecutionException {
        String deviceId = "root.sg1.d1";
        String sql = "SELECT s1 FROM " + deviceId;
        SessionDataSetWrapper dataSet = sessionPool.executeQueryStatement(sql);
        List<String> results = new ArrayList<>();
        while (dataSet.hasNext()) {
            RowRecord record = dataSet.next();
            results.add(record.toString());
        }
        return results;
    }

}
复制代码

5.5使用测试用例

复制代码
import com.weizu.DatabaseApplication;
import com.weizu.IoTDBService;
import lombok.RequiredArgsConstructor;
import org.apache.iotdb.rpc.IoTDBConnectionException;
import org.apache.iotdb.rpc.StatementExecutionException;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * @author 党远洋
 * @since 2023/8/21
 */
//@RunWith(SpringRunner.class)
@SpringBootTest(classes = DatabaseApplication.class)
@ContextConfiguration
@RequiredArgsConstructor
public class IoTDBServiceTest {
    @Autowired
    private IoTDBService iotdbService;

    @Test
    public void testCreateTimeseries() throws IoTDBConnectionException, StatementExecutionException {
        iotdbService.createTimeseries();
    }

    @Test
    public void testInsertRecord() throws IoTDBConnectionException, StatementExecutionException {
        iotdbService.insertRecord();
    }

    // ... Other test methods
}
复制代码

 

 6,使用命令查看已创建的存储组:

SHOW STORAGE GROUP;

4.1查看插入数据

SELECT s1 FROM root.sg1.d1;//sg1.d1存储时候的具体名称

 

posted @   党王  阅读(584)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示