1. 背景

項目中有1000萬條歷史案卷,為某地方坐標(biāo)系數(shù)據(jù),現(xiàn)在需要將其轉(zhuǎn)換成百度坐標(biāo)系數(shù)據(jù)。常規(guī)方案是先建立好整個該市的本地坐標(biāo)和百度坐標(biāo)之間的控制點庫后再進(jìn)行轉(zhuǎn)換。但是在具體實施中發(fā)現(xiàn)轉(zhuǎn)換特別慢,由于控制點庫也有200多萬條記錄,大概一個點需要一秒鐘才能轉(zhuǎn)換完。

2.將update變成inset關(guān)鍵字段值的優(yōu)化——優(yōu)化1

最開始采用的是坐標(biāo)轉(zhuǎn)換完后,直接update歷史案卷表。由于update的效率是相對低的,尤其是有一千萬條記錄時,即使對主鍵也做了索引,依然效率不高。這里便采用新建一張空表再insert的方案。同時考慮到不必要的字段太多,數(shù)據(jù)量太大,所以只將歷史案卷的主鍵和坐標(biāo)insert到新表中的方案進(jìn)行優(yōu)化。大概一個坐標(biāo)轉(zhuǎn)完可以是0.9秒左右,有一定提高,但不是特別明顯。

3進(jìn)行分表的優(yōu)化——優(yōu)化2

原始算法的轉(zhuǎn)換步驟是:先從歷史案卷表中獲取一條記錄,再根據(jù)記錄坐標(biāo)去控制點庫獲取該坐標(biāo)對應(yīng)的四角坐標(biāo)的坐標(biāo)值,然后再根據(jù)算法轉(zhuǎn)換。

最明顯的瓶頸將出現(xiàn)在:

a.從歷史案卷中獲取坐標(biāo)的時間。

b.從控制點庫中獲取到兩條記錄(左上角控制點對,右下角控制點對)的時間。

可以想象,每次遍歷完整控制點庫是最消耗效率的地方。所以這里將采用對控制點庫進(jìn)行分庫的優(yōu)化方法。具體思路為,將控制點庫按照每隔2萬米,分割成一個獨立的表。當(dāng)坐標(biāo)進(jìn)行轉(zhuǎn)換時,首先算出坐標(biāo)落在哪個控制點表中,然后查詢該表進(jìn)行轉(zhuǎn)換。

 

現(xiàn)在測試將控制點庫分成了16個表,效率提高到一秒鐘可以轉(zhuǎn)換5個點,大概也就是0.2秒轉(zhuǎn)換一個??梢灶A(yù)見如果分更多表效率將更大的提高。不過考慮到避免數(shù)據(jù)太過碎片化不利于管理。這里將再進(jìn)行分區(qū)的優(yōu)化嘗試。

4.進(jìn)行分區(qū)的優(yōu)化——優(yōu)化3

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式