Apache IoTDB客户端接口怎么用

Apache IoTDB客户端接口怎么用

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

JDBC 接口

Apache IoTDB客户端接口怎么用

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

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

publicstaticvoidmain(String[]args)throwsClassNotFoundException,SQLException{Class.forName("org.apache.iotdb.jdbc.IoTDBDriver");try(Connectionconnection=DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/","root","root");Statementstatement=connection.createStatement()){//创建存储组statement.execute("SETSTORAGEGROUPTOroot.sg1");//创建时间序列statement.execute("CREATETIMESERIESroot.sg1.d1.s1WITHDATATYPE=INT64,ENCODING=RLE,COMPRESSOR=SNAPPY");statement.execute("CREATETIMESERIESroot.sg1.d1.s2WITHDATATYPE=INT64,ENCODING=RLE,COMPRESSOR=SNAPPY");statement.execute("CREATETIMESERIESroot.sg1.d1.s3WITHDATATYPE=INT64,ENCODING=RLE,COMPRESSOR=SNAPPY");//在客户端积累一批更新语句for(inti=0;i<=100;i++){statement.addBatch("insertintoroot.sg1.d1(timestamp,s1,s2,s3)values("+i+","+1+","+1+","+1+")");}//执行statement.executeBatch();statement.clearBatch();//查询ResultSetresultSet=statement.executeQuery("select*fromrootwheretime<=10");//打印结果集ResultSetMetaDatametaData=resultSet.getMetaData();intcolumnCount=metaData.getColumnCount();while(resultSet.next()){for(inti=1;i<columnCount;i++){System.out.print(resultSet.getString(i));System.out.print("");}System.out.println();}}}

Java 原生接口 Session

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

insertRecord(StringdeviceId,longtime,List<String>measurements,List<TSDataType>types,List<Object>values)

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

insertRecord(StringdeviceId,longtime,List<String>measurements,List<String>values)

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

insertTablet(Tablettablet,booleansorted)

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

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

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

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

连接池SessionPool

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

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

SessionDataSetWrapperwrapper=null;try{wrapper=pool.executeQueryStatement("select*fromroot.sg1.d1");while(wrapper.hasNext()){System.out.println(wrapper.next());}}catch(IoTDBConnectionException|StatementExecutionExceptione){e.printStackTrace();}finally{//remembertoclosedatasetfinally!pool.closeResultSet(wrapper);}

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

发布于 2022-01-06 23:23:04
收藏
分享
海报
0 条评论
29
上一篇:Apache IoTDB部署运维的方法是什么 下一篇:java如何将内存数组流的数据写入文件流中
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码