PostGIS教程二十 索引集群

2021-09-11 16:17:48 字數 2211 閱讀 5703

目錄

一、r-tree上的集群

二、geohash上的集群

三、函式列表

資料庫只能以從磁碟獲取資訊的速度檢索資訊。小型資料庫將完全浮動於ram快取,並擺脫物理磁碟限制。但是對於大型資料庫,對物理磁碟的訪問將限制資訊檢索速度。

資料是偶爾寫入磁碟的,因此儲存在磁碟上的有序資料與應用程式訪問或組織該資料的方式之間不需要存在任何關聯。

加速資料訪問的一種方法是確保可能在同一結果集中一起檢索的記錄位於硬碟上的相似物理位置。這就是所謂的"集群clustering)"。

要使用正確的集群方案可能很棘手,但可以遵循一條一般規則:索引定義了資料的自然排序方案,該方案類似於檢索資料的訪問模式。

正因為如此,在某些情況下,以與索引相同的順序對磁碟上的資料進行排序可以加速資料訪問速度。

空間資料傾向於在客戶端的視窗中訪問:想想web應用程式或桌面應用程式中的地圖視窗。視窗中的所有資料都具有相似的位置資訊(否則它們將不在相同的視窗中!)。

因此,基於空間索引的集群對於將通過空間查詢訪問的空間資料是有意義的:相似的事物往往具有相似的位置(地理學第一定律)。

讓我們根據nyc_census_blocks的空間索引對該錶資料進行集群:

該命令按照空間索引nyc_census_blocks_geom_idx所定義的順序重新寫入nyc_census_blocks。你能感覺到訪問資料的速度的差異嗎?可能不會,因為表很小,很容易裝入記憶體,所以磁碟訪問開銷不會影響效能。

r-tree的乙個令人驚訝的地方是,基於空間資料而遞增構建的r-tree可能沒有很高的葉節點(每個葉節點對應乙個區域和乙個磁碟頁)的空間協調性(spatial coherence)。例如,請參見不列顛哥倫比亞省道路索引的空間索引葉節點的視覺化。

我們更喜歡使用空間更均衡緊湊、排列合理的r-tree索引結構進行集群,比如這種平衡的r-tree(balanced r-tree)。

我們在postgis中沒有平衡r-tree的演算法,但我們有乙個有用的代替方法,可以將空間資料進行空間自相關順序排列,即st_geohash()函式。

要使用st_geohash()函式進行集群,首先需要在資料上有乙個geohash索引。幸運的是,它們很容易構建。

geohash演算法僅適用於地理(經度/緯度)座標中的資料,因此我們需要在對其進行雜湊操作之前先轉換幾何圖形**換為epsg:4326,即經度/緯度)。

一旦有了geohash索引,就可以使用和r-tree集群相同的語法進行集群。

現在,資料就很好地以空間相關的順序排列!

PostGIS教程二十一 3 D

目錄 一 3 d幾何圖形 二 3 d函式 三 n d索引 注意 本節介紹許多postgis2.0及更高版本才支援的功能。到目前為止,我們一直在處理2 d幾何圖形 二維幾何圖形 只有x和y座標。但是postgis支援所有幾何圖形型別額外的維度,對於每個座標,另外還能支援用於表示高度資訊的 z 維度以及...

PostGIS教程二 PostGIS的安裝

目錄 二 安裝postgresql 三 安裝postgis 在安裝postgis前首先必須安裝postgresql,然後在安裝好的stack builder中選擇安裝postgis元件。這裡使用的postgresql版本是9.6。安裝postgresql安裝完成後,提示執行stack builder...

PostGIS教程二 PostGIS的安裝

目錄 二 安裝postgresql 三 安裝postgis 在安裝postgis前首先必須安裝postgresql,然後在安裝好的stack builder中選擇安裝postgis元件。這裡使用的postgresql版本是9.6。安裝postgresql安裝完成後,提示執行stack builder...