本篇內(nèi)容主要講解“Apache IoTDB客戶端接口怎么用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Apache IoTDB客戶端接口怎么用”吧!
創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站建設(shè)、做網(wǎng)站與策劃設(shè)計(jì),天臺(tái)網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:天臺(tái)等地區(qū)。天臺(tái)做網(wǎng)站價(jià)格咨詢:13518219792
JDBC 接口
JDBC 是關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)接口,也是大家最熟悉的接口。所以一開(kāi)始我們就提供了這種接口。
和標(biāo)準(zhǔn) JDBC 的使用方式一樣,需要加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)類,建立連接,建立 Statement,通過(guò) Statement 執(zhí)行語(yǔ)句,對(duì)于非查詢來(lái)說(shuō),可以批量執(zhí)行減少網(wǎng)絡(luò)傳輸次數(shù)。下面是一個(gè)簡(jiǎn)單的例子,
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)建存儲(chǔ)組 statement.execute("SET STORAGE GROUP TO root.sg1"); // 創(chuàng)建時(shí)間序列 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"); // 在客戶端積累一批更新語(yǔ)句 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
對(duì)于數(shù)據(jù)寫(xiě)入,SQL 解析就占了 70% 耗時(shí)。于是我們提供了一個(gè)原生的 NOSQL 接口(Session),相比于 JDBC 更高效。
insertRecord(String deviceId, long time, Listmeasurements, List types, List
這個(gè)接口就對(duì)應(yīng)一個(gè) insert 語(yǔ)句,一次可以寫(xiě)入一個(gè)設(shè)備一個(gè)時(shí)間戳多個(gè)測(cè)點(diǎn)的值,其中值的類型需要和注冊(cè)的類型保持一致,如果沒(méi)注冊(cè)過(guò)則自動(dòng)注冊(cè)此類型。
insertRecord(String deviceId, long time, Listmeasurements, List values)
在一些場(chǎng)景下,客戶端拿不到具體的數(shù)據(jù)類型,這時(shí)候可以用這種 String 參數(shù)的接口。如果提前注冊(cè)了序列,服務(wù)器會(huì)根據(jù)注冊(cè)的類型來(lái)解析這些 String 的值,如果沒(méi)注冊(cè),會(huì)根據(jù)值的格式推斷類型進(jìn)行注冊(cè)。
insertTablet(Tablet tablet, boolean sorted)
一個(gè)Tablet 是一個(gè)設(shè)備多個(gè)時(shí)間戳多個(gè)測(cè)點(diǎn)的值。這里要注意,每個(gè)測(cè)點(diǎn)在每個(gè)時(shí)間戳都需要有值,不能有空的。sorted 表示是否時(shí)間戳是遞增的,如果能保證遞增,可以設(shè)置為 true,否則我們還會(huì)再排個(gè)序。
如果只計(jì)算執(zhí)行時(shí)間,這個(gè)接口是最高效的,因?yàn)槔镞吺褂昧嗽碱愋偷臄?shù)組,避免了裝箱。但是,這個(gè)接口對(duì)數(shù)據(jù)的格式要求很高,如果數(shù)據(jù)采集不是對(duì)齊采的,強(qiáng)行轉(zhuǎn)化成這種接口,轉(zhuǎn)化的耗時(shí)需要統(tǒng)計(jì)一下。
此外還有 insertTablets 和 insertRecords 兩種,其實(shí)就是以上幾種接口的批量的形式。
Session 的查詢結(jié)果集是 SessionDataSet,這個(gè)結(jié)構(gòu)提供的 hasNext 和 next 方法把每一行數(shù)據(jù)都轉(zhuǎn)化成了 RowRecord 這個(gè)結(jié)構(gòu),如果客戶端還需要做其他轉(zhuǎn)化,這個(gè)結(jié)構(gòu)就多余了。這時(shí)候可以通過(guò) SessionDataSet.iterator()得到一個(gè)迭代器,這個(gè)迭代器的訪問(wèn)數(shù)據(jù)的方式和 JDBC 的 ResultSet 是一樣的,直接從字節(jié)數(shù)組里拿數(shù)據(jù),比 RowRecord 更高效。
連接池 SessionPool
自從原生接口誕生以來(lái),很多用戶就從 JDBC 遷移到原始接口了,我們也擴(kuò)充了原生接口的能力,增加了 Session 的連接池(東哥傾情奉獻(xiàn))。連接池的接口和 Session 基本一樣,但是連接池可以供多線程使用,而且可以屏蔽連接異常等問(wèn)題。
使用連接池唯一一點(diǎn)需要注意的是,查詢得到的結(jié)果集使用完需要返還給連接池(調(diào)用連接池的 closeResultSet 方法),不然連接會(huì)被占用,無(wú)法得到新的連接就報(bào)超時(shí)了。
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);}
到此,相信大家對(duì)“Apache IoTDB客戶端接口怎么用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!