Chapter 9. GiSTインデックス

Gistについての情報は、http://GiST.CS.Berkeley.EDU:8000/gist/にあります。また、他のインデックスとソートに関するスキーマはhttp://s2k-ftp.CS.Berkeley.EDU:8000/personal/jmh/にあります。 また、http://epoch.cs.berkeley.edu:8000/http://www.sai.msu.su/~megera/postgres/gist/にも、より興味深い記事があります。

著者: これは、Eugene Selkov, Jr.()によるメールからの抜粋であり、GiSTに関する優れた情報が含まれています。今後もっと調査を行い、この情報を更新する予定です。 - thomas 1998-03-01

何をしているのかを正しく理解しているとはいえませんが、少なくとも、GiSTの例をLinuxに移植することに(ほぼ)成功しました。GiSTアクセスメソッドはすでにpostgresのソースツリー(src/backend/access/gist)に存在します。

バークレイの例では、そのメソッドの概略を示し、2次元の四角形、多角形、整数間隔、テキスト用の空間的インデックスのデモを行っています(バークレイでのGiSTを参照してください)。四角形の例で、GiSTインデックスを使った場合に性能が向上していることがわかると思います。私の環境ではうまく動きましたが、多量のボックスの集合を使って試していません。多角形を除いて、他の例もうまく動作しました。多角形の場合は以下ようなエラーになりました。

test=> CREATE INDEX pix ON polytmp
test-> USING GIST (p:box gist_poly_ops) WITH (ISLOSSY);
ERROR:  cannot open pix

(PostgreSQL 6.3               Sun Feb  1 14:57:30 EST 1998)

私にはこのエラーメッセージの意味が理解できませんでした。開発者に聞いたほうがよさそうです(後述のメモ4を見てください)。私がここで提案したいことは、Linuxユーザーのどなたかに上で引用した元のソースを入手して、私が作ったパッチを適用して、その感想を聞かせて欲しいということです。私は結構いいものと思いましたが、多くの有能な方々がいらっしゃるので、このパッチに固執するつもりはありません。

ソースに関するメモを数個、下記に示します。

1. オリジナルのHP-UX用のMakefileを使ってmakeすることはできませんでしたので、昔のPostgres95のチュートリアルを参考にMakefileを再構成し、makeを行いました。一般的な形を保持しようと思いましたが、makefile作成には長けていませんので、素人仕事となってしまいました。この点は謝罪しますが、元々のmakefileより移植性に優れたものになったと思っています。

2. サンプルソースを(tarファイルを展開するとできる)pgsql/src直下で構築しました。前述のMakefileでは、pgsql/srcの1階層下のディレクトリにあるものとして扱っています (この例では pgsql/src/pggist)。

3. 私が*.cファイルに行った変更は、すべて#includeと関数プロトタイプと型キャストに関することです。これ以外に、使用していない変数群の削除とgccを通すための2つのかっこの追加を行っています。私が台無しにしていなければいいのですが。

4. polyproc.sqlに下記のようなコメントがあります。

-- -- 下記のようなr-treeタイプのpoly_opsにはメモリリークがあります!!
-- -- CREATE INDEX pix2 ON polytmp USING RTREE (p poly_ops);

それを踏まえ、何世代か前のPostgreSQLバージョンに関連すると思い、その問い合わせを試みました。私のシステムはおかしくなってしまい、およそ10分後、postmasterを停止させなければならなくなりました。

しばらくはGiSTに注目していきますが、R-treeの多くの例も歓迎します。