文档简介:
数据插入
TSDB写数据有同步阻塞写数据和异步非阻塞写数据。
同步阻塞写数据
假设我们现在需要构建 500 个时间点提交给 TSDB。
示例代码
1. List<DataPoint> dataPoints= new ArrayList< DataPoint >(); 2. 构建 DataPoint 3. for(int i = 0; i<500; i++) { 4. long timestamp = System.currentTimeMillis(); 5. DataPoint dataPoint = DataPoint.metric("test1") 6. .tag("tagk1", "tagv1") 7. .value(timestamp, Math.random()) 8. .build(); 9. // 手动打包数据 10. dataPoints.add(dataPoint); 11. } 12. 13. // 手动打包后提交数据 14. tsdb.put(dataPoints) |
PutResult result = tsdb.put(ps); |
返回提交概述。包含成功数和返回数。本质是调用POST /api/put?summary=true
PutSummaryResult summaryResult = tsdb.put(ps, PutSummaryResult.class); |
返回提交概述。包含成功数、返回数和失败原因。本质是调用POST /api/put?details=true
PutDetailsResult detailsResult = tsdb.put(ps, PutDetailsResult.class); |
异步非阻塞写数据
异步写数据的方式比较简单,只要有 DataPoint 就可以提交数据。Client 会自动帮助您批量地提交数据,不需要您手动打包。如果没有特殊需求,推荐您使用异步非阻塞的写数据的方式。
示例代码
1. DataPoint dataPoint = DataPoint.metric("test1") 2. .tag("tagk1", "tagv1") 3. .value(timestamp, Math.random()) 4. .build(); 5. // 直接提交数据 6. tsdb. putAsynch (dataPoint); |
异步非阻塞写数据回调设置
当您使用异步写数据的方式时,若需要获取 Put 接口的响应结果,则需要设置回调接口。
示例代码
1. final AtomicLong num = new AtomicLong(); 2. // 回调对象 3. PostDataCallback cb = new PostDataCallback () { 4. @Override 5. public void response(String address, List< DataPoint> input, Result output) { 6. long afterNum = num.addAndGet(input.size()); 7. System.out.println("成功处理" + input.size() + ",已处理" + afterNum); 8. } 9. @Override 10. public void failed(String address, List< DataPoint> input, Exception ex) { 11. ex.printStackTrace(); 12. long afterNum = num.addAndGet(input.size()); 13. System.out.println("失败处理" + input.size() + ",已处理" + afterNum); 14. } 15. CtyunTsdbRequestConfig config = CtyunTsdbRequestConfig 16. .address("www.example.com ", 8585) 17. .listenBatchPut(cb) // 设置回调接口 18. .config(); 19. tsdb = CtyunTsdbRequestFactory.connect(config); |
TSDB Client 提供了以下三种类型的 PutCallback 接口:
•PostDataCallback,即调用POST /api/put
•PostDataSummaryCallback,即调用POST /api/put?summary=true
•PostDataDetailsCallback,即调用POST /api/put?details=true
您可以通过设置不同类型的 Callback 来根据需要选择返回的数据内容。不要在回调方法中做耗时操作。若有此需要,可以在把操作交给其他工作线程执。