全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
高性能时间序列数据库 HiTSDB

向HiTSDB中写数据

更新时间:2017-12-11 15:15:56

Put 数据

1. 构造点

// 以'秒'为时间戳
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();
// 也可以'毫秒'为时间戳
long timestamp = System.currentTimeMillis();

// 使用 HashMap 表示 Tags
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();
// 使用 java.util.Date 表示时间。
Point point = Point.metric("test1")
                    .tag("tagk1", "tagv1")
                   .value(new Date,123.456)
                   .build();

创建 Point 形式比较多样化。

注意:Point 的构建至少需要一个 tag 键值对。

2.发送数据

HiTSDB-Client 有两种方式写数据的方式。

2.1 同步阻塞的写数据

假设我们现在需要构建500个 Point 需要提交给 HiTSDB。

// 同步阻塞的发送数据
List<Point> points = new ArrayList<Point>();
构建 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)

同步写收的方式一般需要用户手动将数据点打包成一批数据。

2.2 同步写的响应对象

用户可以根据需要选择需要返回的数据内容。

  1. 返回空对象,无内容。本质是调用 POST /api/put

    Result result = tsdb.putSync(ps);
    
  2. 返回提交概述。包含成功数,返回数。本质是调用 POST /api/put?summary=true

    SummaryResult summaryResult = tsdb.putSync(ps,SummaryResult.class);
    
  3. 返回提交概述。包含成功数,返回数,失败原因。本质是调用 POST /api/put?details=true

    DetailsResult detailsResult = tsdb.putSync(ps,DetailsResult.class);
    
2.3 异步非阻塞的写数据
// 构建 Point
Point point = Point.metric("test1")
                   .tag("tagk1", "tagv1")
                   .value(timestamp, Math.random())
                   .build();
// 直接提交数据
tsdb.put(point);

异步写写数据的方式比较简单,只要有 point 就可以提交数据。Client 会自动帮助用户批量的提交数据。用户不需要手动打包。

如果用户没有特殊需求,推荐使用异步非阻塞的写数据方式。

2.4 异步非阻塞写数据的回调设置

当用户使用异步写数据的方式时,若用户需要获取 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("成功处理" + input.size() + ",已处理" + afterNum);
    }

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

};

HiTSDBConfig config = HiTSDBConfig
                        .address("example.hitsdb.com", 8242)
                        .listenBatchPut(cb)    // 设置回调接口
                        .config();

tsdb = HiTSDBClientFactory.connect(config);

HiTSDB Client 提供了三种类型的 PutCallback 接口:

  • BatchPutCallback,即调用POST /api/put
  • BatchPutSummaryCallback,即调用POST /api/put?summary=true
  • BatchPutDetailsCallback,即调用POST /api/put?details=true

用户可以通过设置不同类型的 BatchPutCallback 根据需要选择需要返回的数据内容。

注意!!!不要在回调方法中做耗时操作。若需要,可以在把操作交给其他工作线程执行。

本文导读目录