Topik ini menjelaskan cara menggunakan driver Java Database Connectivity (JDBC) Lindorm untuk terhubung dan memanfaatkan LindormTSDB. Topik ini juga mencakup operasi API serta metode yang dapat dipanggil saat menggunakan driver JDBC untuk mengakses LindormTSDB.
Informasi latar belakang
Driver JDBC LindormTSDB mematuhi operasi API yang ditentukan berdasarkan spesifikasi JDBC 4.1. LindormTSDB adalah basis data deret waktu, sehingga fitur operasi API yang disediakan oleh driver JDBC merupakan subset dari fitur dasar yang ditentukan dalam spesifikasi JDBC 1.0.
Prasyarat
Java Development Kit (JDK) 1.8 atau versi lebih baru telah diinstal.
Alamat IP klien Anda telah ditambahkan ke daftar putih instance Lindorm. Untuk informasi lebih lanjut, lihat Konfigurasi Daftar Putih.
Titik akhir LindormTSDB telah diperoleh. Untuk informasi lebih lanjut, lihat Lihat Titik Akhir.
Prosedur
Gunakan salah satu metode berikut untuk menambahkan dependensi driver JDBC Lindorm:
Instal secara manual driver JDBC.
Unduh file JAR lindorm-all-client yang mengintegrasikan driver JDBC ke klien lokal Anda. Pilih versi driver JDBC yang ingin diinstal. Sebagai contoh, jika Anda ingin menginstal driver JDBC 2.1.5, unduh file lindorm-all-client-2.1.5.jar.
Gunakan Maven untuk mengunduh driver JDBC.
Untuk mengintegrasikan driver JDBC ke dalam proyek Maven, buat proyek Maven dan tambahkan pengaturan dependensi berikut ke file pom.xml:
<dependency> <groupId>com.aliyun.lindorm</groupId> <artifactId>lindorm-all-client</artifactId> <version>2.2.0</version> </dependency>CatatanTentukan nomor versi lindorm-all-client sesuai kebutuhan Anda.
Akses LindormTSDB. Untuk informasi tentang kode sampel lengkap, lihat kode sampel di bagian Contoh.
Buat koneksi antara LindormTSDB dan klien Anda.
String url = "jdbc:lindorm:tsdb:url=http://<host:port>"; Connection conn = DriverManager.getConnection(url);Catatanhost:port: menentukan titik akhir dan port yang digunakan untuk terhubung ke LindormTSDB, sepertild-bp17j28j2y7pm****-proxy-tsdb.lindorm.rds.aliyuncs.com:8242.jdbc:lindorm:tsdb:url=http://<host:port>: menentukan URL driver JDBC. Untuk informasi tentang sintaksis dan parameter koneksi, lihat URL Driver JDBC.
Buat basis data deret waktu Lindorm dan tabel.
Statement stmt = conn.createStatement(); stmt.execute("CREATE DATABASE test"); stmt.execute("USE test"); stmt.execute("CREATE TABLE sensor (device_id VARCHAR TAG,region VARCHAR TAG,time TIMESTAMP,temperature DOUBLE,humidity DOUBLE,PRIMARY KEY(device_id))");Masukkan data ke dalam tabel sensor.
// Gunakan PreparedStatement untuk menulis beberapa baris data secara batch. (direkomendasikan) PreparedStatement pstmt = conn.prepareStatement("INSERT INTO sensor (device_id, region, time, temperature, humidity) VALUES (?, ?, ?, ?, ?)"); int batchSize = 100; long ts = System.currentTimeMillis(); for (int i = 0; i < batchSize; i++) { // Tentukan parameter untuk kolom sesuai dengan urutan parameter kolom yang ditentukan dalam pernyataan INSERT. pstmt.setString(1, "F07A1260"); pstmt.setString(2, "north-cn"); pstmt.setLong(3, ts + i * 10000); pstmt.setDouble(4, 12.1); pstmt.setLong(5, 45); pstmt.addBatch(); } pstmt.executeBatch(); pstmt.clearBatch(); // Tulis beberapa baris data secara batch. Statement stmt = conn.createStatement(); stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1260','north-cn',1619076780000,12.1,45)"); stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1260','north-cn',1619076790000,13.2,47)"); stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1260','north-cn',1619076800000,10.6,46)"); stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1261','south-cn',1619076780000,18.1,44)"); stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1261','south-cn',1619076790000,19.7,44)"); stmt.executeBatch(); stmt.clearBatch(); // Tulis satu baris data. (tidak direkomendasikan) Statement stmt = conn.createStatement(); stmt.execute("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1260','north-cn',1619076780000,12.1,45)");Kueri data dalam tabel sensor.
ResultSet rs = stmt.executeQuery("select device_id, region,time,temperature,humidity from sensor where time >= 1619076780000 and time <= 1619076800000"); while (rs.next()) { String device_id = rs.getString("device_id"); String region = rs.getString("region"); Long time = rs.getLong("time"); Double temperature = rs.getDouble("temperature"); Long humidity = rs.getLong("humidity"); System.out.printf("%s %s %d %f %d\n", device_id, region, time, temperature, humidity); }
Operasi API dan metode yang didukung
Tabel berikut menjelaskan operasi API dan metode yang didukung saat menggunakan driver JDBC untuk mengakses LindormTSDB.
Operasi API yang tidak dijelaskan dalam tabel berikut dipanggil berdasarkan fitur LindormTSDB. Untuk informasi tentang operasi API ini, ajukan tiket. Jika Anda memiliki masalah lain, ajukan tiket.
Operasi API | Metode yang didukung |
Connection |
Catatan Implementasi operasi Connection driver JDBC Lindorm tidak aman-thread. Kami merekomendasikan agar Anda tidak menggunakan objek Connection yang sama di beberapa thread. |
Statement |
|
ResultSet |
|
PreparedStatement |
|
URL driver JDBC
URL driver JDBC sangat penting ketika aplikasi memanggil operasi Connection untuk membuat koneksi database. URL driver JDBC biasanya digunakan untuk menentukan protokol koneksi database. LindormTSDB terhubung menggunakan driver JDBC.
Kode sampel berikut memberikan contoh sintaksis URL driver JDBC:
jdbc:lindorm:tsdb:url=http://${host:port}[;${connection_parameter}=${connection_value}]...host:port: menentukan titik akhir dan port yang digunakan untuk terhubung ke LindormTSDB, seperti ld-bp17j28j2y7pm****-proxy-tsdb.lindorm.rds.aliyuncs.com:8242.
Tabel berikut menjelaskan parameter koneksi yang didukung dalam URL driver JDBC.
Parameter | Deskripsi |
user | Nama pengguna instance Lindorm. Nama pengguna digunakan untuk otentikasi pengguna saat pengguna mengakses LindormTSDB. Catatan Jika fitur otentikasi pengguna tidak diaktifkan untuk LindormTSDB, Anda tidak perlu menentukan nama pengguna. |
password | Kata sandi yang sesuai dengan nama pengguna. Kata sandi digunakan untuk otentikasi pengguna saat pengguna mengakses LindormTSDB. Jika Anda lupa kata sandi, Anda dapat mengubah kata sandi di konsol Lindorm Insight LindormTable. Untuk informasi lebih lanjut, lihat Ubah kata sandi. Catatan Jika fitur otentikasi pengguna tidak diaktifkan untuk LindormTSDB, Anda tidak perlu menentukan kata sandi. |
database | Basis data yang ingin Anda akses. Jika parameter ini tidak ditentukan, basis data |
lindorm.tsdb.driver.connect.timeout | Periode timeout untuk terhubung ke server LindormTSDB. Unit: milidetik. Nilai default adalah 60.000 milidetik yang sama dengan 60 detik. |
lindorm.tsdb.driver.socket.timeout | Periode timeout untuk interval antara dua kali data dibaca atau ditulis ke soket. Unit: milidetik. Nilai default: –1. Nilai default menentukan bahwa interval antara dua kali data dibaca atau ditulis ke soket tidak timeout. |
Untuk meningkatkan pemanfaatan sumber daya, server LindormTSDB secara proaktif menutup koneksi ke klien LindormTSDB setelah koneksi idle selama 60 detik. Jika Anda menggunakan koneksi setelah koneksi ditutup, kesalahan com.aliyun.lindorm.client.shaded.org.apache.calcite.avatica.http.ConnectionDisconnectedException dilaporkan. Untuk menyelesaikan masalah, Anda dapat membuat koneksi baru.
Gunakan kumpulan koneksi Alibaba Druid untuk mengakses LindormTSDB
Saat menggunakan Java untuk mengembangkan aplikasi yang menyimpan data di LindormTSDB, kami merekomendasikan agar Anda mengonfigurasi aplikasi untuk menggunakan driver JDBC guna terhubung ke LindormTSDB. Jika Anda menggunakan driver JDBC untuk terhubung ke LindormTSDB, Anda harus membuat objek Connection. Jika objek Connection baru dibuat setiap kali LindormTSDB terhubung, overhead sumber daya menjadi tinggi. Untuk mengurangi overhead sumber daya, gunakan kumpulan koneksi untuk membuat dan mengelola koneksi.
Berbagai kumpulan koneksi tersedia. Bagian berikut menjelaskan cara menggunakan kumpulan koneksi open source Alibaba Druid.
Tambahkan dependensi kumpulan koneksi Alibaba Druid ke proyek Maven. Mulai klien, buat proyek, dan konfigurasikan dependensi Maven di file pom.xml. Kode sampel berikut memberikan detail tentang dependensi.
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.6</version> </dependency>Tambahkan dependensi driver JDBC Lindorm ke proyek Maven. Untuk informasi lebih lanjut, lihat Langkah 1 di bagian Prosedur.
Jalankan kode berikut untuk membuat objek DataSource dan tentukan URL driver JDBC LindormTSDB untuk objek DataSource:
dataSource = new DruidDataSource(); try { dataSource.setDriver(DriverManager.getDriver("jdbc:lindorm:tsdb:url=http://<host:port>")); } catch (SQLException throwables) { throwables.printStackTrace(); }Catatanhost:port: menentukan titik akhir dan port yang digunakan untuk terhubung ke LindormTSDB, sepertild-bp17j28j2y7pm****-proxy-tsdb.lindorm.rds.aliyuncs.com:8242.Buat koneksi JDBC berdasarkan objek DataSource dan akses LindormTSDB. Bagian berikut memberikan kode sampel lengkap:
import com.alibaba.druid.pool.DruidDataSource; import java.sql.*; public class App { private DruidDataSource dataSource; public void setUp() { dataSource = new DruidDataSource(); try { dataSource.setDriver(DriverManager.getDriver("jdbc:lindorm:tsdb:url=http://ld-bp17j28j2y7pm****-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242")); dataSource.setUrl("jdbc:lindorm:tsdb:url=http://ld-bp17j28j2y7pm****-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242"); dataSource.setValidationQuery("select 1"); dataSource.setMaxActive(1); dataSource.setUsername("username"); dataSource.setPassword("****"); dataSource.setKeepAlive(true); dataSource.setMinEvictableIdleTimeMillis(80); dataSource.setMaxWait(10000); dataSource.init(); } catch (SQLException throwables) { throwables.printStackTrace(); } } public void close() { dataSource.close(); } public void testQuery() { try (Connection conn = this.dataSource.getConnection()) { try (Statement stmt = conn.createStatement()) { ResultSet rs = stmt.executeQuery("select * from sensor"); long count = 0; while (rs.next()) { count++; } System.out.println("count=" + count + " "); } catch (RuntimeException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } catch (RuntimeException e) { System.out.println("koneksi gagal."); e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } public static void main( String[] args ) { App app = new App(); app.setUp(); app.testQuery(); app.close(); } }