1. 背景
項(xiàng)目中有1000萬條歷史案卷,為某地方坐標(biāo)系數(shù)據(jù),現(xiàn)在需要將其轉(zhuǎn)換成百度坐標(biāo)系數(shù)據(jù)。常規(guī)方案是先建立好整個(gè)該市的本地坐標(biāo)和百度坐標(biāo)之間的控制點(diǎn)庫后再進(jìn)行轉(zhuǎn)換。但是在具體實(shí)施中發(fā)現(xiàn)轉(zhuǎn)換特別慢,由于控制點(diǎn)庫也有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)庫獲取該坐標(biāo)對(duì)應(yīng)的四角坐標(biāo)的坐標(biāo)值,然后再根據(jù)算法轉(zhuǎn)換。
最明顯的瓶頸將出現(xiàn)在:
a.從歷史案卷中獲取坐標(biāo)的時(shí)間。
b.從控制點(diǎn)庫中獲取到兩條記錄(左上角控制點(diǎn)對(duì),右下角控制點(diǎn)對(duì))的時(shí)間。
可以想象,每次遍歷完整控制點(diǎn)庫是最消耗效率的地方。所以這里將采用對(duì)控制點(diǎn)庫進(jìn)行分庫的優(yōu)化方法。具體思路為,將控制點(diǎn)庫按照每隔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)庫分成了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
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26