データベース技術の進化とビジネスシナリオの多様化に伴い、柔軟性と拡張性は現代の分散型データベースシステムにおける核心的な能力の一つとなっています。ユーザーの効率的で柔軟な機能拡張ニーズに応えるため、OceanBaseデータベースはプラグインメカニズムを導入し、モジュラーで低侵襲的な機能拡張方法を提供しています。プラグインメカニズムにより、ユーザーはコアコードを変更することなく、機能モジュールを動的にロード、アンロード、更新できるため、データベースシステムの効率的なカスタマイズと拡張を実現できます。
注意
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 Interface 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のインターフェースは1つしかありません。たとえ新しく追加されたAPIが分かち書き器プラグイン内でのみ使用される場合でも、グローバルなプラグインAPIのバージョン番号を引き上げる必要があります。