| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 48. GiST 索引 | Fast Forward | Next |
通常,實現一種新的索引訪問方法意味著大量的艱苦工作。我們必須理解資料庫 的內部工作機制,比如鎖的機制和預寫日誌。GiST 接口有 一個高層的抽像,只要求訪問方法的實現者實現被訪問的資料類型的語意。 GiST 層本身會處理並發,日誌和搜索樹結構的任務。
我們不要把這個擴展性和其它標準搜索樹的擴展性混淆在一起,比如它們所能處理的 資料等方面。比如,PostgreSQL 支援可以擴展的 B+-trees 和 R-trees。這就意味著呢可以用 PostgreSQL 在任意您需要的資料類型上建立 B+-tree 或者 R-tree。但是 B+-trees 只支援範圍謂詞 ((<,=,>), 而 R-trees 只支援 n-D (n-維)範圍查詢(包含,被包含,相等)。
所以,如果您用 PostgreSQL B+-tree 索引了一個圖像 集,那麼您就只能發出類似"圖像 x 和 圖像 y 相等嗎", "圖像 x 是不是比圖像 y 小" 和 "圖像 x 是否大於圖像 y"?這樣的查詢。 根據您在這個環境下定義的"等於","小於","大於" 的含義,上面這些查詢可能有意義。但是,使用一個基於 GiST 的索引, 您可以建立一些方法來發出和域相關的問題,比如"找出所有馬的圖像" 或者"找出所有曝光過頭的圖像"。
要讓一種 GiST 訪問模式跑起來的方法只是實現七個用戶定義 的方法,這七個方法定義了樹裡面的鍵字的行為。當然,為了支援那些怪異的查詢,這些方法 也會相當怪異,但是對於所有標準的查詢(B+-trees,R-trees 等),他們是相當直接的。 簡單說,GiST 組合了擴展性和通用性,以及代碼復用和一個乾淨的界面。