All Products
Search
Document Center

:Tulis data

Last Updated:Mar 28, 2026

Time Series Database (TSDB) Java SDK menggunakan kelas Point untuk merepresentasikan satu titik data. Untuk menulis data, buat satu atau beberapa objek Point, lalu kirimkan menggunakan mode asinkron atau sinkron.

Buat objek Point

Point memerlukan nama metrik, setidaknya satu pasangan kunci-nilai tag, sebuah nilai, dan stempel waktu. TSDB mendukung tiga format stempel waktu.

Skema data yang digunakan dalam contoh di bawah ini:

FieldTipeDeskripsi
metricstringNama pengukuran, misalnya test1
tagk1tagContoh kunci tag 1
tagk2tagContoh kunci tag 2
tagk3tagContoh kunci tag 3
valuedoubleNilai yang diukur
timestamplong atau DateTitik waktu pengukuran
Penting

Setiap Point harus menyertakan setidaknya satu pasangan kunci-nilai tag.

Stempel waktu dalam detik

// Konversi milidetik ke detik.
int timestamp = (int)(System.currentTimeMillis() / 1000);

Point point = Point.metric("test1")
                   .tag("tagk1", "tagv1")
                   .tag("tagk2", "tagv2")
                   .tag("tagk3", "tagv3")
                   .timestamp(timestamp).value(123.456)
                   .build();

Stempel waktu dalam milidetik dengan HashMap

Gunakan HashMap untuk mengirimkan beberapa tag ketika jumlah tag bersifat dinamis atau besar.

long timestamp = System.currentTimeMillis();

Map<String, String> tags = new HashMap<String, String>();
tags.put("tagk1", "tagv1");
tags.put("tagk2", "tagv2");

Point point = Point.metric("test1")
                   .tag(tags)
                   .value(timestamp, 123.456)
                   .build();

java.util.Date

Point point = Point.metric("test1")
                   .tag("tagk1", "tagv1")
                   .value(new Date(), 123.456)
                   .build();

Pilih mode penulisan

TSDB mendukung dua mode penulisan:

ModeMetodeBatchingPaling cocok untuk
Asinkron (direkomendasikan)tsdb.put(point)OtomatisSebagian besar kasus penggunaan
Sinkrontsdb.putSync(points)ManualKetika Anda perlu memeriksa hasil penulisan secara langsung

Gunakan mode asinkron kecuali Anda memiliki alasan spesifik untuk memeriksa hasil per batch secara sinkron.

Tulis data secara asinkron

Dalam mode asinkron, buat objek Point dan panggil tsdb.put(). Klien secara otomatis mengelompokkan titik data sebelum mengirimkannya.

Point point = Point.metric("test1")
                   .tag("tagk1", "tagv1")
                   .value(timestamp, Math.random())
                   .build();

tsdb.put(point);

Konfigurasikan antarmuka callback

Untuk memeriksa hasil penulisan dalam mode asinkron, konfigurasikan antarmuka callback sebelum melakukan koneksi. Callback tersebut melacak keberhasilan dan kegagalan per batch.

Semua contoh di bawah ini menggunakan model data nilai tunggal. Untuk titik data multi-nilai, ganti antarmuka callback dengan varian MultiField yang sesuai (lihat Antarmuka callback).

final AtomicLong processedCount = new AtomicLong();

BatchPutCallback cb = new BatchPutCallback() {

    @Override
    public void response(String address, List<Point> input, Result output) {
        long total = processedCount.addAndGet(input.size());
        System.out.println("Ditulis: " + input.size() + ", total diproses: " + total);
    }

    @Override
    public void failed(String address, List<Point> input, Exception ex) {
        ex.printStackTrace();
        long total = processedCount.addAndGet(input.size());
        System.out.println("Gagal: " + input.size() + ", total diproses: " + total);
    }
};

TSDBConfig config = TSDBConfig
                        .address("example.hitsdb.com", 8242)
                        .listenBatchPut(cb)    // Daftarkan callback.
                        .config();

tsdb = TSDBClientFactory.connect(config);

Kapan masing-masing metode callback dipicu:

MetodeDipicu saat
response()Server menerima dan memproses permintaan. Konten respons bervariasi tergantung jenis callback.
failed()Server menolak permintaan — data tidak valid, pembatasan kecepatan trafik, kegagalan otentikasi, atau error lainnya.
Penting

Selalu implementasikan metode failed(). Implementasi default-nya adalah metode void tanpa operasi, sehingga kegagalan akan diabaikan secara diam-diam jika Anda tidak mengimplementasikannya.

Penting

Jangan menjalankan operasi yang memakan waktu lama di dalam metode callback. Pindahkan pekerjaan berat ke thread pekerja terpisah.

Antarmuka callback

Pilih antarmuka callback yang sesuai dengan tingkat detail respons penulisan yang Anda butuhkan.

Model data nilai tunggal:

Antarmuka callbackMode penulisanAPI ekuivalen
BatchPutCallbackSederhanaPOST /api/put
BatchPutSummaryCallbackStatistikPOST /api/put?summary=true
BatchPutDetailsCallbackDetailPOST /api/put?details=true
BatchPutIgnoreErrorsCallbackToleransi kesalahanPOST /api/put?ignoreErrors=true

Model data multi-nilai:

Antarmuka callbackMode penulisanAPI ekuivalen
MultiFieldbatchPutCallbackSederhanaPOST /api/put
MultiFieldbatchPutSummaryCallbackStatistikPOST /api/put?summary=true
MultiFieldbatchPutDetailsCallbackRinciPOST /api/put?details=true
MultiFieldbatchPutIgnoreErrorsCallbackToleransi kesalahanPOST /api/put?ignoreErrors=true

Untuk detail konten respons tiap mode penulisan, lihat Mode dan respons penulisan.

Tulis data secara sinkron

Dalam mode sinkron, buat daftar titik data secara manual dan panggil tsdb.putSync().

List<Point> points = new ArrayList<Point>();

for (int i = 0; i < 500; i++) {
    long timestamp = System.currentTimeMillis();
    Point point = Point.metric("test1")
                       .tag("tagk1", "tagv1")
                       .value(timestamp, Math.random())
                       .build();
    points.add(point);
}

tsdb.putSync(points);

Praktik terbaik untuk penulisan sinkron

  • Tambahkan 500–1.000 titik data per batch. Jumlah titik yang lebih sedikit per pemanggilan mengurangi throughput; terlalu banyak meningkatkan tekanan memori.

  • Kirimkan batch dari beberapa thread secara konkuren untuk memaksimalkan throughput penulisan.

Tipe respons sinkron

Konfigurasikan tipe respons berdasarkan apa yang perlu diverifikasi aplikasi Anda setelah setiap penulisan.

Tipe responsKodeAPI ekuivalenKonten
Objek kosongResult result = tsdb.putSync(ps);POST /api/putTanpa muatan
RingkasanSummaryResult summaryResult = tsdb.putSync(ps, SummaryResult.class);POST /api/put?summary=trueJumlah ditulis, jumlah gagal
DetailDetailsResult detailsResult = tsdb.putSync(ps, DetailsResult.class);POST /api/put?details=trueJumlah ditulis, jumlah gagal, alasan kegagalan