【产品公告牌 2025-06-18】灵动特性 —— OceanBase 插件系统

随着数据库技术的发展和业务需求的不断变化,灵活性和可扩展性已成为现代数据库系统的核心要求。为了满足用户对高效、灵活的功能扩展需求,OceanBase 推出了插件机制,使得扩展 OceanBase 的功能变得更加轻松和高效。

OceanBase 插件机制的主要特点包括:

  • 简化扩展:通过插件机制,用户可以轻松地为 OceanBase 添加新的功能模块,无需修改核心代码。这种模块化设计使得功能扩展变得更加方便和直观。

  • 高效更新:插件机制支持快速迭代更新,用户可以及时获取和应用最新的功能改进和修复。这种快速响应的能力,确保了系统能够始终处于最佳状态,满足不断变化的业务需求。

  • 定制化功能:插件机制允许用户根据自身业务需求定制特定功能,提高系统的灵活性和适应性。用户可以选择性地加载或卸载插件,确保系统始终运行需要的功能模块。

  • 社区和生态支持:通过插件机制,OceanBase 用户可以共享和发布自定义插件,促进社区的交流与合作,丰富插件生态系统。这样不仅提升了 OceanBase 的功能多样性,还推动了整个社区的发展。 用户发布的插件不受OceanBase License限制。

  • 实验室特性:目前,OceanBase 插件机制仍属于实验室特性阶段,且仅支持分词器插件。这意味着插件功能正在不断优化和扩展中,用户可以提前体验这些新特性并提供反馈,帮助完善系统功能。

总之,OceanBase 的插件机制使得数据库系统的功能扩展和更新更加高效、灵活和可控。无论是增加新的功能模块,还是定制专属应用,都可以通过插件轻松实现。通过这一机制,OceanBase 能够更好地满足用户的多样化需求,助力企业实现业务的快速增长和创新。

如何使用插件

OceanBase 支持分词器插件并提供了结巴分词插件。结巴分词是一个开源的中文分词器,其在分词准确性和速度方面表现都不错。

在使用插件之前,假设你已经部署了一个OceanBase集群。

下载插件

yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
yum install -y oceanbase-plugin-jieba-ftparser

你可能需要root权限(sudo)来这行这些命令。

查看插件文件

$ rpm -ql oceanbase-plugin-jieba-ftparser
/usr/lib/libjieba_ftparser.so
/usr/lib/libjieba_ftparser.so.0
/usr/lib/libjieba_ftparser.so.0.2.0

可以看到,插件包中提供的插件是动态链接库。

安装插件

复制插件动态库

先把插件动态库复制到OceanBase集群中各个observer节点工作目录的plugin_dir目录下。

observer 工作目录通常是observer日志目录的上一级。

cp /usr/lib/libjieba_ftparser.so* {observer/workpath}/plugin_dir

如果没有plugin_dir目录,可以创建一个: mkdir plugin_dir

修改配置项

alter system set plugins_load='libjieba_ftparser.so';

重启集群后,确认插件加载成功

obclient [oceanbase]> select * from oceanbase.GV$OB_PLUGINS where name='jieba';
+-----------+----------+-------+--------+----------+----------------------+-----------------+------------------------------------------+-------------------+-----------------------+------------+---------------------------------------------+
| SVR_IP    | SVR_PORT | NAME  | STATUS | TYPE     | LIBRARY              | LIBRARY_VERSION | LIBRARY_REVISION                         | INTERFACE_VERSION | AUTHOR                | LICENSE    | DESCRIPTION                                 |
+-----------+----------+-------+--------+----------+----------------------+-----------------+------------------------------------------+-------------------+-----------------------+------------+---------------------------------------------+
| 127.0.0.1 |     2882 | jieba | READY  | FTPARSER | libjieba_ftparser.so | 0.2.0           | f4c543cdaeda232ce81f09bfb2c9b47d18f09930 | 0.1.0             | OceanBase Corporation | Apache 2.0 | jieba full text parser for oceanbase(demo). |
+-----------+----------+-------+--------+----------+----------------------+-----------------+------------------------------------------+-------------------+-----------------------+------------+---------------------------------------------+
1 row in set (0.007 sec)

测试使用

-- 创建测试表
CREATE TABLE t_jieba(id INT UNSIGNED AUTO_INCREMENT, a VARCHAR(100), FULLTEXT INDEX fidx1(a) WITH PARSER jieba);

-- 插入一些数据
insert into t_jieba(a) values
  ('OceanBase 数据库支持高性能分布式事务处理,同时集成了分词器插件以优化全文检索功能。'),
  ('人工智能助力医疗行业实现精准诊断'),
  ('这家餐厅的服务很好,菜的品质也是上乘。'),
  ('自然语言处理是一门研究人类语言与计算机交互的科学,设计文本分类、机器翻译、语音识别等多个领域。近年来,随着深度学习的发展,自然语言处理技术取得了显著的进步。');

这时,我们可以执行查询语句进行测试:

obclient [test]> select * from t_jieba where id > 1 and match(a) against ("人工智能") or match(a) against ("机器学习");
+----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| id | a                                                                                                                                                                                                                                          |
+----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|  2 | 人工智能助力医疗行业实现精准诊断                                                                                                                                                                                                           |
|  4 | 自然语言处理是一门研究人类语言与计算机交互的科学,设计文本分类、机器翻译、语音识别等多个领域。近年来,随着深度学习的发展,自然语言处理技术取得了显著的进步。                                                                               |
+----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.013 sec)

如何开发插件

OceanBase 支持使用C/C++语言开发插件,并提供了一个插件开发包。如果你在一个开发平台上安装了C/C++开发环境,并安装了OceanBase插件开发包,就可以很轻松的开发插件了。

安装C/C++开发环境和OceanBase插件开发包

yum install -y cmake make glibc-devel glibc-headers gcc gcc-c++
yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
yum install -y oceanbase-plugin-dev-kit

注意,

  • 如果你用的系统不支持 yum,可以使用其它方法开发。

  • 你可能需要root权限(sudo)来执行这些命令。

复制样例代码开发

OceanBase 分词器插件样例代码在OceanBase插件开发包中的 share/examples/ObPlugin/ftparser 目录下,直接复制这个目录到你自己的开发目录下,即可以修改 space_ftparser.cpp 文件开发自己的分词器插件。

编译

CMakeLists.txt 文件中使用 “TODO” 指明了需要修改的内容,包括:

  • PLUGIN_NAME 当前插件的名字,也是项目和链接库的名称,你应该修改成自己需要的名称;

  • SOURCES 实现文件,可以是C代码文件或C++代码文件,这里是一个列表,可以写多个。当你增加了新的实现文件时,应该修改这里的代码。注意不要把头文件放到这里。

执行下面的步骤进行编译

cd /your/work/path/ftparser
mkdir -p build
cd build
cmake ..
make

安装与测试使用

编译完成后,可以在 build 目录下看到 libexample_ftparser.so (当然,你可能改成了其它名字)。动态库插件的安装与前面介绍的动态库插件安装使用的方法是一致的,不再重复介绍。

更多内容请参考

最后,如果你对OceanBase的插件有新的需求,比如希望支持新的插件类型(审计、认证、压缩等),或者新的插件、现有插件优化等,都欢迎到插件需求面板向我们来提出。

33 个赞

沙发,点赞!

28 个赞

值得学习

29 个赞

沙发,点赞!

27 个赞

社区就是讨论一些新功能与样式的地方,能够将这些应用到合适的生产环境,就可以出师了!

29 个赞

沙发

26 个赞

oceanbase给力,值得学习国产数据库,支持

28 个赞

:+1::+1::+1:

22 个赞

:+1:t2:

23 个赞

受益匪浅!

23 个赞

点赞

15 个赞

加油!

12 个赞

OceanBase 插件系统 :+1: :+1: :+1:

11 个赞

欢迎加入OB大家庭!

7 个赞

不错,插件是数据库功能的有效扩展!

7 个赞

:+1: :+1: :+1:

9 个赞

点赞 :+1:

6 个赞

使用插件系统会很灵活

10 个赞

学习

7 个赞

:grinning: :grinning: :grinning:

7 个赞