Tera SDK 主要api使用方法

目录

  1. 主要数据结构
    • tera::Client、tera::Table
    • RowMutation、RowReader、ScanDescriptor/ResultStream
    • TableDescriptor、LocalityGroupDescriptor、ColumnFamilyDescriptor
  2. 主要功能及代码示例
  3. Java SDK
  4. Python SDK
  5. Http SDK

1. 主要数据结构

(1) tera::Client 访问tera服务主结构

所有对tera的访问或操作全部由此发起。

功能包括:

  1. 表格操作:建、删、加载、卸载、打开、关闭、更新表结构、获取表格信息、快照等
  2. 用户管理:建、删、修改密码、组管理等
  3. 集群信息获取:获取全部表格列表、状态等

使用建议:

  • 一个集群对应一个Client即可,如需访问多个Client,需要创建多个

(2) tera::Table 表格主结构

对表格的所有增删查改操作由此发起。

tera::Client::OpenTable产生,tera::Client::CloseTable关闭,不可析构。

(3) tera::RowReader 随机行读取

tera::Table NewRowReader()产生,通过tera::Table Get()生效。

支持同步、异步、批量读取,需要用户析构。

可同时读多列,支持按时间戳、版本等过滤。

迭代器方式使用,或返回一个columnfamily/qualifier索引的多级Map。

(4) tera::RowMutation 行插入/更新/删除

tera::Table NewRowMutation()产生,通过tera::Table ApplyMutation()生效。

支持同步、异步、批量操作,需要用户析构。

可同时插入/更新/删除多列,原子操作,操作服务端生效时序与客户端相同。

支持Counter、Append、PutIfAbsent等特殊操作。

(5) tera::ScanDescriptor / tera::ResultStream 遍历

tera::ScanDescriptor描述遍历需求,包括行区间、列集合、时间区间、版本、特殊过滤器等。

tera::Table Scan()生效,返回迭代器tera::ResultStream

(6) 表格描述

包含tera::TableDescriptor / tera::LocalityGroupDescriptor / tera::ColumnFamilyDescriptor

建表及更新表格结构时使用,通过这些描述符定义表格的各种结构及其属性。

(7) tera::ErrorCode

很多操作会返回,注意检查。

2. 主要功能及代码示例

  1. // tera的统一操作,可以传入指定配置,默认会依次从./tera.flag、../conf/tera.flag、TERA_CONF环境变量查找
  2. tera::ErrorCode error_code;
  3. tera::Client* client = tera::Client::NewClient("./tera.flag", &error_code);
  4. if (client == NULL) {
  5. }
  6. ...
  7. delete client; // 注意回收内存

表格管理

表格描述符

  1. // create 名为 hello 的表格,包含一个LocalityGroup:lg_1,lg_1 中有一个ColumnFamily:cf_11
  2. tera::TableDescriptor table_desc("hello");
  3. // lg_1 设置为flash存储、block大小为 8K
  4. tera::LocalityGroupDescriptor* lg_desc = table_desc.AddLocalityGroup(“lg_1”);
  5. lg_desc->SetStore(tera::kInFlash);
  6. lg_desc->SetBlockSize(8);
  7. // cf_11 设置为最大版本数5,ttl为10000s
  8. tera::ColumnFamilyDescriptor* cf_t = table_desc.AddColumnFamily("cf_11", "lg_1");
  9. cf_t->SetMaxVersions(5);
  10. cf_t->SetTimeToLive(10000);

表格操作

  1. // 建、删、加载、卸载
  2. client->CreateTable(table_desc, &error_code)
  3. client->DisableTable("hello", &error_code);
  4. client->EnableTable("hello", &error_code);
  5. client->DeleteTable("hello", &error_code);
  6. // 获取表格描述符
  7. tera::TableDescriptor* hello_desc = client->GetTableDescriptor("hello", &error_code);
  8. ...
  9. delete hello_desc; // 注意清理内存
  10. // 获取表格状态
  11. if (client->IsTableExist("hello", &error_code)) {
  12. ...
  13. }
  14. if (client->IsTableEnable("hello", &error_code)) {
  15. ...
  16. }
  17. if (client->IsTableEmpty("hello", &error_code)) {
  18. ...
  19. }
  20. // 获取表格 schema、tablet 信息
  21. tera::TableInfo table_info = {NULL, ""};
  22. std::vector<tera::TabletInfo> tablet_list;
  23. client->List("hello", &table_info, &tablet_list, &error_code);
  24. // 只获取表格tablet信息
  25. client->GetTabletLocation("hello", &tablet_list, &error_code);

数据操作

  1. // 打开表格,不需析构
  2. tera::Table* table = client->OpenTable("hello", &error_code);

  1. // 同步单条读出数据(简单,性能较低)
  2. std::string value;
  3. table->Get(“rowkey1”, columnfamily1”, qualifier1”, &value, &error_code);
  4. // RowReader(多列读取,支持同步、异步、批量)
  5. tera::RowReader* reader = table->NewRowReader(“rowkey2”);
  6. reader->AddColumn("family21", "qualifier21");
  7. reader->AddColumnFamily("family22");
  8. ...
  9. reader->SetCallBack(BatchGetCallBack); //若不设定回调,则为同步读取
  10. table->Get(reader);
  11. ...
  12. while (!table->IsGetFinished()); // 如使用异步读取,等待后台读取完成后退出
  13. delete reader; // 注意回收内存,若异步,可在回调中回收
  14. // 批量读取
  15. std::vector<tera::RowReader*> readers;
  16. tera::RowReader* reader = table->NewRowReader(“rowkey2”);
  17. ...
  18. readers.push_back(reader);
  19. ...
  20. table->Get(readers);
  21. ...
  22. for (size_t i = 0; i < readers.size(); ++i) {
  23. delete readers[i];
  24. }

写、删

  1. // 同步单条写入数据(简单,性能较低)
  2. table->Put("rowkey1", "columnfamily1", "qualifier1", "value11", &error_code);
  3. // RowMutation 增删(保证多列原子操作,支持同步、异步、批量)
  4. tera::RowMutation* mutation = table->NewRowMutation("rowkey2");
  5. mutation->Put("family21", "qualifier21", "value21");
  6. mutation->Put("family22", "qualifier22", "value22");
  7. mutation->DeleteFamily("family11");
  8. mutation->DeleteColumns("family22", "qualifier22");
  9. ...
  10. mutation->SetCallBack(CallBack); // 若不设定回调,则为同步写入
  11. table->ApplyMutation(mutation); // 同步写入会阻塞
  12. ...
  13. while (!table->IsPutFinished()); // 如使用异步,等待后台写入完成后退出
  14. delete mutation; // 注意回收内存,若异步,可在回调中回收
  15. // 批量
  16. std::vector<tera::RowMutation*> mutations;
  17. tera::RowMutation* mutation = table->NewRowMutation(“rowkey2”);
  18. ...
  19. mutations.push_back(mutation);
  20. ...
  21. table->ApplyMutation(mutations);
  22. ...
  23. for (size_t i = 0; i < mutations.size(); ++i) {
  24. delete mutations[i];
  25. }

扫描

  1. // 闭开区间
  2. tera::ScanDescriptor desc(“rowkey1”); // scan 开始KEY,为空,则从表头开始scan
  3. desc.SetEnd("rowkey2"); // 结束行KEY,不包含rowkey2,为"",则至表尾
  4. desc.AddColumnFamily("family21"); // 返回此cf中数据,若不设,返回所有列
  5. desc.AddColumn("family22", "qualifier22");
  6. ...
  7. tera::ResultStream* result_stream = table->Scan(desc, &error_code);
  8. while (!result_stream->Done()) {
  9. ...
  10. result_stream->Next();
  11. if(...) result_stream->Cancel(); // 调用Cancel()接口后,会从while循环中退出
  12. }
  13. delete result_stream; // 注意回收内存