千家信息网

Apache IoTDB客户端接口怎么用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"Apache IoTDB客户端接口怎么用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Apache IoTDB客户端接口怎么用"吧!JD
千家信息网最后更新 2026年11月02日Apache IoTDB客户端接口怎么用

本篇内容主要讲解"Apache IoTDB客户端接口怎么用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Apache IoTDB客户端接口怎么用"吧!

JDBC 接口

JDBC 是关系数据库的标准接口,也是大家最熟悉的接口。所以一开始我们就提供了这种接口。

和标准 JDBC 的使用方式一样,需要加载数据库驱动类,建立连接,建立 Statement,通过 Statement 执行语句,对于非查询来说,可以批量执行减少网络传输次数。下面是一个简单的例子,

public static void main(String[] args) throws ClassNotFoundException, SQLException {    Class.forName("org.apache.iotdb.jdbc.IoTDBDriver");    try (Connection connection = DriverManager        .getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");        Statement statement = connection.createStatement()) {      // 创建存储组      statement.execute("SET STORAGE GROUP TO root.sg1");      // 创建时间序列      statement.execute("CREATE TIMESERIES root.sg1.d1.s1 WITH DATATYPE=INT64, ENCODING=RLE, COMPRESSOR=SNAPPY");      statement.execute("CREATE TIMESERIES root.sg1.d1.s2 WITH DATATYPE=INT64, ENCODING=RLE, COMPRESSOR=SNAPPY");      statement.execute("CREATE TIMESERIES root.sg1.d1.s3 WITH DATATYPE=INT64, ENCODING=RLE, COMPRESSOR=SNAPPY");      // 在客户端积累一批更新语句      for (int i = 0; i <= 100; i++) {        statement.addBatch("insert into root.sg1.d1(timestamp, s1, s2, s3) values("+ i + "," + 1 + "," + 1 + "," + 1 + ")");       }      // 执行      statement.executeBatch();      statement.clearBatch();      // 查询      ResultSet resultSet = statement.executeQuery("select * from root where time <= 10");      // 打印结果集      ResultSetMetaData metaData = resultSet.getMetaData();      int columnCount = metaData.getColumnCount();      while (resultSet.next()) {        for (int i = 1; i < columnCount; i++) {          System.out.print(resultSet.getString(i));          System.out.print(" ");        }        System.out.println();      }    }  }

Java 原生接口 Session

对于数据写入,SQL 解析就占了 70% 耗时。于是我们提供了一个原生的 NoSQL 接口(Session),相比于 JDBC 更高效。

insertRecord(String deviceId, long time, List measurements,      List types, List values)

这个接口就对应一个 insert 语句,一次可以写入一个设备一个时间戳多个测点的值,其中值的类型需要和注册的类型保持一致,如果没注册过则自动注册此类型。

insertRecord(String deviceId, long time, List measurements,      List values)

在一些场景下,客户端拿不到具体的数据类型,这时候可以用这种 String 参数的接口。如果提前注册了序列,服务器会根据注册的类型来解析这些 String 的值,如果没注册,会根据值的格式推断类型进行注册。

insertTablet(Tablet tablet, boolean sorted)

一个Tablet 是一个设备多个时间戳多个测点的值。这里要注意,每个测点在每个时间戳都需要有值,不能有空的。sorted 表示是否时间戳是递增的,如果能保证递增,可以设置为 true,否则我们还会再排个序。

如果只计算执行时间,这个接口是最高效的,因为里边使用了原始类型的数组,避免了装箱。但是,这个接口对数据的格式要求很高,如果数据采集不是对齐采的,强行转化成这种接口,转化的耗时需要统计一下。

此外还有 insertTablets 和 insertRecords 两种,其实就是以上几种接口的批量的形式。

Session 的查询结果集是 SessionDataSet,这个结构提供的 hasNext 和 next 方法把每一行数据都转化成了 RowRecord 这个结构,如果客户端还需要做其他转化,这个结构就多余了。这时候可以通过 SessionDataSet.iterator()得到一个迭代器,这个迭代器的访问数据的方式和 JDBC 的 ResultSet 是一样的,直接从字节数组里拿数据,比 RowRecord 更高效。

连接池 SessionPool

自从原生接口诞生以来,很多用户就从 JDBC 迁移到原始接口了,我们也扩充了原生接口的能力,增加了 Session 的连接池(东哥倾情奉献)。连接池的接口和 Session 基本一样,但是连接池可以供多线程使用,而且可以屏蔽连接异常等问题。

使用连接池唯一一点需要注意的是,查询得到的结果集使用完需要返还给连接池(调用连接池的 closeResultSet 方法),不然连接会被占用,无法得到新的连接就报超时了。

SessionDataSetWrapper wrapper = null;try {  wrapper = pool.executeQueryStatement("select * from root.sg1.d1");  while (wrapper.hasNext()) {    System.out.println(wrapper.next());  }} catch (IoTDBConnectionException | StatementExecutionException e) {  e.printStackTrace();} finally {  // remember to close data set finally!  pool.closeResultSet(wrapper);}

到此,相信大家对"Apache IoTDB客户端接口怎么用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

接口 数据 类型 客户 客户端 时间 查询 多个 方法 测点 结构 结果 语句 原始 内容 序列 数据库 数组 方式 标准 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州紫鲸互联网科技有限公司 美国互联网保险保险科技 科技股互联网 中国互联网科技股 互联网最新的科技有限公司 唐信互联网科技 长亮科技互联网金融 互联网前沿科技 济南和联互联网科技有限公司 北京华百购互联网科技有限公司 互联网科技与管理 河南猎农互联网科技有限公司 用友工业互联网科技发展 互联网科技如何创业 互联网科技公司营业执照怎么办理 半导体是互联网高科技吗 互联网时代科技型公司的机会 西安左小互联网科技有限公司 河南商务圈互联网科技有限公司 六子台科技互联网展会 有格互联网科技 科技服务与互联网 万易互联网科技 互联网科技美容 昭通云南众福互联网科技有限公司 移动互联网科技股 广东鹅鹅鹅互联网科技有限公司 中国互联网公司的科技投入 互联网的科技体现在哪里 互联网科技创业计划的风险分析
0