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
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26