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).

伯克利的範例 裡面有一個該方法的概述並且演示了用於 2D 方形,多邊形,整形(時間)間隔 和純文字(text)的空間的索機制(參閱 GiST at Berkeley).。在方形的範例裡,我們可以預見到使用 GiST 索引時的性能提升﹔ 在我的機器上它的確是這樣的,但是我沒有很多的方形記錄來檢驗它. 其他範例同樣工作了,除了多邊形(polygONs):我在執行下面命令時收到一個錯誤

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的使用者(linux==gcc?)們 獲取上面原始的查詢代碼並且打上我寫的補丁(見附件),然後告訴我你使用後的看法. 看起來我挺酷,可我不想一直幹下去,因為我知道有很多人比我更合適.

這些來源碼的幾個註釋:

1. 我用原始的 Makefile (HP-UX)沒能成功, 所以我重新編排了一下來自古老的 postgres95 教學的 Makefile 幹這事. 我試圖讓它幹淨些,但是我寫的 makefile 實在差勁 --只能幹點兒基本的工作. 對這一點很抱歉,但我想現在的 makefile 比原來的可移植性會好一點.

2. 我直接在 pgsql/src 裡寫了樣例代碼(只要在那裡解開 tar 文件). 上面說的 Makefile 假設代碼在 pgsql/src 下面的一級 (我們的環境裡,在 pgsql/src/pggist 裡).

3.我對 *.c 文件的修改都是關於 #include,函數原形和類型轉換的. 除此之外, 我只是扔掉了一堆沒有用的變數和加了幾個 圓括號來令 gcc 易於分析.我希望我沒有把事情搞得太糟糕 :)

4. 在 polyproc.sql 裡有個註釋:

-- -- there's a memory leak in RTREE poly_ops!!
-- -- CREATE INDEX pix2 ON polytmp USING RTREE (p poly_ops);

記住這些!我想它可能影響好一些老的 PostgreSQL 版本,然後試一下查詢. 我的系統在大約十分鐘內就不行了,然後我只有宕掉 postmaster.

我會繼續關注 GiST 一陣幾,但我同樣也對 R-tree 的使用的範例感興趣.