1. 背景

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

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

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

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

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

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

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

b.從控制點(diǎn)庫(kù)中獲取到兩條記錄(左上角控制點(diǎn)對(duì),右下角控制點(diǎn)對(duì))的時(shí)間。

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

 

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

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

網(wǎng)友評(píng)論