LindormTSDB では、次の 6 つの方法を使用して LindormTSDB にデータを書き込むことができます。LindormTSDB SDK for Java、InfluxDB® ラインプロトコル、標準 SQL ステートメント、Time Series Database(TSDB)が提供する API オペレーション、Prometheus のリモート書き込みインターフェース、および Apache Flink です。このトピックでは、これらの方法を使用して LindormTSDB にデータを書き込む方法について説明します。
LindormTSDB SDK for Java を使用してデータを書き込む
LindormTSDB SDK for Java は、Java を使用してアプリケーションを開発する開発者向けです。 LindormTSDB SDK for Java を使用して LindormTSDB にデータを書き込む方法の詳細については、「チュートリアル: LindormTSDB SDK for Java を使用して LindormTSDB に接続して使用する」をご参照ください。
LindormTSDB SDK for Java には、次の利点があります。
データの同期を待つことなく、LindormTSDB にデータを非同期で書き込むことができます。
データは自動的にバッチで書き込まれるため、開発プロセスが簡素化され、データ書き込み効率が向上します。
プール内の接続は再利用できます。 これにより、多数の接続を作成する必要があるリスクを防ぎます。
失敗したリクエストは自動的に再試行されます。 アプリケーションで再試行ロジックを開発する必要はありません。
LindormTSDB SDK for Java は、データ送信にカスタムエンコーディングプロトコルを使用して、データを効率的にエンコードおよびデコードします。
LindormTSDB SDK for Java は、スレッドのセキュリティを確保するためのメソッドを提供します。 アプリケーションを開発する際に、スレッドのセキュリティについて心配する必要はありません。
Java Native SDK は、3 つのスキーマ制約ポリシー(強制約、弱制約、制約なし)をサポートしています。
例
// LindormTSDB のエンドポイントを指定します。
String url = "http://ld-bp17j28j2y7pm****-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242";
// LindormTSDB クライアントを作成します。 LindormTSDB クライアントはスレッドセーフであり、再利用できます。 スレッドごとにクライアントを作成し、操作が完了した後にクライアントをシャットダウンする必要はありません。
ClientOptions options = ClientOptions.newBuilder(url).build();
LindormTSDBClient lindormTSDBClient = LindormTSDBFactory.connect(options);
// データベースとテーブルを作成します。
lindormTSDBClient.execute("CREATE DATABASE demo");
lindormTSDBClient.execute("demo","CREATE TABLE sensor (device_id VARCHAR TAG,region VARCHAR TAG,time BIGINT,temperature DOUBLE,humidity DOUBLE,PRIMARY KEY(device_id))");
// LindormTSDB にデータを書き込みます。
int numRecords = 10;
List<Record> records = new ArrayList<>(numRecords);
long currentTime = System.currentTimeMillis();
for (int i = 0; i < numRecords; i++) {
Record record = Record
.table("sensor")
.time(currentTime + i * 1000)
.tag("device_id", "F07A1260")
.tag("region", "north-cn")
.addField("temperature", 12.1 + i)
.addField("humidity", 45.0 + i)
.build();
records.add(record);
}
CompletableFuture<WriteResult> future = lindormTSDBClient.write("demo", records);
// 非同期で書き込まれたデータを処理します。
future.whenComplete((r, ex) -> {
// 書き込みエラーを処理します。
if (ex != null) {
System.out.println("書き込みに失敗しました。");
if (ex instanceof LindormTSDBException) {
LindormTSDBException e = (LindormTSDBException) ex;
System.out.println("LindormTSDBException が発生しました。これは、リクエストが Lindorm TSDB に到達しましたが、"
+ "何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーコード: " + e.getCode());
System.out.println("SQL 状態: " + e.getSqlstate());
System.out.println("エラーメッセージ: " + e.getMessage());
} else {
ex.printStackTrace();
}
} else {
System.out.println("書き込みに成功しました。");
}
});
// この例では、テーブルに書き込まれたデータを処理するために、単純な同期操作が実行されます。
System.out.println(future.join());LindormTSDB のエンドポイントを取得する方法の詳細については、「エンドポイントの表示」をご参照ください。
InfluxDB® ラインプロトコルを使用してデータを書き込む
LindormTSDB では、InfluxDB® ラインプロトコルを使用してデータを書き込むことができます。 アプリケーションが Java を使用して開発されていない場合は、ラインプロトコルを使用して LindormTSDB にデータを書き込むことをお勧めします。 ラインプロトコルを使用してデータを書き込むときに、スキーマ制約ポリシーを設定できます。 デフォルトでは、スキーマ制約ポリシーは弱制約です。 詳細については、「InfluxDB ラインプロトコルを使用したデータの書き込み」をご参照ください。
ラインプロトコルを使用して LindormTSDB にデータを書き込む場合、書き込まれたデータの時間精度はミリ秒に変換されます。 そのため、ミリ秒よりも高い時間精度のデータがラインプロトコルを使用して LindormTSDB に書き込まれると、精度の低下が発生します。
例
curl -X POST \
'http://ld-bp1489gr5t*****-proxy-tsdb.lindorm.rds.aliyuncs.com:8242/api/v2/write?precision=ms&db=default' \
-d '
sensor7,device_id=F07A1260,region=north-cn temperature=12.1,humidity=45 1619076780000
sensor7,device_id=F07A1260,region=north-cn temperature=13.2,humidity=47 1619076790000
sensor7,device_id=F07A1260,region=north-cn temperature=10.6,humidity=46 1619076800000
sensor7,device_id=F07A1260,region=north-cn temperature=18.1,humidity=44 1619076780000
sensor7,device_id=F07A1260,region=north-cn temperature=19.7,humidity=44 1619076790000
'標準 SQL ステートメントを使用してデータを書き込む
次の表に、SQL ステートメントを使用して LindormTSDB にデータを書き込むときに使用できる 2 つの方法を示します。
方法 | シナリオ | 説明 | 参照 |
JDBC ドライバー | Java を使用して開発されたアプリケーション | JDBC を使用して LindormTSDB にデータを書き込む場合は、アプリケーションでコードを開発するか、Druid を使用して接続プールを管理する必要があります。 | |
HTTP SQL API | Java 以外のプログラミング言語を使用して開発されたアプリケーション | LindormTSDB では、HTTP ベースの API オペレーションを呼び出すことによって、SQL ステートメントを使用してデータを書き込むことができます。 |
TSDB が提供する API オペレーションを使用してデータを書き込む
LindormTSDB は、TSDB の API オペレーションと互換性があります。 アプリケーションで TSDB を使用してデータを保存する場合は、TSDB が提供する API オペレーションを使用して LindormTSDB にデータを書き込むことができます。 次の表に、TSDB が提供する API オペレーションを使用してデータを書き込むときに使用できる 2 つの方法を示します。
方法 | 説明 | 参照 |
複数値データを書き込む。 | /api/mput オペレーションは、複数値データを書き込むために使用されます。 この場合、デフォルトのスキーマ制約ポリシーは制約なしです。これは、時系列テーブルが作成されず、SQL ステートメントを使用してデータをクエリできないことを示します。 SQL ステートメントを使用してデータをクエリする場合は、データの書き込み前または後に時系列テーブルを手動で作成できます。 また、スキーマ制約ポリシーを弱制約に設定して、時系列テーブルの自動作成を許可することもできます。 説明 スキーマ制約ポリシーを変更する方法の詳細については、「データ書き込み方法に基づいてスキーマ制約ポリシーを選択する」をご参照ください。 |
|
単一値データを書き込む。 | /api/put オペレーションは、単一値データを書き込むために使用されます。 このメソッドは、OpenTSDB にデータを書き込むために使用できます。 この場合、デフォルトのスキーマ制約ポリシーは制約なしである必要があります。これは、時系列テーブルが作成されず、SQL ステートメントを使用してデータを直接クエリできないことを示します。 このメソッドを使用して LindormTSDB にデータを書き込むことはお勧めしません。 |
Prometheus のリモート書き込みインターフェースを使用してデータを書き込む
LindormTSDB は、Prometheus のリモートストレージとして使用できます。 リモート書き込みインターフェースを使用して LindormTSDB にデータを書き込んだ後、PromQL ステートメントを使用してデータをクエリできます。 詳細については、「Prometheus を使用して LindormTSDB に接続して使用する」をご参照ください。
Apache Flink を使用してデータを書き込む
LindormTSDB SDK for Java を統合する Sink コネクタを使用して、LindormTSDB にデータを書き込むことができます。 詳細については、「Flink を使用して LindormTSDB にデータを書き込む」をご参照ください。