データベース技術の進化とビジネスシナリオの多様化に伴い、柔軟性と拡張性は現代の分散型データベースシステムにおける重要な能力の一つとなっています。ユーザーが求める効率的かつ柔軟な機能拡張ニーズを満たすため、OceanBaseデータベースはプラグインメカニズムを導入しました。これにより、ユーザーはモジュール化された、低侵襲型の機能拡張方法を利用できるようになりました。プラグインメカニズムを通じて、ユーザーはコアコードを変更することなく、機能モジュールを動的にロード、アンロード、更新することが可能となり、データベースシステムの効率的なカスタマイズと拡張を実現できます。
注意
- OceanBaseデータベースV4.3.5では、V4.3.5 BP1バージョンからプラグインメカニズムがサポートされています。
- OceanBaseデータベースのプラグインメカニズムは現在、実験的機能であり、本番環境での使用は推奨されません。その機能範囲と安定性は徐々に改善されています。現段階では、プラグインメカニズムは主に以下のシナリオをサポートしています:
- トークナイザープラグイン:データベースの全文検索機能を拡張し、ユーザー定義のトークナイズロジックをサポートします。
- 機能検証:ユーザーは実験的機能を通じてプラグインメカニズムを事前に体験し、今後の機能拡張に向けた貴重なフィードバックを提供できます。
プラグインメカニズムの利点
拡張の簡素化
OceanBaseデータベースのプラグインメカニズムを利用することで、コアコードを変更することなく、OceanBaseデータベースに新しい機能モジュールを容易に追加できます。このモジュール設計により、機能拡張がより便利かつ直感的になります。
効率的な更新
プラグインメカニズムは迅速なイテレーション更新をサポートしており、ユーザーは最新の機能改善や修正をタイムリーに取得して適用できます。この迅速な対応能力により、システムは常に最適な状態を維持し、絶えず変化するビジネスニーズを満たすことが保証されます。
カスタマイズ可能な機能
プラグインメカニズムにより、ユーザーは自身のビジネスニーズに基づいて特定の機能をカスタマイズでき、システムの柔軟性と適応性を向上させることができます。ユーザーはプラグインを選択的にロードまたはアンインストールすることで、システムが必要な機能モジュールのみを常に実行するようにできます。
コミュニティとエコシステムのサポート
プラグインメカニズムを通じて、OceanBaseデータベースのユーザーはカスタムプラグインを共有および公開でき、コミュニティ間の交流と協力を促進し、プラグインエコシステムを豊かにします。これにより、OceanBaseデータベースの機能多様性が向上するだけでなく、コミュニティ全体の発展も推進されます。
プラグインメカニズムの原理
OceanBaseデータベースのプラグインは、動的リンクライブラリとしてデータベース機能を拡張するコンポーネントであり、OceanBaseデータベースを修正することなく追加できます。
- カスタマイズ機能(特殊な形態素解析アルゴリズムなど)。
- サードパーティエコシステムとの互換性(特定のデータ形式のサポートなど)。
- ビジネス向け拡張モジュール。
プラグインシステムアーキテクチャ
OceanBaseデータベースのプラグインシステム設計の目標は、開発者が迅速に拡張できるようにすることです。
関連モジュールは以下の通りです:
プラグインライブラリ自体:外部テーブル、形態素解析器など。
Plugin Interfaces:プラグインインターフェースのバージョン番号。
説明
各プラグインインターフェース(Plugin Interfaces)には独自のバージョン番号があります。
Plugin API:OceanBaseデータベースがプラグインライブラリに提供するOceanBaseデータベース機能のインターフェース。
OceanBaseデータベースは、各プラグインが実装すべきインターフェースを定義しており、外部テーブルや形態素解析器など、各種類のプラグインにはそれぞれ特定のプラグインインターフェース(Plugin Interfaces)が用意されています。プラグインライブラリはこれらのインターフェースを実装し、OceanBaseデータベースはプラグインライブラリを読み込む際にプラグインの実装を呼び出すことができます。プラグインが機能を実装する際に、OceanBaseデータベースの機能を利用する必要がある場合、例えばOceanBaseデータベースのデータへのアクセスやログの出力など、プラグインAPI(Plugin API)を呼び出すことができます。プラグインAPIの実装はOceanBaseデータベース内にあり、これをPlugin API Implementationと呼びます。
このように、プラグイン開発時にはOceanBaseデータベースのソースコードを深く理解する必要はなく、OceanBaseデータベースのプラグイン開発ライブラリに依存するだけで済みます。また、各種類のプラグインには、形態素解析器プラグインのサンプルコードのように、参照できるサンプルコードが用意されています。
OceanBaseデータベース内部では、OceanBaseデータベースの機能とプラグインの互換性を保つため、プラグインシステムはプラグインインターフェースを変換し、OceanBaseデータベースの既存の機能定義と互換性を持たせます。これをPlugin Iterface Adaptorモジュールと呼びます。
ユーザーがプラグインをインストールすると、プラグインオブジェクトはOceanBaseデータベース内部に配置され、Plugin Managerによって管理されます。OceanBaseデータベースがプラグインを使用する際も、同様にPlugin Managerモジュールを通じて検索が行われます。
互換性
プラグインはOceanBaseデータベースから独立しているため、異なるバージョンのプラグインと異なるバージョンのOceanBaseデータベースとの連携、すなわちOceanBaseデータベースとプラグインの互換性を考慮する必要があります。OceanBaseデータベースは、古いバージョンのプラグインとの互換性を可能な限り確保し、プラグインの実行によってシステムがインターフェースの問題により重大な例外(例えばダウンタイム)を起こさないようにします。
OceanBaseデータベースは、互換性を保証するために2種類のバージョン番号を提供しています。一つはプラグインインターフェース(Plugin Interfaces)のバージョン番号、もう一つはプラグインAPI(Plugin API)のバージョン番号です。
OceanBaseデータベースは、各プラグインインターフェースに対してバージョン番号を設計しています。プラグインはコンパイル時に、現在どのバージョンのインターフェースを実装するかを指定する必要があり、その後プラグインライブラリをデータベースにインストールする際に、OceanBaseデータベースはバージョン番号を検証します。また、プラグインのコンパイルを減らすため、プラグインインターフェースは追加のみが許可され、削除はできません。さらに、OceanBaseデータベースがプラグインインターフェースを呼び出す際には、古いバージョンのコードに対して互換処理を行います。この動作は通常、Plugin Adaptorによって行われます。形態素解析器プラグインインターフェースを例にとると、最初のバージョンのバージョン番号は0.1.0であり、check_if_charset_supportedインターフェースが追加された後、新しいバージョン番号は0.2.0となります。プラグインライブラリを作成する際にも、バージョン番号を通じて新しいインターフェースcheck_if_charset_supportedを実装する必要があるかどうかを判断できます。
OceanBaseデータベースが設計したもう一つのバージョン番号は、プラグインAPIのバージョン番号です。このバージョン番号は、プラグインライブラリがより新しいバージョンのAPIにアクセスする必要がある場合、実行しているOceanBaseデータベースのバージョンが古く、このAPIを提供できないため、インストール時にエラーが発生するのを防ぐために用いられます。プラグインインターフェースのバージョン番号と同様に、プラグインAPIのバージョン番号も、新しい内容が追加されるたびにバージョン番号が上昇します。
注意すべき点として、プラグインインターフェースのバージョン番号は複数存在し、各種類のインターフェースごとに独自のバージョン番号があります。例えば、形態素解析器プラグインインターフェースや外部テーブルプラグインインターフェースなどです。一方、プラグインAPIのインターフェースは一つしかなく、たとえ新しく追加されたAPIが形態素解析器プラグイン内でのみ使用される場合でも、グローバルなプラグインAPIのバージョン番号は引き続き上げる必要があります。