ApacheIoTDB客戶端接口怎么用

本篇內(nèi)容主要講解“Apache IoTDB客戶端接口怎么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Apache IoTDB客戶端接口怎么用”吧!

創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站建設(shè)、做網(wǎng)站與策劃設(shè)計,天臺網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:天臺等地區(qū)。天臺做網(wǎng)站價格咨詢:13518219792

JDBC 接口

JDBC 是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)接口,也是大家最熟悉的接口。所以一開始我們就提供了這種接口。

和標(biāo)準(zhǔn) JDBC 的使用方式一樣,需要加載數(shù)據(jù)庫驅(qū)動類,建立連接,建立 Statement,通過 Statement 執(zhí)行語句,對于非查詢來說,可以批量執(zhí)行減少網(wǎng)絡(luò)傳輸次數(shù)。下面是一個簡單的例子,

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()) {      // 創(chuàng)建存儲組      statement.execute("SET STORAGE GROUP TO root.sg1");      // 創(chuàng)建時間序列      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 + ")");       }      // 執(zhí)行      statement.executeBatch();      statement.clearBatch();      // 查詢      ResultSet resultSet = statement.executeQuery("select * from root where time <= 10");      // 打印結(jié)果集      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

對于數(shù)據(jù)寫入,SQL 解析就占了 70% 耗時。于是我們提供了一個原生的 NOSQL 接口(Session),相比于 JDBC 更高效。

insertRecord(String deviceId, long time, List<String> measurements,      List<TSDataType> types, List<Object> values)

這個接口就對應(yīng)一個 insert 語句,一次可以寫入一個設(shè)備一個時間戳多個測點的值,其中值的類型需要和注冊的類型保持一致,如果沒注冊過則自動注冊此類型。

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

在一些場景下,客戶端拿不到具體的數(shù)據(jù)類型,這時候可以用這種 String 參數(shù)的接口。如果提前注冊了序列,服務(wù)器會根據(jù)注冊的類型來解析這些 String 的值,如果沒注冊,會根據(jù)值的格式推斷類型進行注冊。

insertTablet(Tablet tablet, boolean sorted)

一個Tablet 是一個設(shè)備多個時間戳多個測點的值。這里要注意,每個測點在每個時間戳都需要有值,不能有空的。sorted 表示是否時間戳是遞增的,如果能保證遞增,可以設(shè)置為 true,否則我們還會再排個序。

如果只計算執(zhí)行時間,這個接口是最高效的,因為里邊使用了原始類型的數(shù)組,避免了裝箱。但是,這個接口對數(shù)據(jù)的格式要求很高,如果數(shù)據(jù)采集不是對齊采的,強行轉(zhuǎn)化成這種接口,轉(zhuǎn)化的耗時需要統(tǒng)計一下。

此外還有 insertTablets 和 insertRecords 兩種,其實就是以上幾種接口的批量的形式。

Session 的查詢結(jié)果集是 SessionDataSet,這個結(jié)構(gòu)提供的 hasNext 和 next 方法把每一行數(shù)據(jù)都轉(zhuǎn)化成了 RowRecord 這個結(jié)構(gòu),如果客戶端還需要做其他轉(zhuǎn)化,這個結(jié)構(gòu)就多余了。這時候可以通過 SessionDataSet.iterator()得到一個迭代器,這個迭代器的訪問數(shù)據(jù)的方式和 JDBC 的 ResultSet 是一樣的,直接從字節(jié)數(shù)組里拿數(shù)據(jù),比 RowRecord 更高效。

連接池 SessionPool

自從原生接口誕生以來,很多用戶就從 JDBC 遷移到原始接口了,我們也擴充了原生接口的能力,增加了 Session 的連接池(東哥傾情奉獻)。連接池的接口和 Session 基本一樣,但是連接池可以供多線程使用,而且可以屏蔽連接異常等問題。

使用連接池唯一一點需要注意的是,查詢得到的結(jié)果集使用完需要返還給連接池(調(diào)用連接池的 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客戶端接口怎么用”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)頁題目:ApacheIoTDB客戶端接口怎么用
URL分享:http://bm7419.com/article16/igejdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化定制開發(fā)、App開發(fā)、ChatGPT、網(wǎng)站設(shè)計、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營