Skip to content

Agilor-DB-Client-CPP


介绍

以下是 Agilor-DB CPP客户端

Install

目前以静态库和相关头文件的方式提供使用 解压压缩包agilor_clie_cpp.tar.gz

tar -xvf agilor_client_cpp.tar.gz
  • 解压后目录结构如下
    • boost_1_83_0 // boost库
    • include // agilor client头文件
    • lib // 静态库
    • build.sh // 编译test_main.cpp的脚本
    • test_main.cpp // 示例代码

Compile

1)编译代码时,需要连接以下静态库:(位于lib目录) libagilor.a、 libboost_container.a、 libboost_json.a

2)需要将include和boost_1_83_0目录添加到头文件搜索路径

示例:g++ test_main.cpp -Llib -lagilor -lboost_container -lboost_json -Iinclude -Iboost_1_83_0 -o agilor_client

编译方法可参考测试程序test_main.cpp以及编译脚本build.sh

Get Started

所有对外接口都定义在ajdb_interface.h中(include/api/ajdb_interface.h)

可参考示例代码:test_main.cpp

使用步骤:(以QueryApi为例)

  • 1.包含头文件 #include "api/ajdb_interface.h"

  • 2.若使用到某个基础结构,需要添加对应的头文件。

    • 如QueryApi提供的select接口需要返回SearchResponse结构,则应当包含common/SearchResponse.h
    • 所有基础结构的头文件都位于include/common目录下
    • 注意名字空间的使用

    3.初始化连接信息(必须)

    init("39.100.67.205", "8713", "MY_DB", "Token XXX");

    4.调用接口

    ajdb::common::SearchResponse rsp = select("select * from cpu_test;SHOW TAG KEYS from cpu_test");

    5.从返回值中获取更多信息

    示例代码

          #include <iostream>
          #include <vector>
          #include "api/ajdb_interface.h"
          #include "common/ConnectionConfig.h"
          #include "common/SearchResponse.h"
    
    
          using namespace std;
    
          int main() {
              // 初始化连接信息
              // 方式一
              ajdb::common::ConnectionConfig cfg;
              cfg.host_ = "39.100.67.205";
              cfg.port_ = "8713";
              cfg.token_ = "Token XXX";
              cfg.database_ = "MY_DB";
              init(cfg);
    
              // 方式二
              //init("39.100.67.205", "8713", "Token XXX");
    
              // test query
              SearchResponse rsp = select("select * from cpu limit 10;select * from cpu limit 10", 3);
              ajdb::common::Result result = rsp.results_[1];
              cout << "statement_id: " << result.statement_id_ << endl;
              cout << "partial: " << result.partial_ << endl;
              ajdb::common::Row tag = result.tagset_[0];
              cout << "table: " << tag.table_ << endl;
              for (auto & t : tag.columns_) {
                  cout << "column: " << t << endl;
              }
              cout << "print values begin" << endl;
              std::vector<std::vector<std::string>> values = tag.values_;
              for (auto & t : values) {
                  for (auto & tt : t) {
                      cout << tt << endl;
                  }
                  cout << endl;
              }
              return 0;
          }

接口汇总

  • 以下是对外提供的所有接口

// init 用于初始化连接
void init(ajdb::common::ConnectionConfig config);
void init(const std::string& host, const std::string& port, const std::string& database, const std::string& token);

// EndpointApi 数据发布接口
std::pair<unsigned int, std::string> createEndpoint(ajdb::common::Endpoint endpoint);
std::pair<unsigned int, std::string> deleteEndpoint(const std::string& id);
std::pair<unsigned int, std::string> updateEndpoint(const std::string& id, ajdb::common::Endpoint endpoint);
std::pair<unsigned int, std::string> updatePutEndpoint(const std::string& id, ajdb::common::Endpoint endpoint);
std::vector<ajdb::common::EndpointPtrType> getAllEndpoint();
const std::string listEndpoints();
ajdb::common::EndpointPtrType getEndpointById(const std::string& id);

// QueryApi 查询
SearchResponse select(const std::string& sql);
SearchResponse select(const std::string& sql, const std::string& database);
SearchResponse select(const std::string& sql, bool pretty, const std::string& database);
SearchResponse select(const std::string& sql, int64_t chunkedSize);
SearchResponse select(const std::string& sql, int64_t chunkedSize, const std::string& database);
SearchResponse select(const std::string& sql, WritePrecision writePrecision);
SearchResponse select(const std::string& sql, WritePrecision writePrecision, const std::string& database);
SearchResponse select(const std::string& sql, bool pretty, WritePrecision writePrecision);
SearchResponse select(const std::string& sql, bool pretty, WritePrecision writePrecision, const std::string& database);
SearchResponse select(const std::string& sql, int64_t chunkedSize, bool pretty, WritePrecision writePrecision);
SearchResponse select(const std::string& sql, int64_t chunkedSize, bool pretty);
SearchResponse select(const std::string& sql, int64_t chunkedSize, bool pretty, const std::string& database);
SearchResponse select(const std::string& sql, int64_t chunkedSize, WritePrecision writePrecision);
SearchResponse select(const std::string& sql, int64_t chunkedSize, WritePrecision writePrecision, const std::string& database);

// DataBaseApi 数据库管理
std::vector<ajdb::common::DataBasePtrType> getDataBases();
std::pair<unsigned int, std::string> createDB(ajdb::common::DataBase dataBase);
ajdb::common::DataBasePtrType getDatabaseById(const std::string& id);
std::pair<unsigned int, std::string> deleteDBById(const std::string& id);
std::pair<unsigned int, std::string> updateDBById(ajdb::common::DataBase dataBase);
const std::string helloAgilor();

// RuleApi 订阅规则接口
std::vector<ajdb::common::RulePtrType> getRules();
std::pair<unsigned int, std::string> addRule(ajdb::common::Rule rule);
ajdb::common::RulePtrType getRuleById(const std::string& id);
std::pair<unsigned int, std::string> updateRuleById(ajdb::common::Rule rule);
std::pair<unsigned int, std::string> updatePutRule(ajdb::common::Rule rule);
std::pair<unsigned int, std::string> deleteRule(const std::string& id);

// WriteApi 写入数据
std::pair<unsigned int, std::string> writeRecord(const std::string& record);
std::pair<unsigned int, std::string> writeRecordByDB(const std::string& database, const std::string& record);
std::pair<unsigned int, std::string> writeListRecord(const std::vector<std::string>& records);
std::pair<unsigned int, std::string> writeListRecord(const std::string& database, const std::vector<std::string>& records);
std::pair<unsigned int, std::string> writePoint(const ajdb::common::Point& point);
std::pair<unsigned int, std::string> writePointByDB(const std::string& database, const ajdb::common::Point& point);
std::pair<unsigned int, std::string> writePoints(const std::vector<ajdb::common::Point>& points);
std::pair<unsigned int, std::string> writePoints(const std::string& database, const std::vector<ajdb::common::Point>& points);

参数/返回值说明

  • std::pair<unsigned int, std::string>类型返回值,包含执行结果信息。

    • first:http响应码
    • second:http响应信息描述
  • 查询接口各个参数:

    • pretty: bool类型,是否格式化
    • chunkedSize:int64_t类型,指定该参数后,返回结果将分块显示,其数值代表分块大小。
    • writePrecision:枚举类型,数据精度。支持的类型有WritePrecision::NS、WritePrecision::S、WritePrecision::MS
  • xxxPtrType代表将其封装为std::shared_ptr形式

  • 类类型的参数/返回值:作为参数时,调用接口之前需要先构造该类的对象,再当作参数传入;作为返回值时,可获取其中的属性。详见下一章节“基础结构说明”

基础结构说明

SearchResponse:查询接口的返回结构。

  • Alt text

ConnectionConfig:连接信息结构

  • Alt text

Endpoint:数据发布的结构

  • Alt text

DataBase:数据库结构

  • Alt text

WritePrecision:写入精度

  • 枚举类:enum class WritePrecision { UNDEFINED, NS, S, MS };

Point:点数据结构

  • Alt text

Rule:订阅规则结构

  • Alt text