Chapter 10. GiST インデックス

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

著者: これは、 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. 元々の( HPUX 用の) 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 に次のようなコメントがあります。

-- -- 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 の多くの例にも感謝 をしています。