データベース技術の進化とビジネスシナリオの多様化に伴い、柔軟性と拡張性は現代の分散型データベースシステムにおける核心的な能力の一つとなっています。ユーザーの効率的で柔軟な機能拡張ニーズに応えるため、OceanBaseデータベースはプラグインメカニズムを導入し、モジュラーで低侵襲的な機能拡張手段を提供しています。プラグインメカニズムにより、ユーザーはコアコードを修正することなく、機能モジュールを動的にロード、アンロード、更新でき、データベースシステムの効率的なカスタマイズと拡張を実現できます。
注意
OceanBaseデータベースのプラグインメカニズムは現在、実験的機能であり、本番環境での使用は推奨されていません。その機能範囲と安定性は段階的に改善されています。現段階では、プラグインメカニズムは主に以下のシナリオをサポートしています:
- 分かち書きプラグイン:データベースの全文検索機能を拡張し、ユーザー定義の分かち書きロジックをサポートします。
- 機能検証:ユーザーは実験的機能を通じてプラグインメカニズムを先行して体験し、今後の機能拡張に向けた貴重なフィードバックを提供できます。
プラグインメカニズムの利点
拡張の簡素化
OceanBaseデータベースのプラグインメカニズムを利用することで、コアコードを変更することなく新しい機能モジュールを簡単に追加できます。このモジュラーデザインにより、機能の拡張がより便利かつ直感的になります。
効率的な更新
プラグインメカニズムは迅速な反復更新をサポートしており、ユーザーは最新の機能改善や修正をタイムリーに取得し適用できます。この迅速な対応能力により、システムは常に最適な状態を維持し、絶えず変化するビジネスニーズに対応できます。
カスタマイズ可能な機能
プラグインメカニズムにより、ユーザーは自身のビジネスニーズに合わせて特定の機能をカスタマイズでき、システムの柔軟性と適応性を向上させることができます。ユーザーは必要に応じてプラグインを選択的にロードまたはアンインストールでき、システムが常に必要な機能モジュールのみを実行するように保証できます。
コミュニティとエコシステムのサポート
プラグインメカニズムにより、OceanBaseデータベースのユーザーはカスタムプラグインを共有および公開でき、コミュニティ内の交流と協力を促進し、プラグインエコシステムを豊かにします。これにより、OceanBaseデータベースの機能多様性が向上するだけでなく、コミュニティ全体の発展も促進されます。
プラグインメカニズムの原理
OceanBaseデータベースのプラグインは、動的リンクライブラリ形式でデータベース機能を拡張するコンポーネントであり、OceanBaseデータベースを修正することなく、以下の機能を追加できます。
- カスタマイズ機能(特殊な分かち書きアルゴリズムなど)
- サードパーティエコシステムとの互換性(特定のデータ形式のサポートなど)
- 商業用拡張モジュール
プラグインシステムアーキテクチャ
OceanBaseデータベースのプラグインシステムは、開発者が迅速に拡張できるよう設計されています。
関連するモジュールは以下のとおりです:
プラグインライブラリ自体:外部テーブル、分かち書きなど。
Plugin Interfaces:プラグインインターフェースのバージョン番号。
説明
各プラグインインターフェース(Plugin Interfaces)には、独自のバージョン番号が付けられています。
Plugin API: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種類のバージョン番号を提供しています。1つはプラグインインターフェース(Plugin Interfaces)のバージョン番号で、もう1つはプラグインAPI(Plugin API)のバージョン番号です。
OceanBaseデータベースは各プラグインインターフェースにバージョン番号を設計しています。プラグインはコンパイル時に、現在どのバージョンのインターフェースを実装するかを指定する必要があり、その後プラグインライブラリをデータベースにインストールすると、OceanBaseデータベースはバージョン番号を検証します。さらに、プラグインのコンパイル回数を減らすため、プラグインインターフェースは追加のみ可能で、削除はできません。また、OceanBaseデータベースがプラグインインターフェースを呼び出す際には、古いバージョンのコードに対して互換処理を行います。この動作は通常、Plugin Adaptorによって行われます。分かち書きプラグインインターフェースを例にとると、最初のバージョンのバージョン番号は0.1.0です。check_if_charset_supported インターフェースが追加された後、新しいバージョン番号0.2.0が付けられました。プラグインライブラリを作成する際にも、バージョン番号を確認することで、新しいインターフェース check_if_charset_supported を実装する必要があるかどうかを判断できます。
OceanBaseデータベースが設計したもう1種類のバージョン番号は、プラグインAPIのバージョン番号です。このバージョン番号は、プラグインライブラリがより高いバージョンのAPIにアクセスする必要がある場合に、実行しているOceanBaseデータベースのバージョンが古くてそのAPIを提供できないため、インストール時にエラーが発生するのを防ぐために使用されます。プラグインインターフェースのバージョン番号と同様に、プラグインAPIのバージョン番号も、新しい内容が追加されるたびにバージョン番号が上がります。
注意が必要な点として、プラグインインターフェースのバージョン番号は複数存在し、各種類のインターフェースごとに独自のバージョン番号があります。例えば、分かち書きプラグインインターフェースや外部テーブルプラグインインターフェースなどです。一方、プラグインAPIインターフェースは1つしかなく、たとえ新しく追加されたAPIが分かち書きプラグイン内でのみ使用される場合でも、グローバルなプラグインAPIのバージョン番号を引き上げる必要があります。