全部产品
Search
文档中心

:Gunakan ApsaraDB untuk SDK Lindorm untuk menulis beberapa nilai

更新时间:Jun 28, 2025

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

Secara default, tidak ada fungsi callback yang ditentukan dalam kelas TSDBConfig untuk melakukan penulisan multi-nilai asinkron. Sample code:
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

Fungsi callback umum hanya mengembalikan titik data dari operasi penulisan yang berhasil, atau titik data dari operasi penulisan yang gagal dan pengecualian penulisan terkait. Sample code:
      // 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

Jika operasi penulisan berhasil, fungsi callback ringkasan mengembalikan titik data dari operasi penulisan dan informasi ringkasan terkait. Informasi tersebut mencakup jumlah titik yang berhasil dan jumlah titik yang gagal. Jika operasi penulisan gagal, fungsi callback ringkasan mengembalikan titik data dari operasi penulisan dan pengecualian penulisan terkait. Sample code:
      // 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

Jika operasi penulisan berhasil, fungsi callback detail mengembalikan titik data dan detail dari operasi penulisan. Detail tersebut mencakup titik yang gagal dan kesalahan terkait. Jika operasi penulisan gagal, fungsi callback detail mengembalikan titik data dari operasi penulisan dan pengecualian penulisan terkait. Sample code:
      // 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();
    }