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

:データの書き込み

最終更新日:Jan 14, 2025

Time Series Database (TSDB) SDK では、Point クラスは時点を指定します。Point オブジェクトは、時系列 (タイムラインとも呼ばれます) の時点におけるデータポイントです。

Point オブジェクトの構築

さまざまなメソッドを使用して、さまざまな形式で Point オブジェクトを構築できます。このトピックでは、Point オブジェクトを構築する 3 つの方法について説明し、各方法の例を示します。

重要

Point オブジェクトを構築するには、少なくとも 1 つのタグのキーと値のペアを指定する必要があります。

例 1

Point オブジェクトを構築するときは、秒単位で測定されたタイムスタンプを使用してデータポイントの時刻を指定し、データポイントのメトリックとタグを指定します。

// 秒単位のタイムスタンプを使用します。
int timestamp = (int)(System.currentTimeMillis()/1000);

// Point オブジェクトを構築します。
Point point = Point.metric("test1")
                    .tag("tagk1", "tagv1")
                    .tag("tagk2", "tagv2")
                    .tag("tagk3", "tagv3")
                   .timestamp(timestamp).value(123.456)
                   .build();

例 2

Point オブジェクトを構築するときは、ミリ秒単位で測定されたタイムスタンプを使用してデータポイントの時刻を指定し、メトリックを指定してから、HashMap を使用してデータポイントのタグを指定します。

// ミリ秒単位のタイムスタンプを使用します。
long timestamp = System.currentTimeMillis();

// HashMap を使用してタグを指定します。
Map<String,String> tagsMap = new HashMap<String,String>();
tagsMap.put("tagk1", "tagv1");
tagsMap.put("tagk2", "tagv2");

// Point オブジェクトを構築します。
Point point = Point.metric("test1")
                    .tag(tagsMap)
                   .value(timestamp,123.456)
                   .build();

例 3

Point オブジェクトを構築するときは、java.util.Date を使用してデータポイントの時刻を指定します。

// java.util.Date を使用して、構築するデータポイントの時刻を指定します。
Point point = Point.metric("test1")
                    .tag("tagk1", "tagv1")
                   .value(new Date,123.456)
                   .build();

データの書き込み

TSDB クライアントは、同期モードと非同期モードの 2 つのデータ書き込みモードを提供します。

同期モード

たとえば、500 個のデータポイントを構築し、これらのデータポイントを TSDB に送信する必要があります。

サンプルコード

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)
重要

ほとんどの場合、同期書き込みの高パフォーマンスを確保するために、構築されたデータポイントをリストに手動で追加する必要があります。各リストには 500 ~ 1,000 個のデータポイントを追加することをお勧めします。複数のスレッドを使用してデータポイントを同時に送信することをお勧めします。

同期書き込みの応答

ビジネス要件に基づいて、応答に含める情報を指定できます。

  • システムがリクエストに対して空のオブジェクトを返すようにするには、次の構成を使用します。このようにすると、返される結果は POST /api/put を呼び出した結果と同じになります。

    Result result = tsdb.putSync(ps);
  • システムがリクエストのサマリーを返すようにするには、次の構成を使用します。このようにすると、返される結果は POST/api/put?summary=true を呼び出した結果と同じになります。サマリーには、書き込まれたデータポイントの数と書き込みに失敗したデータポイントの数のみが含まれます。

    SummaryResult summaryResult = tsdb.putSync(ps,SummaryResult.class);
  • システムがリクエストのサマリーを返すようにするには、次の構成を使用します。このようにすると、返される結果は POST/api/put?details=true を呼び出した結果と同じになります。サマリーには、書き込まれたデータポイントの数、書き込みに失敗したデータポイントの数、および書き込み失敗の原因のみが含まれます。

    DetailsResult detailsResult = tsdb.putSync(ps,DetailsResult.class);

非同期モード

非同期書き込みは同期書き込みよりも簡単です。データポイントを構築してから送信するだけで済みます。TSDB クライアントは、データポイントが送信される前に、データポイントをリストに自動的に追加します。

特別な要件がない場合は、非同期モードでデータを書き込むことをお勧めします。

サンプルコード

// データポイントを構築します。
Point point = Point.metric("test1")
                   .tag("tagk1", "tagv1")
                   .value(timestamp, Math.random())
                   .build();
// データポイントを送信します。
tsdb.put(point);

非同期モードのコールバック設定

非同期モードでデータを書き込み、PUT 操作の呼び出しの応答を取得する場合は、コールバックインターフェースを構成します。

サンプルコード

final AtomicLong num = new AtomicLong();

// コールバックオブジェクトを構築します。
BatchPutCallback cb = new BatchPutCallback() {

    @Override
    public void response(String address, List<Point> input, Result output) {
        long afterNum = num.addAndGet(input.size());
        System.out.println("Successful" + input.size() + ", Processed" + afterNum);
    }

    @Override
    public void failed(String address, List<Point> input, Exception ex) {
        ex.printStackTrace();
        long afterNum = num.addAndGet(input.size());
        System.out.println("Failed" + input.size() + ", Processed" + afterNum);
    }

};

TSDBConfig config = TSDBConfig
                        .address("example.hitsdb.com", 8242)
                        .listenBatchPut(cb)    // コールバックインターフェースを構成します。
                        .config();

tsdb = TSDBClientFactory.connect(config);

TSDB クライアントは、次の 4 つのコールバックインターフェースを提供します。

  • BatchPutCallback: シンプルモードでデータを書き込む場合は、このインターフェースを使用します。API 操作は POST /api/put です。

  • BatchPutSummaryCallback: 統計モードでデータを書き込む場合は、このインターフェースを使用します。API 操作は POST /api/put?summary=true です。

  • BatchPutDetailsCallback: 詳細モードでデータを書き込む場合は、このインターフェースを使用します。API 操作は POST /api/put?details=true です。

  • BatchPutIgnoreErrorsCallback: フォールトトレラントモードでデータを書き込む場合は、このインターフェースを使用します。API 操作は POST /api/put?ignoreErrors=true です。

ビジネス要件に基づいてコールバックインターフェースを構成します。書き込みモードとアプリケーションシナリオの詳細については、書き込みモードと応答をご参照ください。

重要

  1. コールバックメソッドを構成する場合は、コールバックメソッドで時間のかかる操作を指定しないでください。時間のかかる操作を実行する必要がある場合は、他のワーカースレッドで操作を実行してください。

  2. response() メソッドと failed() メソッドは、さまざまな状況で呼び出されます。

    • リクエストが有効で、サーバーによって処理される場合、response() メソッドが呼び出されます。応答は、コールバックオブジェクトのタイプによって異なります。

    • リクエストに無効なメッセージが含まれている、トラフィック調整がトリガーされた、認証に失敗した、またはその他の理由で無効として識別されたために、リクエストがサーバーによって拒否された場合、failed() メソッドが呼び出されます。

    コールバックインターフェースを実装する場合は、failed() メソッドを実装することをお勧めします。failed() メソッドが実装されていない場合は、デフォルトの failed() メソッドが呼び出されます。デフォルトの failed() メソッドは void メソッドです。

  3. このトピックで提供されているコールバックインターフェースのサンプルコードでは、単一値データモデルを使用してデータが書き込まれます。複数値データポイントの書き込み方法は、単一値データポイントの書き込み方法と似ています。違いは、コールバックインターフェースを次のリストで提供されている対応するコールバックインターフェースに置き換える必要があることです。

    • MultiFieldbatchPutCallback

    • MultiFieldbatchPutSummaryCallback

    • MultiFieldbatchPutDetailsCallback

    • MultiFieldbatchPutIgnoreErrorsCallback