Oracle Spatial分區應用研究之二:按縣分區與按省分區對比測試報告
-
1、實驗目的
在上一輪的實驗中,oracle 11g r2版本下,在87縣市實驗數據的基礎上,比較了分表與分區的效率,得出了分區+全局索引效率較高的結論(見上一篇博客)。不過我們尚未比較過不同的分區粒度有什麽效率差異。這一輪的實驗,著重於以下幾個目的:
- 使實驗場景更接近真實使用場景——使用oracle 12c,用更大的數據量進行實驗。
- 對比分析按縣分區與按省分區的查詢效率。
- 繼續比較本地空間索引與全局空間索引在不同算法下的查詢效率。
-
2、實驗數據
實驗數據為全國2531個區縣,要素總數為46982394。根據不同的數據組織+索引形式,形成了3個不同的實驗主體:
- 按縣分區+本地空間索引
- 按縣分區+全局空間索引
- 按省分區+本地空間索引
-
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種算法來進行查詢運算。另外,因為算法執行有先後順序,後執行的算法由於緩存的原因,會比先執行的算法有優勢。為了盡量避免這種幹擾,會將算法以不同的執行順序進行兩組實驗。
-
4、實驗結果
-
4.1 第一組實驗結果
-
第一組實驗,其算法執行順序為:
Part_query→Part_query2→Part_query3→Part_query_p→Part_query2_p→Part_query3_p
執行結果如下圖:
說明:表中藍色區域為按縣分區+本地空間索引在不同比例尺、不同算法下的查詢效率;同理,紅色區域代表按縣分區+全局空間索引,綠色區域代表按省分區+本地空間索引。黃色斑塊表示該行的最小值。
根據黃色斑塊坐落的位置,可知:
- 在所有比例尺下,按省分區+本地空間索引效率最高,所有耗時最小的查詢均發生在該區域。
- Part_query_p算法的查詢效率最高,18個實驗樣本,耗時最小命中17次。
-
4.2 第二組實驗結果
第二組實驗,其算法執行順序為:
Part_query_p→Part_query2_p→Part_query3_p→Part_query→Part_query2→Part_query3
執行結果如下圖:
根據黃色斑塊坐落的位置,可知:
- 在所有比例尺下,按省分區+本地空間索引效率最高,所有耗時最小的查詢均發生在該區域。
- Part_query算法的查詢效率最高,18個實驗樣本,耗時最小命中18次。
-
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在小比例尺下命中率較高。這與我們的認知一致,即在大任務作業時,並行才會體現優勢。
-
5、實驗結論
- Oracle 12c環境下,在要素量為四千萬級別時,按省分區+本地空間索引效率較高。
- 采用按省分區+本地空間數據組織方式時,Part_query算法較為高效。
(未完待續)
Oracle Spatial分區應用研究之二:按縣分區與按省分區對比測試報告