天天看點

WebGIS中基于控制點庫進行SHP資料坐标轉換的一種查詢優化政策

目前項目中基于控制點庫進行SHP資料的坐标轉換,流程大緻為:周遊圖層要素,擷取每個要素的坐标串,查詢控制點庫,分别進行坐标轉換,建構新的要素,最後建構新的圖層。此方法效率如下:

a.控制點庫有100W個控制點對。

b.待轉換SHP資料有5K個面要素。

轉換完畢大概需要120分鐘。

此效率是相對較低的,如果想對更多包含大量要素的圖層組資料進行批量轉換,耗時會成倍增長。這裡,我們進行了一些列優化探索。

以上方法,耗時最多的是大表查詢,即在控制點庫中查詢對應參考坐标。

對大表查詢有很多種優化政策,比如将大表改成多個小表,根據業務建立相關索引等等。這裡我們一起探讨另外一種方法,流程圖如下:

WebGIS中基于控制點庫進行SHP資料坐标轉換的一種查詢優化政策

該思路的核心為:周遊獲得單個feature後,便根據該feature的extent建立包含局部資訊的視圖,減少不必要的全表查詢。

最後結果測試為:

轉換完畢大概需要5分鐘。

以上方法是利用視圖來進行查詢優化,但是每個視圖建立完後還需要控制代碼銷毀。這個過程會影響效率。

臨時表分為了會話臨時表和事務臨時表。

會話臨時表是指:該臨時表肯定與會話有關。會話在不退出時,則些臨時表中的資料存在,會話退出,該臨時表中的資料也會随之消失。并且,在多使用者操作的情況下,一個會話從來不阻塞另一個會話使用臨時表。即使鎖定臨時表,一個會話也不會阻塞其他會話使用臨時表。

事務臨時表是指:該臨時表與事務相關,當進行事務送出或者事務復原的時候,臨時表中的資料将自行被截斷。

根據業務需求,這裡選用事務臨時表,主要利用其事務結束後會自動将資料做TRUNCATE的功能。

事務臨時表的建構規則如下:

Create global temporary table table_name

(col1 type1, col2 type2 …)

On commit delete rows;

使用事務臨時表進行改造後,測試結果如下:

轉換完畢大概需要2.5分鐘。

這裡的核心思想還是進行大表改小表,不過将小表設計為臨時表,此種方法在過濾查詢資料時效果十分明顯。

繼續閱讀