すべてのプロダクト
Search
ドキュメントセンター

:ApsaraDB for Lindorm SDK を使用して複数の値を書き込む

最終更新日:Jan 14, 2025

このトピックでは、複数値モデルを使用してデータを書き込む方法について説明します。詳細については、Aliyun TSDB SDK for Java をご参照ください。test/example/ExampleOfMultiField および test/com.aliyun.hitsdb.client/TestHiTSDBClientMultiFieldFeatures ディレクトリにある Web サイトから必要なコードをダウンロードし、提供されている例を確認できます。

注記: Lindorm SDK V0.2.0 以降でのみ、複数値モデルがサポートされています。最新の SDK バージョンとダウンロードリンクについては、SDK ドキュメントの「バージョン」セクションをご参照ください。 V0.2.0 より前の SDK は、シミュレートされた複数値モデルを使用します。シミュレートされた複数値モデルは使用しないことをお勧めします。以前の SDK バージョンの MultiValue クラスを使用して書き込まれたデータをクエリするために、最新の SDK の複数値モデル関連の MultiField クラスを使用することはできません。

複数値モデルを使用してデータを書き込む

サンプルコード:

        /*
         * multiFieldPutSync() 関数を使用します。
         * この関数は、単一点または複数点の書き込みをサポートしています。
         *
         * データを書き込む際には、以下の情報が必要です。
         * Metric: メトリックのカテゴリ。メトリックは、InfluxDB の測定値に似ています。
         * Fields: メトリックの測定情報。各フィールドは、メトリックのサブカテゴリを指定します。メトリックには複数のフィールドを含めることができます。たとえば、メトリックに wind という名前が付けられています。このメトリックには、方向、速度、説明、温度などのフィールドが含まれています。
         * Timestamp: ポイントのタイムスタンプ。
         * Tags: タイムラインの追加情報。たとえば、ABC123 のモデルや 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();

        // 同期書き込み。
        tsdb.multiFieldPutSync(multiFieldPoint);

複数値モデルを使用して非同期書き込みを実行する

注記: この機能は、Lindorm SDK V0.2.1 以降でのみサポートされています。最新の SDK バージョンとダウンロードリンクについては、SDK ドキュメントの「バージョン」セクションをご参照ください。

コールバック関数を使用しない

デフォルトでは、非同期複数値書き込みを実行するために TSDBConfig クラスでコールバック関数は指定されていません。サンプルコード:
TSDBConfig config = TSDBConfig.address("127.0.0.1", 8242)
                // バッチ書き込み操作が実行されるたびに送信されるデータの量。
                .batchPutSize(500)
                // 非同期単一値書き込みの処理に使用されるスレッドの数。
                .batchPutConsumerThreadCount(1)
                // 非同期複数値書き込みが順序付けられるキャッシュキューの長さ。
                .multiFieldBatchPutBufferSize(10000)
                // 非同期複数値書き込みの処理に使用されるスレッドの数。
                .multiFieldBatchPutConsumerThreadCount(1)
                .config();

        // 注記: TSDB インスタンスは 1 回だけ初期化する必要があります。
        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);

        // 注記: アプリケーションのライフサイクル中は、アプリケーションが終了するまで指定された TSDB インスタンスを閉じる必要はありません。
        tsdb.close();
    }

共通コールバック関数を使用する

共通コールバック関数は、書き込み操作が成功したデータポイント、または書き込み操作が失敗したデータポイントと関連する書き込み例外のみを返します。サンプルコード:
      // 書き込みの成功または失敗を処理するための共通コールバック関数を作成します。
      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("システムは" + count + "ポイントを処理しました。");
            }
            final AtomicInteger num = new AtomicInteger();
            @Override
            public void failed(String address, List<MultiFieldPoint> points, Exception ex) {
                System.err.println("コールバック関数が失敗しました。" + points.size() + " エラー!");
                ex.printStackTrace();
            }
        };

       TSDBConfig config = TSDBConfig.address("127.0.0.1", 8242)
                .httpConnectTimeout(90)
                // バッチ書き込み操作が実行されるたびに送信されるデータの量。
                .batchPutSize(500)
                // 非同期単一値書き込みの処理に使用されるスレッドの数。
                .batchPutConsumerThreadCount(1)
                // 非同期複数値書き込みがキューイングされるキャッシュキューの長さ。
                .multiFieldBatchPutBufferSize(10000)
                // 非同期複数値書き込みの処理に使用されるスレッドの数。
                .multiFieldBatchPutConsumerThreadCount(1)
                // 非同期複数値書き込みの結果を取得するために使用されるコールバック関数。
                .listenMultiFieldBatchPut(callback)
                .config();

        // 注記: TSDB インスタンスは 1 回だけ初期化する必要があります。
        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);

        // 注記: アプリケーションのライフサイクル中は、アプリケーションが終了するまで指定された TSDB インスタンスを閉じる必要はありません。
        tsdb.close();
    }

サマリコールバック関数を使用する

書き込み操作が成功した場合、サマリコールバック関数は、書き込み操作のデータポイントと関連するサマリ情報を返します。情報には、成功したポイントの数と失敗したポイントの数が含まれます。書き込み操作が失敗した場合、サマリコールバック関数は、書き込み操作のデータポイントと関連する書き込み例外を返します。サンプルコード:
      // 書き込みの成功または失敗を処理するためのサマリコールバック関数を作成します。
      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("システムは" + count + "ポイントを処理しました。");
            }



            @Override
            public void failed(String address, List<MultiFieldPoint> points, Exception ex) {
                System.err.println("コールバック関数が失敗しました。" + points.size() + " エラー!");
                ex.printStackTrace();
            }
        };

       TSDBConfig config = TSDBConfig.address("127.0.0.1", 8242)
                .httpConnectTimeout(90)
                // バッチ書き込み操作が実行されるたびに送信されるデータの量。
                .batchPutSize(500)
                // 非同期単一値書き込みの処理に使用されるスレッドの数。
                .batchPutConsumerThreadCount(1)
                // 非同期複数値書き込みが順序付けられるキャッシュキューの長さ。
                .multiFieldBatchPutBufferSize(10000)
                // 非同期複数値書き込みの処理に使用されるスレッドの数。
                .multiFieldBatchPutConsumerThreadCount(1)
                // 非同期複数値書き込みの結果を取得するために使用されるコールバック関数。
                .listenMultiFieldBatchPut(callback)
                .config();

        // 注記: TSDB インスタンスは 1 回だけ初期化する必要があります。
        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);

        // 注記: アプリケーションのライフサイクル中は、アプリケーションが終了するまで指定された TSDB インスタンスを閉じる必要はありません。
        tsdb.close();
    }

詳細コールバック関数を使用する

書き込み操作が成功した場合、詳細コールバック関数は、書き込み操作のデータポイントと詳細を返します。詳細には、失敗したポイントと関連エラーが含まれます。書き込み操作が失敗した場合、詳細コールバック関数は、書き込み操作のデータポイントと関連する書き込み例外を返します。サンプルコード:
      // 書き込みの成功または失敗を処理するための詳細コールバック関数を作成します。
      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("システムは" + count + "ポイントを処理しました。");
            }

            @Override
            public void failed(String address, List<MultiFieldPoint> points, Exception ex) {
                System.err.println("コールバック関数が失敗しました。" + points.size() + " エラー!");
                ex.printStackTrace();
            }
        };

       TSDBConfig config = TSDBConfig.address("127.0.0.1", 8242)
                .httpConnectTimeout(90)
                // バッチ書き込み操作が実行されるたびに送信されるデータの量。
                .batchPutSize(500)
                // 非同期単一値書き込みの処理に使用されるスレッドの数。
                .batchPutConsumerThreadCount(1)
                // 非同期複数値書き込みが順序付けられるキャッシュキューの長さ。
                .multiFieldBatchPutBufferSize(10000)
                // 非同期複数値書き込みの処理に使用されるスレッドの数。
                .multiFieldBatchPutConsumerThreadCount(1)
                // 非同期複数値書き込みの結果を取得するために使用されるコールバック関数。
                .listenMultiFieldBatchPut(callback)
                .config();

        // 注記: TSDB インスタンスは 1 回だけ初期化する必要があります。
        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);

        // 注記: アプリケーションのライフサイクル中は、アプリケーションが終了するまで指定された TSDB インスタンスを閉じる必要はありません。
        tsdb.close();
    }