Topik ini menjelaskan cara menggunakan model multi-nilai untuk menulis data. Untuk informasi lebih lanjut, lihat Aliyun TSDB SDK for Java. Anda dapat mengunduh kode yang diperlukan dari situs web dan melihat contoh-contoh yang disediakan di direktori test/example/ExampleOfMultiField dan test/com.aliyun.hitsdb.client/TestHiTSDBClientMultiFieldFeatures.
Note: Hanya Lindorm SDK V0.2.0 atau versi lebih baru yang mendukung model multi-nilai. Untuk informasi lebih lanjut tentang versi SDK terbaru dan tautan unduhan, lihat bagian "Versi" dalam dokumentasi SDK. SDK yang lebih lama dari V0.2.0 menggunakan model multi-nilai simulasi. Kami sarankan agar Anda tidak menggunakan model multi-nilai simulasi. Anda tidak dapat menggunakan kelas MultiField terkait model multi-nilai dari SDK terbaru untuk meminta data yang telah ditulis dengan menggunakan kelas MultiValue dari versi SDK sebelumnya.
Gunakan model multi-nilai untuk menulis data
Sample code:
/*
* Gunakan fungsi multiFieldPutSync().
* Fungsi ini mendukung penulisan satu titik atau banyak titik.
*
* Informasi berikut diperlukan saat Anda menulis data:
* Metric: kategori dari sebuah metric. Metrics mirip dengan pengukuran pada InfluxDB.
* Fields: informasi pengukuran dari sebuah metric. Setiap field menentukan sub-kategori dari sebuah metric. Sebuah metric bisa berisi beberapa fields. Contohnya, sebuah metric bernama angin. Metric ini berisi fields berikut: arah, kecepatan, deskripsi, dan suhu.
* Timestamp: timestamp dari sebuah titik.
* Tags: informasi tambahan dari sebuah timeline, misalnya model ABC123 dan nomor bagian pabrik 1234567890.
*/
MultiFieldPoint multiFieldPoint = MultiFieldPoint.metric("wind")
.field("speed", 45.2)
.field("level", 1.2)
.field("direction", "S")
.field("description", "Breeze")
.tag("sensor", "95D8-7913")
.tag("city", "hangzhou")
.tag("province", "zhejiang")
.timestamp(1537170208L)
.build();
// Penulisan sinkron.
tsdb.multiFieldPutSync(multiFieldPoint);Gunakan model multi-nilai untuk melakukan penulisan asinkron
Catatan: Hanya Lindorm SDK V0.2.1 atau versi lebih baru yang mendukung fitur ini. Untuk informasi lebih lanjut tentang versi SDK terbaru dan tautan unduhan, lihat bagian "Versi" dalam dokumentasi SDK.
Do not use a callback function
TSDBConfig config = TSDBConfig.address("127.0.0.1", 8242)
// Volume data yang dikirimkan setiap kali operasi penulisan batch dilakukan.
.batchPutSize(500)
// Jumlah thread yang digunakan untuk memproses penulisan nilai tunggal secara asinkron.
.batchPutConsumerThreadCount(1)
// Panjang antrian cache tempat penulisan multi-nilai asinkron diurutkan.
.multiFieldBatchPutBufferSize(10000)
// Jumlah thread yang digunakan untuk memproses penulisan multi-nilai secara asinkron.
.multiFieldBatchPutConsumerThreadCount(1)
.config();
// Catatan: Anda hanya perlu menginisiasi instance TSDB sekali.
TSDB tsdb = TSDBClientFactory.connect(config);
MultiFieldPoint point = MultiFieldPoint
.metric("test-test-test")
.tag("a", "1")
.tag("b", "2")
.timestamp(System.currentTimeMillis())
.field("f1", Math.random())
.field("f2", Math.random())
.build();
tsdb.multiFieldPut(point);
// Catatan: Selama siklus hidup aplikasi, Anda tidak perlu menutup instance TSDB yang ditentukan sampai aplikasi berakhir.
tsdb.close();
}Use a common callback function
// Membuat fungsi callback umum untuk memproses penulisan yang berhasil atau gagal.
AbstractMultiFieldBatchPutCallback callback = new MultiFieldBatchPutCallback() {
@Override
public void response(String address, List<MultiFieldPoint> points, Result result) {
int count = num.addAndGet(points.size());
System.out.println(result);
System.out.println("Sistem telah memproses" + count + "titik.");
}
final AtomicInteger num = new AtomicInteger();
@Override
public void failed(String address, List<MultiFieldPoint> points, Exception ex) {
System.err.println("Fungsi callback gagal." + points.size() + " kesalahan!");
ex.printStackTrace();
}
};
TSDBConfig config = TSDBConfig.address("127.0.0.1", 8242)
.httpConnectTimeout(90)
// Volume data yang dikirimkan setiap kali operasi penulisan batch dilakukan.
.batchPutSize(500)
// Jumlah thread yang digunakan untuk memproses penulisan nilai tunggal secara asinkron.
.batchPutConsumerThreadCount(1)
// Panjang antrian cache tempat penulisan multi-nilai asinkron diurutkan.
.multiFieldBatchPutBufferSize(10000)
// Jumlah thread yang digunakan untuk memproses penulisan multi-nilai secara asinkron.
.multiFieldBatchPutConsumerThreadCount(1)
// Fungsi callback yang digunakan untuk mendapatkan hasil dari penulisan multi-nilai asinkron.
.listenMultiFieldBatchPut(callback)
.config();
// Catatan: Anda hanya perlu menginisiasi instance TSDB sekali.
TSDB tsdb = TSDBClientFactory.connect(config);
MultiFieldPoint point = MultiFieldPoint
.metric("test-test-test")
.tag("a", "1")
.tag("b", "2")
.timestamp(System.currentTimeMillis())
.field("f1", Math.random())
.field("f2", Math.random())
.build();
tsdb.multiFieldPut(point);
// Catatan: Selama siklus hidup aplikasi, Anda tidak perlu menutup instance TSDB yang ditentukan sampai aplikasi berakhir.
tsdb.close();
}Use a summary callback function
// Membuat fungsi callback ringkasan untuk memproses penulisan yang berhasil atau gagal.
AbstractMultiFieldBatchPutCallback callback = new MultiFieldBatchPutSummaryCallback() {
final AtomicInteger num = new AtomicInteger();
@Override
public void response(String address, List<MultiFieldPoint> points, SummaryResult result) {
int count = num.addAndGet(points.size());
System.out.println(result);
System.out.println("Sistem telah memproses" + count + "titik.");
}
@Override
public void failed(String address, List<MultiFieldPoint> points, Exception ex) {
System.err.println("Fungsi callback gagal" + points.size() + " kesalahan!");
ex.printStackTrace();
}
};
TSDBConfig config = TSDBConfig.address("127.0.0.1", 8242)
.httpConnectTimeout(90)
// Volume data yang dikirimkan setiap kali operasi penulisan batch dilakukan.
.batchPutSize(500)
// Jumlah thread yang digunakan untuk memproses penulisan nilai tunggal secara asinkron.
.batchPutConsumerThreadCount(1)
// Panjang antrian cache tempat penulisan multi-nilai asinkron diurutkan.
.multiFieldBatchPutBufferSize(10000)
// Jumlah thread yang digunakan untuk memproses penulisan multi-nilai secara asinkron.
.multiFieldBatchPutConsumerThreadCount(1)
// Fungsi callback yang digunakan untuk mendapatkan hasil dari penulisan multi-nilai asinkron.
.listenMultiFieldBatchPut(callback)
.config();
// Catatan: Anda hanya perlu menginisiasi instance TSDB sekali.
TSDB tsdb = TSDBClientFactory.connect(config);
MultiFieldPoint point = MultiFieldPoint
.metric("test-test-test")
.tag("a", "1")
.tag("b", "2")
.timestamp(System.currentTimeMillis())
.field("f1", Math.random())
.field("f2", Math.random())
.build();
tsdb.multiFieldPut(point);
// Catatan: Selama siklus hidup aplikasi, Anda tidak perlu menutup instance TSDB yang ditentukan sampai aplikasi berakhir.
tsdb.close();
}Use a detail callback function
// Membuat fungsi callback detail untuk memproses penulisan yang berhasil atau gagal.
MultiFieldBatchPutDetailsCallback callback = new MultiFieldBatchPutDetailsCallback() {
final AtomicInteger num = new AtomicInteger();
@Override
public void response(String address, List<MultiFieldPoint> points, DetailsResult result) {
int count = num.addAndGet(points.size());
System.out.println(result);
System.out.println(Sistem telah memproses" + count + "titik.");
}
@Override
public void failed(String address, List<MultiFieldPoint> points, Exception ex) {
System.err.println("Fungsi callback gagal." + points.size() + " kesalahan!");
ex.printStackTrace();
}
};
TSDBConfig config = TSDBConfig.address("127.0.0.1", 8242)
.httpConnectTimeout(90)
// Volume data yang dikirimkan setiap kali operasi penulisan batch dilakukan.
.batchPutSize(500)
// Jumlah thread yang digunakan untuk memproses penulisan nilai tunggal secara asinkron.
.batchPutConsumerThreadCount(1)
// Panjang antrian cache tempat penulisan multi-nilai asinkron diurutkan.
.multiFieldBatchPutBufferSize(10000)
// Jumlah thread yang digunakan untuk memproses penulisan multi-nilai secara asinkron.
.multiFieldBatchPutConsumerThreadCount(1)
// Fungsi callback yang digunakan untuk mendapatkan hasil dari penulisan multi-nilai asinkron.
.listenMultiFieldBatchPut(callback)
.config();
// Catatan: Anda hanya perlu menginisiasi instance TSDB sekali.
TSDB tsdb = TSDBClientFactory.connect(config);
MultiFieldPoint point = MultiFieldPoint
.metric("test-test-test")
.tag("a", "1")
.tag("b", "2")
.timestamp(System.currentTimeMillis())
.field("f1", Math.random())
.field("f2", Math.random())
.build();
tsdb.multiFieldPut(point);
// Catatan: Selama siklus hidup aplikasi, Anda tidak perlu menutup instance TSDB yang ditentukan sampai aplikasi berakhir.
tsdb.close();
}