GIS海量的儲存和讀取

2021-04-20 12:10:30 字數 2902 閱讀 3401

雖然現在硬體發展很快,記憶體、

cpu等硬體指標都有很大的提高,但要

pc機上處理

gis海量資料,還是顯得比較吃力,而核心問題就在

gis資料的儲存和讀取上,這裡主要涉及到三個子問題:

1,圖元是按怎樣的順序儲存在檔案磁碟中的(抑或是隨機無規律的);

2,對這些圖元建立怎樣的空間索引,這種索引是稀疏的,還是稠密的;

3,讀取資料的策略,比如,採用多執行緒,橫向上,對當前視窗周圍資料進行預讀取,縱向上,對縮放圖層的資料進行預讀取,還要對最不可能訪問的資料,進行淘汰。下面結合

shapefile

檔案,來說明前兩點。

shapefile

檔案通常包含三個檔案:

.shp .shx .dbf

,.shp

儲存了圖元圖形座標資料,

.dbf

儲存了圖元屬性資料,

.shx

儲存了每個圖元記錄在

.shp

檔案中的位置。同時

.shp .shx .dbf

記錄順序是一致的。在

gis中,總體上有兩種類別的查詢: 一、

圖元查屬性,就是通過對圖元

.shp

檔案的查詢,定位到對應的

.dbf

屬性資料記錄。而對

.shp

的查  

詢,需要對圖形建立空間索引,以便加速圖元查詢的速度。確定需要查詢的圖元在

.shp

中的記錄位

置,以確定是第多少條記錄,由於三檔案記錄順序是一致的,同時

.dbf

記錄是等長的,可以迅速通

過計算得到對應的圖元屬性資料所在的位置,讀取屬性資料即可。

二、

屬性查圖元,就是通過對屬性資料的查詢,來定位到地圖上相應的圖形。而對

.dbf

的查詢,為

了加快屬性資料查詢的速度,需要對

.dbf

檔案的相關查詢字段建立索引,比如

b樹索引。返回查詢

到的第多少條記錄或者記錄集合,借助對

.shx

檔案查詢(三個檔案記錄順序是一致的),直接找出

圖形在.shp

檔案中的位置。

通過以上的分析知道,需要額外建立兩個索引:對

.shp

圖形建立的空間索引,對

.dbf

屬性查詢字段建立的索引。這兩個索引既可以動態在記憶體中建立,也可以自己定義檔案格式,物理地把索引給儲存起來,以減少動態建立索引所花費的時間和記憶體開銷。下面重點就

.shp

檔案資料儲存以及相應的空間索引的建立與儲存,做詳細介紹。 一、

.shp

檔案的組織結構和空間索引的結構。

本文採用四叉樹的方式來組織圖元資料,如圖,圖中紅色矩形方框是圖元的

mbr(最小外包矩形),採用改進的四叉樹索引的方式,把每個圖元的

mbr分配到不同的節點上,然後按

hilbert

曲線的排序方式來組織資料,圖元在檔案磁碟上的排列順序如下:

24按這樣的順序(即從葉子節點開始,每採集兩個子節點,就採集乙個父節點,依次迭代上去)把圖元資料一一寫進檔案,所有子節點都是按

hilbert

排列曲線的順序來組織的,這樣就兼顧了空間鄰近的圖元,在物理儲存上也能盡量保持鄰近,同時為了便於對這些資料建立空間稀疏索引,就採用了兩個子節點乙個父節點的儲存順序方式。那具體怎麼建立稀疏空間索引呢?也就是把那棵四叉樹,每個節點換成這樣一種結構(

mbr,對應圖元集合在檔案中迄始位置,圖元集合的個數),稀疏空間索引就建立好了。我們可以把這樣一種索引結構用自己定義的索引檔案給儲存下來,便於以後直接讀取還原。

而對大範圍的海量資料,需要建立大範圍的網格索引,每個網格裡關聯這樣乙個線,面四叉樹索引結構或者點網格索引結構,這裡需要在網格索引的邊界對線,面物件進行裁減,以至於不產生冗餘資料。

在策略上,採用物件池技術,快取最有可能被訪問到的資料,同時採用執行緒池,快取多個執行緒,提高

cpu的工作效率。在橫向,縱向兩個方向上利用後台預讀資料線程來預讀資料,同時,為了保持物件池的大小,還要採取淘汰機制,把最不需要讀取的資料淘汰出物件池。

這樣一種組織方式和索引方式,在

pc機運算海量資料,資源相對稀缺的情況下,只需要把空間索引調入記憶體,記憶體占用也不會太大,而且實現了大資料量的快速訪問,因為空間索引資料量相對較小,資料組織是有規律的,空間索引是稀疏的。

二、屬性資料的索引結構

屬性查圖元,需要建立屬性資料的索引,可以採用基於有限狀態自動機的

trie

結構,建立屬性詞庫,以支援對屬性資料的模糊查詢。

總結:本文從

i/o這一角度,提出了一種新的資料組織與訪問方式,為海量資料快速訪問提供了一條途徑,為了進一步提高效率,把所有圖層合併為乙個檔案,定義新的檔案格式,向量資料的壓縮都是進一步提高效率的重要方面,需要作進一步的考慮。

MDS ResultItem 的儲存和讀取

儲存部分 每乙個resultitem有原始主鍵,在建立索引的時候分配乙個自增的lableindex,作為記錄在索引系統裡的標識。還有有乙個記錄的label 到offset的對映表,存在master檔案的結尾。public bool writeresultitem internalresultitem...

MySql海量資料儲存和優化

mysql 是最流行的關係型資料庫軟體之一,由於其體積小 速度快 開源免費 簡單易用 維護成本低等,在集群架構中易於擴充套件 高可用,因此深受開發者和企業的歡迎。1 mysql體系架構 2 mysql執行機制 3 mysql儲存引擎 儲存引擎在mysql的體系架構中位於第三層,負責mysql中的資料...

檔案儲存和讀取

通過檔案的處理,可以把記憶體中的資料儲存到外存中,實現資料的持久化。一 檔案的儲存 file fp 處理檔案流程 1 開啟檔案 建立乙個從記憶體到磁碟的緩衝區,把內容寫到記憶體中。fopen 2 存資料 把記憶體中的資料對映到磁碟中,實現資料寫入。fprint 3 關閉檔案 fclose 如下 in...