TDengine支持php,借助RESTful接口,TDengine的JDBC驱动可跨平台,而且不用为升级发愁了...

随着TDengine-2.0.14.0版本的发布,我们在这个版本中为JDBC Connector添加了一种新的实现:JDBC-RESTful。它内部使用RESTful接口, 而不是taosc连接TDengine服务器,这样能够跨平台,不仅在Linux, Windows, 在Mac上都能开发TDengine应用了。特别的是,你也不用担心升级TDengine需要同步升级客户端了。

01 使用JDBC-RESTful的好处

1.实现TDengine跨平台应用开发

之前,由于TDengine的JDBC驱动依赖本地动态库(linux上为libtaos.so,windows上为taos.dll),开发者需要先在本地安装客户端。否则,应用程序会报错:

no taos in java.library.path

而TDengine目前只支持Linux和Windows操作系统的客户端安装包,并且源码也无法在其他操作系统上编译。这对于使用macOS的用户来说,需要先在macOS上写好代码,再将代码部署到Linux服务器上调试,或使用像VS code等可以支持远程代码开发的IDE工具,这些都增加了使用TDengine的开发成本。这也是我们开发JDBC-RESTful的原因。使用JDBC-RESTful后,不需要安装客户端!不需要使用远程代码开发的IDE工具!在MacBook上也可以做开发啦。

2.无需安装和升级TDengine客户端

使用JDBC-RESTful后,不需要安装TDengine的客户端,也不需要跟随服务端升级客户端。对企业应用开发来说,由专门的运维人员来负责TDengine的维护和升级,服务端升级后,应用不需要升级客户端。

3.可忽略不计的迁移和使用成本

使用JDBC-RESTful,只需要修改一下driverClass和URL即可。这对于大部分的Java应用来说,只是修改一下配置文件即可。

下面,详细描述一下JDBC-RESTful的相关概念和使用方法。

02 JDBC-RESTful的实现原理

目前,JDBC Connector的实现包括2种形式:JDBC-JNI 和 JDBC-RESTful。

JDBC-JNI :使用JNI调用客户端 libtaos.so(或 taos.dll )的本地方法,通过socket与taosd通信。

JDBC-RESTful :在内部封装了 TDengine的RESTful 接口,将SQL封装成HTTP请求发送给server端的taosd示例。

e34c87e3c2852d71f28a9653f7c7bfc5.png

上图显示了 3 种 Java 应用使用连接器访问 TDengine 的方式:

JDBC-JNI:Java 应用在物理节点1(pnode1)上使用 JDBC-JNI 的 API ,直接调用客户端 API(libtaos.so 或 taos.dll)将写入和查询请求发送到位于物理节点2(pnode2)上的 taosd 实例。

RESTful:应用将 SQL 发送给位于物理节点2(pnode2)上的 RESTful 连接器,再调用客户端 API(libtaos.so)。

JDBC-RESTful:Java 应用通过 JDBC-RESTful 的 API ,将 SQL 封装成一个 RESTful 请求,发送给物理节点2的 RESTful 连接器。

03 JDBC-RESTful的使用示例

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

driverClass 指定为“com.taosdata.jdbc.rs.RestfulDriver”;

jdbcUrl 以“jdbc:TAOS-RS://”开头;

使用 6041 作为连接端口。

下面,展示一个完整的使用JDBC-RESTful的示例。

1.在pom.xml中引入taos-jdbcdriver依赖

com.taosdata.jdbc

taos-jdbcdriver

2.0.18

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();

}

}

}

04 JDBC-RESTful的性能

从上面JDBC-RESTful的实现原理看到,JDBC-RESTful方式相当于对libtaos.so的C方法进行了两次封装,第一次是RESTful对libtaos.so中的方法进行了封装,第二次是taos-jdbcdriver对RESTful接口进行了封装。并且,使用JDBC-RESTful,意味着将数据库的访问请求全部发送给了server,server端需要做所有由client负责的SQL解析、结果集聚合等工作。那么使用JDBC-RESTful接口是否会造成性能下降呢?我们内部对JDBC-RESTful接口进行了性能测试。

测试环境:CPU:mac pro(6核,Intel Core i7),内存:16 GB ,硬盘:SSD(500GB)

测试记录:

fc9b8209016c414b061236c6b401708b.png

测试结论:

在每条SQL中插入的记录数少的情况下,JDBC-RESTful的写入性能是JDBC-JNI的50%左右;

在每条SQL中插入的记录数多的情况下,JDBC-RESTful的写入性能是JDBC-JNI性能的90%左右;

JDBC-RESTful与JDBC-JNI在查询性能上,没有明显差异。

注意:以上测试的写入性能和查询性能与具体测试环境和配置有关,在不同的测试环境在性能差异上略有不同。

总结

这里,给使用JDBC-RESTful的Java开发者一些使用建议:

JDBC-RESTful提供了跨平台开发的特性,可以在开发环境中使用。

JDBC-JNI相比JDBC-RESTful有一定的性能优势,如果在生产环境中希望最大化发挥TDengine的性能,可以使用JDBC-JNI的方式。

JDBC-RESTful到JDBC-JNI的切换十分简单,一般只需要修改配置文件即可。

点击这里,试一试JDBC-RESTful吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值