OpenMLDB C++ SDK 开源 | APIs 开发设计

目录

  • 1. 开源任务简介
  • 2. C++ APIs 简介
    • (1) 对外暴露的主要数据类型
    • (2) 对外暴露的主要函数接口
    • (3) C++ SDK 使用流程

1. 开源任务简介

OpenMLDB 是一个开源机器学习数据库,提供线上线下一致的生产级特征平台。底层使用 C++ 语言进行开发,但是目前 C++ APIs 没有抽象成友好的、可供开发者直接使用的 SDK,所以我的任务是重新整理封装目前的 APIs

2. C++ APIs 简介

(1) 对外暴露的主要数据类型

TimeStamp 类:OpenMLDB 的时间戳类型
Date 类:OpenMLDB 的时间类型
OpenMLDB 的 bool、int16、int32、int64、float、double、string 类型与 C++ 中的对应类型相同。
OpenmldbHandler 类:使用 OpenMLDB 必须要创建一个该类对象,用于创建一个客户端。
ParameterRow 类:使用带参请求时需要创建一个该类对象,用于保存参数行。
RequestRow 类:使用请求模式时需要创建一个该类对象,用于保存请求行。

(2) 对外暴露的主要函数接口

execute(const OpenmldbHandler& handler, const std::string& sql):用于执行 SQL 语句。
execute_parameterized(const OpenmldbHandler& handler, const std::string& db, const std::string& sql, const ParameterRow& para):用于执行带参的 SQL 语句。
execute_request(const RequestRow& req):用于执行请求模式的 SQL 语句。
print_resultset(std::shared_ptr rs):用于格式化输出 SQL 语句执行后的返回结构。

(3) C++ SDK 使用流程

#include 
#include 
#include 
#include 
#include 

int main()
{
      // 创建并初始化 OpenmldbHandler 对象
      // 单机版:参数(ip, port),如:OpenmldbHandler handler("127.0.0.1", 6527);
      // 集群版:参数(ip:port, path),如:OpenmldbHandler handler("127.0.0.1:6527", "/openmldb");
      // 在此以单机版为示例。
      OpenmldbHandler handler("127.0.0.1", 6527);

      // 定义数据库名
      std::time_t t = std::time(0);
      std::string db = "test_db" + std::to_string(t);

      // 创建 SQL 语句,创建数据库
      std::string sql = "create database " + db + ";";
      // 执行 SQL 语句,execute() 函数返回 bool 值,值为 true 表示正确执行
      std::cout << execute(handler, sql);

      // 创建 SQL 语句,使用数据库
      sql = "use " + db + ";";
      std::cout << execute(handler, sql);

      // 创建 SQL 语句,创建表
      sql = "create table test_table ("
            "col1 string, col2 bigint,"
            "index(key=col1, ts=col2));";
      std::cout << execute(handler, sql);

      // 创建 SQL 语句,向表中插入行
      sql = "insert test_table values(\"hello\", 1)";
      std::cout << execute(handler, sql);
      sql = "insert test_table values(\"Hi~\", 2)";
      std::cout << execute(handler, sql);

      // 普通模式
      sql = "select * from test_table;";
      std::cout << execute(handler, sql);
      // 获得最近一次 SQL 的执行结果
      auto res = get_resultset();
      // 输出 SQL 的执行结果
      print_resultset(res);
      // 本示例中输出应该为:
      //      +-------+--------+
      //      | col1  | col2 |
      //      +-------+--------+
      //      | hello | 1     |
      //      | Hi~   | 2     |
      //     +-------+---------+



      // 带参模式
      // SQL 语句中待填参数的位置用 ? 来表示
      sql = "select * from test_table where col1 = ? ;";
      // 创建 ParameterRow 对象,用于填充参数
      ParameterRow para(&handler);
      // 填入参数
      para << "Hi~";
      // 执行 SQL 语句,execute_parameterized() 函数返回 bool 值,值为 true 表示正确执行
      execute_parameterized(handler, db, sql, para);
      res = get_resultset();
      print_resultset(res);
      // 本示例中输出应该为:
      //      +------+--------+
      //      | col1 | col2 |
      //      +------+-------+
      //      | Hi~  | 2      |
      //      +------+--------+


      // 请求模式
      sql = "select col1, sum(col2) over w as w_col2_sum from test_table "
            "window w as (partition by test_table.col1 order by test_table.col2 "
            "rows between 2 preceding and current row);";
      RequestRow req(&handler, db, sql);
      req << "Hi~" << 3l;
      execute_request(req);
      res = get_resultset();
      print_resultset(res);
      // 本示例中输出应该为:
      //      +------+--------------------+
      //      | col1 | w_col2_sum |
      //      +------+--------------------+
      //      | Hi~  | 5                 |
      //      +------+--------------------+
}

你可能感兴趣的:(c++,开源,开发语言)