このトピックでは、複数値モデルを使用してデータを書き込む方法について説明します。詳細については、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();
}