其他分享
首页 > 其他分享> > 【TcaplusDB知识库】数据分批返回示例代码

【TcaplusDB知识库】数据分批返回示例代码

作者:互联网

【TcaplusDB知识库】数据分批返回示例代码

说明

当前有三个接口,涉及数据分批返回的场景,分别是:

这三个接口的特点是一次请求可能返回大量数据,而往往我们是希望数据是分批返回,分批处理,而不是等到所有数据返回以后,再进行后续处理。

由于数据是通过多个Response返回的,所以这场景通常也是配合异步调用完成的。

准备工作

参见章节: 准备工作

示例代码

本文以批量读取数据为例,介绍数据分批返回的过程。

示例代码

import com.tencent.tcaplus.client.Client;
import com.tencent.tcaplus.client.ClientFactory;
import com.tencent.tcaplus.client.Record;
import com.tencent.tcaplus.client.Request;
import com.tencent.tcaplus.client.Response;
import com.tencent.tdr.tcaplus_protocol_cs.TcaplusProtocolCsConstants;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;

public class Example {

   public static void main(String[] arguments) throws InterruptedException {
       // 1. 准备环境信息
       // 1.1. 目录服务地址列表
       List<String> dirList = new ArrayList<String>();
       dirList.add("tcp://x.x.x.x:9999");
       dirList.add("tcp://y.y.y.y:9999");
       // 1.2. 业务ID
       int appId = 1;
       // 1.3. 业务密码
       String appPassword = "****************";
       // 1.4. 表格组ID
       int tableGroupId = 1;
       // 1.5. 表格名称
       String tableName = "test";

       // 2. 创建客户端
       Client client = ClientFactory.createClient(appId, tableGroupId, appPassword, dirList);
       try {
           // 3. 构造批量读取数据的请求
           // 3.1. 获取请求对象。为了提升SDK性能,Request对象是复用的
           Request request = client.acquireRequest();
           // 3.2. 设置请求类型和目标表名
           request.setCmd(TcaplusProtocolCsConstants.TCAPLUS_CMD_BATCH_GET_REQ);
           request.setTableName(tableName);
           // 3.3. 批量读取100条数据,设置各Key字段的值
           for (int index = 0; index < 100; index++) {
               Record record = request.addRecord();
               record.setKeyInt("gameid", 1);
               record.setKeyInt("itemid", index);
               record.setKeyString("name", "test");
          }
           // 3.4. 添加需要读取的Value字段
           request.addFieldName("typeid");
           request.addFieldName("Data");
           request.addFieldName("uname");
           // 3.5. 设置是否允许分多个Response返回数据,即是否允许分批返回数据
           //     1表示允许,0表示不允许
           request.setMultiResponseFlag(1);

           CountDownLatch latch = new CountDownLatch(1);

           // 4. 异步发送请求
           client.post(request, new Future() {

               @Override
               public void onResponse(Response response) {
                   // 5. 处理结果
                   if (response.getResult() == 0) {
                       // 批量读取数据成功
                       Record result;
                       while ((result = response.fetchRecord()) != null) {
                           // TODO 可在此处添加处理批量数据读取成功的后续处理代码
                      }
                  } else {
                       // 批量读取数据失败
                       // TODO 可在此处添加处理批量数据读取失败的后续处理代码
                  }
              }

          });

           latch.await();
      } finally {
           // 6. 销毁客户端对象
           ClientFactory.destroyClient(client);
      }
  }

}

 


 

img

TcaplusDB是腾讯出品的分布式NoSQL数据库,存储和调度的代码完全自研。具备缓存+落地融合架构、PB级存储、毫秒级时延、无损水平扩展和复杂数据结构等特性。同时具备丰富的生态、便捷的迁移、极低的运维成本和五个九高可用等特点。客户覆盖游戏、互联网、政务、金融、制造和物联网等领域。

标签:知识库,读取数据,示例,TcaplusDB,request,client,tcaplus,import,com
来源: https://www.cnblogs.com/tcaplusdb/p/15817998.html