1. 程式人生 > >Oracle Spatial分區應用研究之二:按縣分區與按省分區對比測試報告

Oracle Spatial分區應用研究之二:按縣分區與按省分區對比測試報告

oracle 出了 ali 明顯 基礎上 實驗方法 樣本 空間查詢 使用場景

  1. 1、實驗目的

在上一輪的實驗中,oracle 11g r2版本下,在87縣市實驗數據的基礎上,比較了分表與分區的效率,得出了分區+全局索引效率較高的結論(見上一篇博客)。不過我們尚未比較過不同的分區粒度有什麽效率差異。這一輪的實驗,著重於以下幾個目的:

  1. 使實驗場景更接近真實使用場景——使用oracle 12c,用更大的數據量進行實驗。
  2. 對比分析按縣分區與按省分區的查詢效率。
  3. 繼續比較本地空間索引與全局空間索引在不同算法下的查詢效率。
  1. 2、實驗數據

實驗數據為全國2531個區縣,要素總數為46982394。根據不同的數據組織+索引形式,形成了3個不同的實驗主體:

  • 分區+本地空間索引
  • 分區+全局空間索引
  • 分區+本地空間索引
  1. 3、實驗方法

在1:500、1:2000、1:10000、1:25000、1:50000、1:100000比例尺下,隨機從全國範圍內選擇3個樣本範圍,作為空間查詢時的查詢範圍。將6*3個樣本範圍分別與3個實驗主體進行空間查詢運算,記錄每次查詢的耗時。

空間查詢所用的算法仍然同於上一篇博客《Oracle Spatial分區應用研究之一:分表與分區性能對比》中介紹的、適用於分區的3種算法,即part_query、part_query2、part_query3。同時,本次實驗中,還將通過並行框架對3種算法進行衍生,得到另外3種算法,標記為part_query_p、part_query2_p、part_query3_p。

因此,對每一個實驗主體來說,在每一種比例尺樣本下均需要用6種算法來進行查詢運算。另外,因為算法執行有先後順序,後執行的算法由於緩存的原因,會比先執行的算法有優勢。為了盡量避免這種幹擾,會將算法以不同的執行順序進行兩組實驗。

  1. 4、實驗結果

    1. 4.1 第一組實驗結果

第一組實驗,其算法執行順序為:

Part_queryPart_query2Part_query3Part_query_pPart_query2_pPart_query3_p

執行結果如下圖:

說明:表中藍色區域為按縣分區+本地空間索引在不同比例尺、不同算法下的查詢效率;同理,紅色區域代表按縣分區+全局空間索引,綠色區域代表按省分區+本地空間索引。黃色斑塊表示該行的最小值。

技術分享圖片

根據黃色斑塊坐落的位置,可知:

  1. 在所有比例尺下,按省分區+本地空間索引效率最高,所有耗時最小的查詢均發生在該區域。
  2. Part_query_p算法的查詢效率最高,18個實驗樣本,耗時最小命中17次。
  1. 4.2 第二組實驗結果

第二組實驗,其算法執行順序為:

Part_query_pPart_query2_pPart_query3_pPart_queryPart_query2Part_query3

執行結果如下圖:

技術分享圖片

根據黃色斑塊坐落的位置,可知:

  1. 在所有比例尺下,按省分區+本地空間索引效率最高,所有耗時最小的查詢均發生在該區域。
  2. Part_query算法的查詢效率最高,18個實驗樣本,耗時最小命中18次。
  1. 4.3 補充說明

兩種實驗,分別得出Part_query_p與Part_query算法效率最高的結論。這看似矛盾,實際上正是上文提到的,當算法執行有先後順序時,會受到緩存的原因。那麽對於Part_query_p與Part_query,誰的效率更高呢?

在兩組實驗中,Part_query_p與Part_query分別是最先執行的算法。分別從兩組實驗結果中取出Part_query_p與Part_query的實驗數據,就可幾乎完全排除緩存的影響。

技術分享圖片

兩種算法,各命中9次。說明效率相當。但很明顯的是,part_query在大比例尺下(大於1:25000)命中率較高;part_query_p在小比例尺下命中率較高。這與我們的認知一致,即在大任務作業時,並行才會體現優勢。

  1. 5、實驗結論

    1. Oracle 12c環境下,在要素量為四千萬級別時,按省分區+本地空間索引效率較高。
    2. 采用按省分區+本地空間數據組織方式時,Part_query算法較為高效。

(未完待續)

Oracle Spatial分區應用研究之二:按縣分區與按省分區對比測試報告