写点什么

AntDB-M 的扩展功能,性能提升和热更新轻松搞定

  • 2023-10-30
    浙江
  • 本文字数:1405 字

    阅读完需:约 5 分钟

AntDB-M 的基本功能包括提供各种各样的内置函数,比如数值类型函数 SUM、字符型函数 STRCMP、日期时间型函数 ADDDATE 等,这些内置的函数给使用者提供了处理基本数据类型的能力,增强了 AntDB-M 的功能。


AntDB-M 的内置函数作为基本功能,提供了开箱即用的使用体验。如果我们把业务的某些功能写成函数,就像内置函数一样,这样就可以把业务直接嵌入到了数据库中,成为了数据库能力的一部分。 对于业务来说,直接调用这些函数就完成了业务逻辑的处理,对于数据库产品来说,扩展了数据库的功能。这种扩展功能叫做 UDF(用户自定义函数)。


AntDB-M 支持通过 UDF 的形式来扩展数据库功能。对于 UDF 的实现和使用要遵循下面的约束:


UDF 要使用 C/C++语言实现


UDF 接受字符串,整型,浮点型的值作为参数,也可以返回这些类型的值。对于复杂自定义数据类型,可以序列化为字符串


UDF 要编译成动态库,即目标系统要支持动态库


UDF 使用 CREATE/DROP FUNCTION 进行函数创建和删除


UDF 使用时,要先创建


一个简单类型的 UDF 至少需要实现下面三个函数:


初始化函数:


这个函数的作用包括:


检查传入主函数的参数个数


检查传入主函数的参数类型


如果主函数内部,需要分配内存,可以在这里进行分配


指定返回值的信息


主函数:


这个函数的作用包括:


实现具体的功能。


销毁函数:


这个函数的作用包括:


释放初始化函数内分配的内存


其它清理工作


下面通过实现一个 UDF 来说明三个函数的具体实现:


假设我们要实现一个 UDF,这个 UDF 的功能是对输入的两个参数进行相加,UDF 的名字叫做 My_SUM。


初始化函数:


my_bool My_SUM_init(UDF_INIT *initid, UDF_ARGS *args, char *message)


{


//参数类型校验


if(args->arg_type[0] != INT_RESULT || args->arg_type[1] != INT_RESULT)


{


strcpy(message,"My_SUM() requires a integer and an integer");


 return 1;
复制代码


}


else


{


return 0;


}


}


主函数:


long long My_SUM(UDF_INIT *initid, UDF_ARGS *args,char *is_null, char *error)


{


//实现具体的功能


long long left_val = ((long long) args->args[0]);


long long right_val = ((long long) args->args[1]);


return left_val + right_val;


}


销毁函数:


void My_SUM_deinit(UDF_INIT *initid)


{


//清理工作


}


假设编译生成的动态库名字是:my_sum_udf.so。


使用 CREATE FUNCTION 命令创建函数:


CREATE FUNCTION My_SUM RETURNS INTEGER SONAME 'my_sum_udf.so';


使用 UDF:


SELECT My_SUM(10,15);


使用 DROP FUNCTION 命令删除函数:


DROP FUNCTION My_SUM;


AntDB-M 的扩展功能主要有以下几个优点:


1.性能提升


用通过 JDBC 等驱动程序访问数据库,要经过多次网络交互才能操作一次事务中访问的数据,并且一次查询要经过 SQL 解析,SQL 优化,生成执行计划,执行计划访问引擎接口才能访问到数据;使用 UDF 只要调用一次就可以了,UDF 通过简单的 SQL 解析,就直接在存储引擎内进行数据访问,跳过 SQL 层的其它处理过程。


图 1:普通查询执行过程


图 2:UDF 执行过程


2.热升级


业务功能封装成 UDF 编译成动态库,可以动态进行加载和卸载。如果业务功能需要进行升级,不需要停掉数据库,只要卸载在使用中的动态库,加载新的动态库就可以了。这样降低了升级的时间和风险。


图 3:热升级示例图


关于 AntDB 数据库


AntDB 数据库始于 2008 年,在运营商的核心系统上,为全国 24 个省份的 10 亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行近 15 年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

用户头像

企业数据库创新实践者 2021-07-26 加入

AntDB数据库始于2008年,服务于全国20多个省份的10亿多用户提供在线服务;具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔电信核心交易,并保障系统持续0故障运行近十年。 官网:asiainfoah.com

评论

发布
暂无评论
AntDB-M的扩展功能,性能提升和热更新轻松搞定_AntDB数据库_亚信AntDB数据库_InfoQ写作社区