Dalam SDK Time Series Database (TSDB), kelas Point mendefinisikan titik dalam waktu. Objek Point adalah titik data pada suatu waktu dalam deret waktu (juga dikenal sebagai timeline).
Buat objek Point
Anda dapat menggunakan metode berbeda untuk membuat objek Point dalam format yang bervariasi. Bagian ini menjelaskan tiga metode pembuatan objek Point beserta contohnya.
Untuk membuat objek Point, Anda harus menentukan setidaknya satu pasangan nilai kunci tag.
Contoh 1
Saat membuat objek Point, gunakan timestamp dalam detik untuk menentukan waktu dari titik data dan tentukan data deret waktu serta tag untuk titik data tersebut.
// Gunakan timestamp yang diukur dalam detik.
int timestamp = (int)(System.currentTimeMillis()/1000);
// Buat objek Point.
Point point = Point.metric("test1")
.tag("tagk1", "tagv1")
.tag("tagk2", "tagv2")
.tag("tagk3", "tagv3")
.timestamp(timestamp).value(123,456)
.build();
Contoh 2
Saat membuat objek Point, gunakan timestamp dalam milidetik untuk menentukan waktu dari titik data, tentukan data deret waktu, dan gunakan HashMap untuk menentukan tag untuk titik data tersebut.
// Gunakan timestamp yang diukur dalam milidetik.
long timestamp = System.currentTimeMillis();
// Gunakan HashMap untuk menentukan tag.
Map<String,String> tagsMap = new HashMap<String,String>();
tagsMap.put("tagk1", "tagv1");
tagsMap.put("tagk2", "tagv2");
// Buat objek Point.
Point point = Point.metric("test1")
.tag(tagsMap)
.value(timestamp,123,456)
.build();
Contoh 3
Saat membuat objek Point, gunakan java.util.Date untuk menentukan waktu dari titik data.
// Gunakan java.util.Date untuk menentukan waktu dari titik data yang akan dibuat.
Point point = Point.metric("test1")
.tag("tagk1", "tagv1")
.value(new Date,123.456)
.build();
Tulis data
Klien TSDB menyediakan dua mode penulisan data: sinkron dan asinkron.
Mode Sinkron
Sebagai contoh, Anda perlu membuat 500 titik data dan mengirimkan titik-titik data tersebut ke TSDB.
Contoh Kode
List<Point> points = new ArrayList<Point>();
// Buat titik-titik data.
for(int i = 0; i<500; i++) {
long timestamp = System.currentTimeMillis();
Point point = Point.metric("test1")
.tag("tagk1", "tagv1")
.value(timestamp, Math.random())
.build();
// Tambahkan titik-titik secara manual ke dalam daftar.
points.add(point);
}
// Kirim daftarnya.
tsdb.putSync(points)
Dalam kebanyakan kasus, untuk memastikan performa tinggi dari penulisan sinkron, Anda perlu menambahkan titik-titik data yang telah dibuat secara manual ke dalam daftar. Kami merekomendasikan Anda menambahkan 500 hingga 1.000 titik data ke dalam setiap daftar. Kami juga merekomendasikan penggunaan beberapa thread untuk mengirimkan titik-titik data secara bersamaan.
Respon Penulisan Sinkron
Anda dapat menentukan informasi yang termasuk dalam respon sesuai dengan kebutuhan bisnis Anda.
-
Jika Anda ingin sistem mengembalikan objek kosong untuk permintaan Anda, gunakan konfigurasi berikut. Dengan cara ini, hasil yang dikembalikan sama dengan hasil dari pemanggilan
POST /api/put.Result result = tsdb.putSync(ps); -
Jika Anda ingin sistem mengembalikan ringkasan untuk permintaan Anda, gunakan konfigurasi berikut. Dengan cara ini, hasil yang dikembalikan sama dengan hasil dari pemanggilan
POST/api/put?summary=true. Ringkasan hanya mencakup jumlah titik data yang berhasil ditulis dan jumlah titik data yang gagal ditulis.SummaryResult summaryResult = tsdb.putSync(ps,SummaryResult.class); -
Jika Anda ingin sistem mengembalikan ringkasan untuk permintaan Anda, gunakan konfigurasi berikut. Dengan cara ini, hasil yang dikembalikan sama dengan hasil dari pemanggilan
POST/api/put?details=true. Ringkasan mencakup jumlah titik data yang berhasil ditulis, jumlah titik data yang gagal ditulis, dan penyebab kegagalan penulisan.DetailsResult detailsResult = tsdb.putSync(ps,DetailsResult.class);
Mode Asinkron
Penulisan asinkron lebih sederhana daripada penulisan sinkron. Anda hanya perlu membuat titik-titik data dan kemudian mengirimkannya. Klien TSDB secara otomatis menambahkan titik-titik data ke dalam daftar sebelum dikirimkan.
Jika Anda tidak memiliki persyaratan khusus, kami merekomendasikan Anda menulis data dalam mode asinkron.
Contoh Kode
// Buat titik-titik data.
Point point = Point.metric("test1")
.tag("tagk1", "tagv1")
.value(timestamp, Math.random())
.build();
// Kirim titik-titik data.
tsdb.put(point);
Pengaturan Callback untuk Mode Asinkron
Jika Anda menulis data dalam mode asinkron dan ingin mendapatkan respons dari pemanggilan operasi PUT, konfigurasikan antarmuka callback.
Contoh Kode
final AtomicLong num = new AtomicLong();
// Buat objek callback.
BatchPutCallback cb = new BatchPutCallback() {
@Override
public void response(String address, List<Point> input, Result output) {
long afterNum = num.addAndGet(input.size());
System.out.println("Berhasil" + input.size() + ", Diproses" + afterNum);
}
@Override
public void failed(String address, List<Point> input, Exception ex) {
ex.printStackTrace();
long afterNum = num.addAndGet(input.size());
System.out.println("Gagal" + input.size() + ", Diproses" + afterNum);
}
};
TSDBConfig config = TSDBConfig
.address("example.hitsdb.com", 8242)
.listenBatchPut(cb) // Konfigurasikan antarmuka callback.
.config();
tsdb = TSDBClientFactory.connect(config);
Klien TSDB menyediakan empat antarmuka callback berikut:
-
BatchPutCallback: Jika Anda menulis data dalam mode sederhana, gunakan antarmuka ini. Operasi API adalah
POST /api/put. -
BatchPutSummaryCallback: Jika Anda menulis data dalam mode statistik, gunakan antarmuka ini. Operasi API adalah
POST /api/put?summary=true. -
BatchPutDetailsCallback: Jika Anda menulis data dalam mode rinci, gunakan antarmuka ini. Operasi API adalah
POST /api/put?details=true. -
BatchPutIgnoreErrorsCallback: Jika Anda menulis data dalam mode toleransi kesalahan, gunakan antarmuka ini. Operasi API adalah
POST /api/put?ignoreErrors=true.
Konfigurasikan antarmuka callback sesuai dengan kebutuhan bisnis Anda. Untuk informasi lebih lanjut tentang mode penulisan dan skenario aplikasi, lihat Mode Penulisan dan Respon.
-
Saat mengonfigurasi metode callback, jangan tentukan operasi yang memakan waktu dalam metode callback. Jika Anda perlu melakukan operasi yang memakan waktu, lakukan operasi tersebut pada thread pekerja lainnya.
-
Metode
response()dan metodefailed()dipanggil dalam situasi yang berbeda:-
Jika permintaan Anda valid dan diproses oleh server, metode
response()dipanggil. Respon bervariasi tergantung pada jenis objek callback. -
Jika permintaan Anda ditolak oleh server karena permintaan tersebut berisi pesan yang tidak valid, memicu pembatasan lalu lintas, gagal autentikasi, atau diidentifikasi sebagai tidak valid karena alasan lain, metode
failed()dipanggil.
Kami merekomendasikan Anda mengimplementasikan metode
failed()saat mengimplementasikan antarmuka callback. Jika metode failed() tidak diimplementasikan, metodefailed()default akan dipanggil. Metode failed() default adalah metode kosong. -
-
Dalam contoh kode untuk antarmuka callback yang disediakan dalam topik ini, model data nilai tunggal digunakan untuk menulis data. Metode menulis titik data multi-nilai serupa dengan metode menulis titik data nilai tunggal. Perbedaannya adalah Anda harus mengganti antarmuka callback dengan antarmuka callback yang sesuai yang disediakan dalam daftar berikut:
-
MultiFieldbatchPutCallback
-
MultiFieldbatchPutSummaryCallback
-
MultiFieldbatchPutDetailsCallback
-
MultiFieldbatchPutIgnoreErrorsCallback
-