Topik ini menjelaskan cara menggunakan Java Native SDK untuk terhubung ke dan menggunakan LindormTSDB.
Prasyarat
Lingkungan Java telah diinstal. Diperlukan JDK 1.8 atau versi yang lebih baru.
Versi LindormTSDB adalah 3.4.7 atau yang lebih baru.
CatatanUntuk informasi selengkapnya tentang cara melihat atau meningkatkan versi saat ini, lihat Panduan Versi untuk LindormTSDB dan Pembaruan versi minor.
Alamat IP klien telah ditambahkan ke daftar putih Lindorm.
Anda telah memperoleh Lindorm titik akhir mesin deret waktu.
Persiapan
Sebelum menggunakan Java Native SDK untuk terhubung ke LindormTSDB, Anda harus menginstal SDK tersebut. Topik ini menggunakan versi 1.0.0 sebagai contoh. Anda dapat menginstal Java Native SDK dengan salah satu dari tiga cara berikut:
Cara 1 (Direkomendasikan): Impor SDK LindormTSDB untuk Java ke dalam proyek Maven. Tambahkan dependensi berikut ke bagian
dependenciespada file pom.xml.<dependency> <groupId>com.aliyun.lindorm</groupId> <artifactId>lindorm-tsdb-client</artifactId> <version>1.0.4</version> </dependency>CatatanSDK Java LindormTSDB menyediakan proyek contoh berbasis Maven. Anda dapat mengunduh proyek contoh untuk dikompilasi dan dijalankan secara lokal, atau Anda dapat menggunakannya sebagai dasar untuk mengembangkan proyek Anda sendiri.
Impor paket JAR ke dalam proyek Eclipse.
Unduh paket SDK Java.
Ekstrak paket SDK Java yang telah diunduh.
Tambahkan paket JAR yang telah diekstrak ke proyek Eclipse Anda.
Di Eclipse, buka proyek Anda, klik kanan proyek tersebut, lalu pilih Properties.
Pada kotak dialog yang muncul, klik , lalu pilih file lindorm-tsdb-client-1.0.0.jar yang telah diekstrak dan paket JAR di direktori lib.
Klik Apply and Close.
Impor paket JAR ke dalam proyek IntelliJ IDEA.
Unduh paket SDK Java.
Ekstrak paket SDK Java yang telah diunduh.
Tambahkan paket JAR yang telah diekstrak ke proyek IntelliJ IDEA Anda.
Di IntelliJ IDEA, buka proyek Anda dan klik pada bilah menu.
Pada panel navigasi di sisi kiri kotak dialog Project Structure, pilih .
Di sisi kanan panel, klik
dan pilih JARs or directories.Pada kotak dialog yang muncul, pilih file lindorm-tsdb-client-1.0.0.jar yang telah diekstrak dan paket JAR di direktori lib, lalu klik OK.
Klik Apply.
Klik OK.
Anda dapat memperoleh semua versi Java Native SDK untuk LindormTSDB dari repositori pusat Maven. Untuk informasi selengkapnya, lihat Repositori Maven.
Untuk informasi selengkapnya tentang versi Java Native SDK untuk LindormTSDB, lihat Panduan Versi.
Prosedur
Buat instans database. Saat membuat LindormTSDBClient, Anda harus menentukan titik akhir LindormTSDB.
String url = "http://ld-bp17j28j2y7pm****-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242"; // LindormTSDBClient bersifat thread-safe dan dapat digunakan kembali. Anda tidak perlu sering membuat dan menghapusnya. ClientOptions options = ClientOptions.newBuilder(url).build(); LindormTSDBClient lindormTSDBClient = LindormTSDBFactory.connect(options);Buat database bernama demo dan tabel deret waktu bernama sensor. Untuk informasi selengkapnya tentang pernyataan SQL yang digunakan untuk membuat database dan tabel deret waktu, lihat CREATE DATABASE dan CREATE TABLE.
lindormTSDBClient.execute("CREATE DATABASE demo"); lindormTSDBClient.execute("demo","CREATE TABLE sensor (device_id VARCHAR TAG,region VARCHAR TAG,time BIGINT,temperature DOUBLE,humidity DOUBLE,PRIMARY KEY(device_id))");Tulis data ke tabel.
CatatanSecara default, LindormTSDBClient menulis data secara asinkron dalam batch untuk meningkatkan kinerja penulisan data. Untuk menulis data secara sinkron, Anda dapat memanggil metode
join()dari objekCompletableFuture<WriteResult>yang dikembalikan oleh metodewrite().int numRecords = 10; List<Record> records = new ArrayList<>(numRecords); long currentTime = System.currentTimeMillis(); for (int i = 0; i < numRecords; i++) { Record record = Record .table("sensor") .time(currentTime + i * 1000) .tag("device_id", "F07A1260") .tag("region", "north-cn") .addField("temperature", 12.1 + i) .addField("humidity", 45.0 + i) .build(); records.add(record); } CompletableFuture<WriteResult> future = lindormTSDBClient.write("demo", records); // Proses hasil penulisan asinkron future.whenComplete((r, ex) -> { // Tangani kegagalan penulisan if (ex != null) { System.out.println("Gagal menulis."); if (ex instanceof LindormTSDBException) { LindormTSDBException e = (LindormTSDBException) ex; System.out.println("Menangkap LindormTSDBException, yang berarti permintaan Anda berhasil mencapai Lindorm TSDB, " + "tetapi ditolak dengan tanggapan kesalahan karena suatu alasan."); System.out.println("Kode Kesalahan: " + e.getCode()); System.out.println("SQL State: " + e.getSqlstate()); System.out.println("Pesan Kesalahan: " + e.getMessage()); } else { ex.printStackTrace(); } } else { System.out.println("Berhasil menulis."); } }); // Ini adalah contoh cara sederhana memproses hasil penulisan dalam mode sinkron. System.out.println(future.join());Kueri data dari tabel deret waktu. Untuk informasi selengkapnya tentang pernyataan kueri SQL, lihat Kueri dasar.
String sql = "select * from sensor limit 10"; ResultSet resultSet = lindormTSDBClient.query("demo", sql); try { // Proses hasil kueri QueryResult result = null; // Hasil kueri dikembalikan dalam batch. Secara default, setiap batch berisi 1.000 baris. // Jika metode next() dari resultSet mengembalikan null, berarti semua hasil kueri telah dibaca. while ((result = resultSet.next()) != null) { List<String> columns = result.getColumns(); System.out.println("columns: " + columns); List<String> metadata = result.getMetadata(); System.out.println("metadata: " + metadata); List<List<Object>> rows = result.getRows(); for (int i = 0, size = rows.size(); i < size; i++) { List<Object> row = rows.get(i); System.out.println("row #" + i + " : " + row); } } } finally { // Setelah kueri selesai, pastikan Anda memanggil metode close dari ResultSet untuk melepaskan sumber daya I/O. resultSet.close(); }
Contoh kode lengkap
import com.aliyun.lindorm.tsdb.client.ClientOptions;
import com.aliyun.lindorm.tsdb.client.LindormTSDBClient;
import com.aliyun.lindorm.tsdb.client.LindormTSDBFactory;
import com.aliyun.lindorm.tsdb.client.exception.LindormTSDBException;
import com.aliyun.lindorm.tsdb.client.model.QueryResult;
import com.aliyun.lindorm.tsdb.client.model.Record;
import com.aliyun.lindorm.tsdb.client.model.ResultSet;
import com.aliyun.lindorm.tsdb.client.model.WriteResult;
import com.aliyun.lindorm.tsdb.client.utils.ExceptionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
public class QuickStart {
public static void main(String[] args) {
// 1. Buat instans klien.
String url = "http://ld-xxxx-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242";
// LindormTSDBClient bersifat thread-safe dan dapat digunakan kembali. Anda tidak perlu sering membuat dan menghapusnya.
ClientOptions options = ClientOptions.newBuilder(url).build();
LindormTSDBClient lindormTSDBClient = LindormTSDBFactory.connect(options);
// 2. Buat database bernama demo dan tabel bernama sensor.
lindormTSDBClient.execute("CREATE DATABASE demo");
lindormTSDBClient.execute("demo","CREATE TABLE sensor (device_id VARCHAR TAG,region VARCHAR TAG,time BIGINT,temperature DOUBLE,humidity DOUBLE,PRIMARY KEY(device_id))");
// 3. Tulis data.
int numRecords = 10;
List<Record> records = new ArrayList<>(numRecords);
long currentTime = System.currentTimeMillis();
for (int i = 0; i < numRecords; i++) {
Record record = Record
.table("sensor")
.time(currentTime + i * 1000)
.tag("device_id", "F07A1260")
.tag("region", "north-cn")
.addField("temperature", 12.1 + i)
.addField("humidity", 45.0 + i)
.build();
records.add(record);
}
CompletableFuture<WriteResult> future = lindormTSDBClient.write("demo", records);
// Proses hasil penulisan asinkron.
future.whenComplete((r, ex) -> {
// Tangani kegagalan penulisan.
if (ex != null) {
System.out.println("Gagal menulis.");
Throwable throwable = ExceptionUtils.getRootCause(ex);
if (throwable instanceof LindormTSDBException) {
LindormTSDBException e = (LindormTSDBException) throwable;
System.out.println("Menangkap LindormTSDBException, yang berarti permintaan Anda berhasil mencapai Lindorm TSDB, "
+ "tetapi ditolak dengan tanggapan kesalahan karena suatu alasan.");
System.out.println("Kode Kesalahan: " + e.getCode());
System.out.println("SQL State: " + e.getSqlstate());
System.out.println("Pesan Kesalahan: " + e.getMessage());
} else {
throwable.printStackTrace();
}
} else {
System.out.println("Berhasil menulis.");
}
});
// Ini adalah contoh tunggu sinkron sederhana.
System.out.println(future.join());
// 4. Kueri data.
String sql = "select * from sensor limit 10";
ResultSet resultSet = lindormTSDBClient.query("demo", sql);
try {
// Proses hasil kueri.
QueryResult result = null;
// Hasil kueri dikembalikan dalam batch. Secara default, setiap batch berisi 1.000 baris.
// Jika metode next() dari resultSet mengembalikan null, berarti semua hasil kueri telah dibaca.
while ((result = resultSet.next()) != null) {
List<String> columns = result.getColumns();
System.out.println("columns: " + columns);
List<String> metadata = result.getMetadata();
System.out.println("metadata: " + metadata);
List<List<Object>> rows = result.getRows();
for (int i = 0, size = rows.size(); i < size; i++) {
List<Object> row = rows.get(i);
System.out.println("row #" + i + " : " + row);
}
}
} finally {
// Setelah kueri selesai, pastikan Anda memanggil metode close dari ResultSet untuk melepaskan sumber daya I/O.
resultSet.close();
}
lindormTSDBClient.shutdown();
}
}