50.2. 拡張可能

伝統的に、新しいインデックスメソッドの実装は、非常に難しい作業を意味していました。 ロックマネージャやログ先行書き込みなどデータベースの内部動作を理解する必要がありました。 GiSTインタフェースは高レベルな抽象化を持ち、アクセスメソッドの実装者には、アクセスするデータ型のセマンティックスのみの実装を要求します。 GiST層自身が並行性、ログ処理、ツリー構造の検索を行ないます。

この拡張性と、他の、扱うことができるデータを対象とした標準検索ツリーの拡張性とを混同すべきではありません。 例えば、PostgreSQLは拡張可能なB+-treeとR-treeをサポートしています。 これは、 PostgreSQLを使用して、任意のデータ型に対するB+-treeやR-treeを構築することができるを意味します。 しかし、B+-treeは範囲述語(<=>)のみをサポートし、R-treeはn次元の範囲述語(含む、含まれる、等しい)のみをサポートします。

ですから、PostgreSQLのB+-treeで例えば画像群をインデックス付けする場合、 "画像xは画像yと同じか""画像xは画像yより小さいか""画像xは画像yより大きいか"といった問い合わせのみ発行することができます。 この文脈でどのように"同じか""より小さいか""より大きいか"を定義するかに依存して、これが有意なこともあるでしょう。 しかし、GiSTを基にしたインデックスを使用すれば、問題分野に特化した、おそらくは、"馬の画像をすべて見つけたい"とか"露出オーバーの写真をすべて見つけたい"といった質問に応えられる手段を作成することができます。

GiSTアクセスメソッドを有効にし、実行するために行なわなければならないことは、ツリーのキーの動作を定義する、7個のユーザ定義のメソッドを実装することです。 当然ながら、これらのメソッドは奇妙な問い合わせをサポートしようとすると、かなり奇妙なものになってしまいます。 しかし、すべての標準的な問い合わせ(B+-treeやR-treeなど)ではこれらは、相対的にみて、素直なものになります。 まとめると、GiSTは汎用性、コード再利用、整理されたインタフェースと拡張性を兼ね備えたものです。

アダルトレンタルサーバー