Lindorm JDBC sürücüsünü kullanarak bir Java uygulamasından LindormTSDB'ye bağlanın. Bu öğreticide sürücüyü yükleme, bağlantı kurma ve temel oluşturma, ekleme ve sorgulama işlemlerini çalıştırma adımları açıklanmaktadır.
Önkoşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
JDK V1.8 veya sonraki bir sürümün yüklü olması
İstemci IP adresinizin Lindorm örneği izin listesine eklenmiş olması — bkz. İzin listelerini yapılandırma
LindormTSDB uç noktasının bilinmesi — bkz. Uç noktaları görüntüleme
Adım 1: Sürücüyü yükleme
Aşağıdaki yükleme yöntemlerinden birini seçin.
JAR dosyasını manuel olarak indirme
Maven Central'dan lindorm-all-client JAR paketini indirin. Gereksinimlerinize uygun sürümü seçin. Örneğin, 2.1.5 sürümünü yüklemek için lindorm-all-client-2.1.5.jar dosyasını indirin ve proje sınıf yoluna (classpath) ekleyin.
Maven bağımlılığını ekleme (önerilen)
Aşağıdaki bağımlılığı pom.xml dosyanıza ekleyin:
<dependency>
<groupId>com.aliyun.lindorm</groupId>
<artifactId>lindorm-all-client</artifactId>
<version>2.2.1.3</version>
</dependency>
Gereksinimlerinize göre sürümü belirtin.
Adım 2: LindormTSDB'ye bağlanma
LindormTSDB için JDBC URL biçimi şöyledir:
jdbc:lindorm:tsdb:url=http://<endpoint>:<port>
| Parametre | Açıklama | Örnek |
|---|---|---|
<endpoint> |
Lindorm konsolundaki LindormTSDB uç noktası | ld-bp12pt80qr38p****-proxy-tsdb-pub.lindorm.rds.aliyuncs.com |
<port> |
LindormTSDB bağlantı noktası | 8242 |
URL parametrelerinin tam listesi için bkz. JDBC sürücüsünün URL'si.
Adım 3: Tablo oluşturma, veri ekleme ve sorgu çalıştırma
Aşağıdaki örnek, LindormTSDB'ye bağlanır, varsayılan veritabanında bir zaman serisi tablosu oluşturur, satırları toplu iş olarak ekler ve bir zaman aralığı kullanarak veri sorgular.
import java.sql.*;
class Test {
public static void main(String[] args) {
// Replace with your LindormTSDB endpoint and port.
String url = "jdbc:lindorm:tsdb:url=http://ld-bp12pt80qr38p****-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242";
Connection conn = null;
try {
conn = DriverManager.getConnection(url);
try (Statement stmt = conn.createStatement()) {
// Create a time series table in the default database.
// device_id and region are TAG columns (dimensions for filtering).
stmt.execute("CREATE TABLE sensor1 (device_id VARCHAR TAG, region VARCHAR TAG, time TIMESTAMP, temperature DOUBLE, humidity DOUBLE, PRIMARY KEY(device_id))");
// Insert multiple rows in a single batch to reduce round trips.
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:00',12.1,45)");
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:10',13.2,47)");
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:20',10.6,46)");
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1261','south-cn','2021-04-22 15:33:00',18.1,44)");
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1261','south-cn','2021-04-22 15:33:10',19.7,44)");
stmt.executeBatch();
stmt.clearBatch();
}
// Always specify a time range to limit the amount of data scanned.
try (PreparedStatement pstmt = conn.prepareStatement(
"SELECT device_id, region, time, temperature, humidity FROM sensor1 WHERE time >= ? AND time <= ?")) {
pstmt.setTimestamp(1, Timestamp.valueOf("2021-04-22 15:33:00"));
pstmt.setTimestamp(2, Timestamp.valueOf("2021-04-22 15:33:20"));
try (ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
String device_id = rs.getString("device_id");
String region = rs.getString("region");
Timestamp time = rs.getTimestamp("time");
Double temperature = rs.getDouble("temperature");
Double humidity = rs.getDouble("humidity");
System.out.printf("%s %s %s %f %f\n", device_id, region, time, temperature, humidity);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Sorgu başarılı olursa çıktı aşağıdakine benzer:
F07A1261 south-cn 2021-04-22 15:33:00.0 18.100000 44.000000
F07A1261 south-cn 2021-04-22 15:33:10.0 19.700000 44.000000
F07A1260 north-cn 2021-04-22 15:33:00.0 12.100000 45.000000
F07A1260 north-cn 2021-04-22 15:33:10.0 13.200000 47.000000
F07A1260 north-cn 2021-04-22 15:33:20.0 10.600000 46.000000
Veri türü eşlemesi
LindormTSDB SQL türleri ile Java türleri arasındaki eşleme aşağıdaki gibidir:
| LindormTSDB türü | Java türü | JDBC alıcısı |
|---|---|---|
VARCHAR |
java.lang.String |
rs.getString() |
VARCHAR TAG |
java.lang.String |
rs.getString() |
DOUBLE |
java.lang.Double |
rs.getDouble() |
TIMESTAMP |
java.sql.Timestamp |
rs.getTimestamp() |
Sorun giderme
Bağlantı başarısız oluyor
İstemci IP adresinizin örnek izin listesinde bulunduğunu doğrulayın.
JDBC URL'sindeki uç nokta ve bağlantı noktasının doğru olduğunu onaylayın.
Lindorm örneğinin çalıştığını ve zaman serisi motorunun etkinleştirildiğini kontrol edin.
Sorgu veri döndürmüyor
WHEREyan tümcesindeki zaman aralığının, eklenen verilerin zaman damgalarıyla eşleştiğini onaylayın.Tablo adı ve sütun adlarının doğru olduğunu doğrulayın.
**executeBatch() yavaş çalışıyor**
İş yükünüzü ve veri hacminizi temel alarak toplu iş boyutunu ayarlayın.
Sonraki adımlar
JDBC sürücüsünün URL'si — JDBC URL parametrelerinin tam listesi
Desteklenen API işlemleri ve yöntemleri — LindormTSDB için JDBC API kapsamı
SQL başvurusu — tam LindormTSDB SQL sözdizimi