六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

借助 RESTful 接口, TDengine 的 JDBC 驅(qū)動可跨平臺,而且不用為升級發(fā)愁了

隨著 TDengine 2.0.14.0 版本的發(fā)布,我們在這個版本中為 JDBC Connector 添加了一種新的實現(xiàn):JDBC-RESTful,一種基于 RESTful 接口的 JDBC 實現(xiàn),可以通過 taos-jdbcdriver 2.0.18 來使用這個新特性。

!?。≈匾氖虑橄日f,使用 JDBC-RESTful 的幾個最重要的好處:

  1. TDengine 的應用開發(fā)可以跨平臺了。之前,由于 TDengine 的 JDBC 驅(qū)動依賴本地動態(tài)庫(Linux 上為 libtaos.so ,windows 上為 taos.dll ),開發(fā)者需要先在本地安裝客戶端。否則,應用程序會報錯:no taos in java.library.path。而 TDengine 目前只支持 Linux 和 Windows 操作系統(tǒng)的客戶端安裝包,并且源碼也無法在其他操作系統(tǒng)上編譯。這對于使用 macOS 的用戶來說,需要先在 macOS 上寫好代碼,再將代碼部署到 Linux 服務器上調(diào)試?;蛘呤褂孟?VS code 等可以支持遠程代碼開發(fā)的 IDE 工具,這些都增加了使用 TDengine 的開發(fā)成本。這也是我們?yōu)槭裁匆_發(fā) JDBC-RESTful 的原因。使用 JDBC-RESTful 后,不需要安裝客戶端!不需要使用遠程代碼開發(fā)的 IDE 工具!在 mac 上也可以做開發(fā)啦。
  2. 使用 JDBC-RESTful 后,不再需要升級客戶端。使用 JDBC-RESTful 后,不需要安裝 TDengine 的客戶端。對企業(yè)應用開發(fā)來說,由專門的運維人員來負責 TDengine 的維護和升級,server 端升級后,應用不需要升級 client。
  3. 遷移到 JDBC-RESTful 需要的改動很小。使用 JDBC-RESTful,只需要修改一下 driverClass 和 URL 即可。這對于大部分的 Java 應用來說,只是修改一下配置文件即可。

下面,詳細描述一下 JDBC-RESTful 的相關(guān)概念和使用方法。

一、JDBC-RESTful 的實現(xiàn)原理

目前,JDBC Connector 的實現(xiàn)包括2種形式: JDBC-JNI 和 JDBC-RESTful。

  • JDBC-JNI :使用JNI調(diào)用客戶端 libtaos.so(或 taos.dll )的本地方法,通過 socket 與 taosd 通信。
  • JDBC-RESTful :在內(nèi)部封裝了 TDengine 的 RESTful 接口,將 SQL 封裝成 HTTP 請求發(fā)送給 server 端的 taosd 示例。
3 種 Java 應用使用連接器訪問 TDengine 的方式

上圖顯示了 3 種 Java 應用使用連接器訪問 TDengine 的方式:

  • JDBC-JNI:Java 應用在物理節(jié)點1(pnode1)上使用 JDBC-JNI 的 API ,直接調(diào)用客戶端 API(libtaos.so 或 taos.dll)將寫入和查詢請求發(fā)送到位于物理節(jié)點 2(pnode2)上的 taosd 實例。
  • RESTful:應用將 SQL 發(fā)送給位于物理節(jié)點2(pnode2)上的 RESTful 連接器,再調(diào)用客戶端 API(libtaos.so)。
  • JDBC-RESTful:Java 應用通過 JDBC-RESTful 的 API ,將 SQL 封裝成一個 RESTful 請求,發(fā)送給物理節(jié)點2的 RESTful 連接器。

二、JDBC-RESTful 的使用示例

使用 JDBC-RESTful 接口,與之前的 JDBC-JNI 相比,僅需要:

  1. driverClass 指定為“com.taosdata.jdbc.rs.RestfulDriver”;
  2. jdbcUrl 以 “jdbc:TAOS-RS://” 開頭;
  3. 使用 6041 作為連接端口。

下面,展示一個完整的使用 JDBC-RESTful 的示例:

(1)在 pom.xml 中引入 taos-jdbcdriver 依賴

<dependency>
  <groupId>com.taosdata.jdbc</groupId>
  <artifactId>taos-jdbcdriver</artifactId>
  <version>2.0.18</version>
</dependency>

(2)示例代碼:

public class JdbcRestfulDemo {
    private static final String host = "taos-server";

    public static void main(String[] args) {
        try {
            // load JDBC-restful driver
            Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
            // use port 6041 in url when use JDBC-restful
            String url = "jdbc:TAOS-RS://" + host + ":6041/?user=root&password=taosdata";

            Properties properties = new Properties();
            properties.setProperty("charset", "UTF-8");
            properties.setProperty("locale", "en_US.UTF-8");
            properties.setProperty("timezone", "UTC-8");

            Connection conn = DriverManager.getConnection(url, properties);
            Statement stmt = conn.createStatement();

            stmt.execute("create database if not exists restful_test");
            stmt.execute("use restful_test");
            stmt.execute("create table restful_test.weather(ts timestamp, temperature float) tags(location nchar(64))");
            stmt.executeUpdate("insert into t1 using restful_test.weather tags('北京') values(now, 18.2)");
            ResultSet rs = stmt.executeQuery("select * from restful_test.weather");
            ResultSetMetaData meta = rs.getMetaData();
            while (rs.next()) {
                for (int i = 1; i <= meta.getColumnCount(); i++) {
                    System.out.print(meta.getColumnLabel(i) + ": " + rs.getString(i) + "\t");
                }
                System.out.println();
            }
            rs.close();
            
            stmt.close();
            conn.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

三、JDBC-RESTful 的性能

從上面 JDBC-RESTful 的實現(xiàn)原理看到,JDBC-RESTful 方式相當于對 libtaos.so 的 C 方法進行了兩次封裝,第一次是 RESTful 對 libtaos.so 中的方法進行了封裝,第二次是 taos-jdbcdriver 對 RESTful 接口進行了封裝。并且,使用 JDBC-RESTful ,意味著將數(shù)據(jù)庫的訪問請求全部發(fā)送給了 server ,server 端需要做所有由 client 負責的 SQL 解析、結(jié)果集聚合等工作。那么使用 JDBC-RESTful 接口是否會造成性能下降呢?我們內(nèi)部對 JDBC-RESTful 接口進行了性能測試。

測試環(huán)境:CPU:mac pro(6核,Intel Core i7),內(nèi)存:16 GB ,硬盤:SSD(500GB)

測試記錄:

對 JDBC-RESTful 接口測試的記錄

測試結(jié)論:

  1. 在每條 SQL 中插入的記錄數(shù)少的情況下,JDBC-RESTful 的寫入性能是 JDBC-JNI 的 50% 左右;
  2. 在每條 SQL 中插入的記錄數(shù)多的情況下,JDBC-RESTful 的寫入性能是 JDBC-JNI 性能的 90% 左右;
  3. JDBC-RESTful 與 JDBC-JNI 在查詢性能上,沒有明顯差異。

注意:以上測試的寫入性能和查詢性能與具體測試環(huán)境和配置有關(guān),在不同的測試環(huán)境在性能差異上略有不同。

總結(jié)

這里,給使用 JDBC-RESTful 的 Java 開發(fā)者一些使用建議:

  1. JDBC-RESTful 提供了跨平臺開發(fā)的特性,可以在開發(fā)環(huán)境中使用。
  2. JDBC-JNI 相比 JDBC-RESTful 有一定的性能優(yōu)勢,如果在生產(chǎn)環(huán)境中希望最大化發(fā)揮 TDengine 的性能,可以使用 JDBC-JNI 的方式。
  3. JDBC-RESTful 到 JDBC-JNI 的切換十分簡單,一般只需要修改配置文件即可。