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存储时候的具体名称
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理