Chapter 20. 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 に関する優れた情報が含まれています。 今後もっと調査を行ない、この情報を更新する予定です。

何をしているのかをちゃんと理解しているとはいえませんが、 少なくとも、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. サンプルソースをpgsql/src下の適当なところで構築しました(tarファイルを展開するとできる)。 前述のMakefileでは、pgsql/srcの1階層下のディレクトリにあるものとして扱っています。

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

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

-- -- there's a memory leak in rtree poly_ops!!
-- -- create index pix2 on polytmp using rtree (p poly_ops);
それを踏まえ、何世代か前のPostgresバージョンに 関連すると思い、その問い合わせを試みました。私のシステムはおかしくなってしまい、 およそ10分後、postmasterを停止させなければならなくなりました。

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