1. 背景
項目中有1000萬條歷史案卷,為某地方坐標系數(shù)據(jù),現(xiàn)在需要將其轉(zhuǎn)換成百度坐標系數(shù)據(jù)。常規(guī)方案是先建立好整個該市的本地坐標和百度坐標之間的控制點庫后再進行轉(zhuǎn)換。但是在具體實施中發(fā)現(xiàn)轉(zhuǎn)換特別慢,由于控制點庫也有200多萬條記錄,大概一個點需要一秒鐘才能轉(zhuǎn)換完。
2.將update變成inset關(guān)鍵字段值的優(yōu)化——優(yōu)化1
最開始采用的是坐標轉(zhuǎn)換完后,直接update歷史案卷表。由于update的效率是相對低的,尤其是有一千萬條記錄時,即使對主鍵也做了索引,依然效率不高。這里便采用新建一張空表再insert的方案。同時考慮到不必要的字段太多,數(shù)據(jù)量太大,所以只將歷史案卷的主鍵和坐標insert到新表中的方案進行優(yōu)化。大概一個坐標轉(zhuǎn)完可以是0.9秒左右,有一定提高,但不是特別明顯。
3進行分表的優(yōu)化——優(yōu)化2
原始算法的轉(zhuǎn)換步驟是:先從歷史案卷表中獲取一條記錄,再根據(jù)記錄坐標去控制點庫獲取該坐標對應的四角坐標的坐標值,然后再根據(jù)算法轉(zhuǎn)換。
最明顯的瓶頸將出現(xiàn)在:
a.從歷史案卷中獲取坐標的時間。
b.從控制點庫中獲取到兩條記錄(左上角控制點對,右下角控制點對)的時間。
可以想象,每次遍歷完整控制點庫是最消耗效率的地方。所以這里將采用對控制點庫進行分庫的優(yōu)化方法。具體思路為,將控制點庫按照每隔2萬米,分割成一個獨立的表。當坐標進行轉(zhuǎn)換時,首先算出坐標落在哪個控制點表中,然后查詢該表進行轉(zhuǎn)換。
現(xiàn)在測試將控制點庫分成了16個表,效率提高到一秒鐘可以轉(zhuǎn)換5個點,大概也就是0.2秒轉(zhuǎn)換一個。可以預見如果分更多表效率將更大的提高。不過考慮到避免數(shù)據(jù)太過碎片化不利于管理。這里將再進行分區(qū)的優(yōu)化嘗試。