業務背景:
有乙個表中存在1億的資料,存著個人資訊(城市、單位、學校等內容),而這些內容在字段中儲存的是json,需要將這些資料分析後,算出這些內容的離散模型,取出top100。
最先的實現方案是批量查出來1w資料,分析後一條條更新,發現更新太慢。隨後做了如下改進,也是總結:
1、先查詢後更新的操作,用mysql考慮 on duplicate key update
但是表中必須有主鍵或者唯一索引
2、大量操作要批量更新,eg:
insert into sina_user_count(name,type,count)
values (?,?,?),(?,?,?),(?,?,?)...
on duplicate key update count=count+values(count)
3、不要拼接字串,要用佔位符「?」,因為儲存內容中有特殊字元,如果拼接sql會遇到異常
4、迴圈中注意清除快取的資料,這是寫了乙個bug
**片段如下:
public void analysis()
} catch (exception e)
}//更新
logger.info(">>>>>>>>>>>>>>>>> update start");
updatecount(comps, 1);
logger.info(">>>>>>>>>>>>>>>>>update end");
//更新最大id和查詢
this.update("update_sina_user_count_max", maxid, countid);
logger.info(">>>>>>>>>>>>>>>>>>>=" + maxid);
list = this.findforlist("query_sina_user_1", maxid, 10000);
logger.info(">>>>>>>>>>>>>>>>>list.size=" + list.size());}}
private void count(mapmap, string key) else
}private void updatecount(mapmap, int type) else
}if (!params.isempty())
//第一版程式沒有此**,導致map越來越大,低階錯誤啊
map.clear();
}
一段分析資料的總結
業務背景 有乙個表中存在1億的資料,存著個人資訊 城市 單位 學校等內容 而這些內容在字段中儲存的是json,需要將這些資料分析後,算出這些內容的離散模型,取出top100。最先的實現方案是批量查出來1w資料,分析後一條條更新,發現更新太慢。隨後做了如下改進,也是總結 1 先查詢後更新的操作,用my...
一段時間的總結
沒有記錄的習慣,可能是因為文筆不好,不會表達,不善於用文字表達出心中的想法,也許是因為忙碌,一直想著向前走,沒有停下來看看的心態,更可能是因為懶吧。大學過了四分之三了,記得應該是就大一的時候寫過一次總結,以後就是一直就這麼過了,經歷就是經歷了,也有記錄的想法但是沒有行動。大學雖然是資訊管理專業但是幾...
一段簡單的ARM彙編分析
假設 段.text首位址為0x8054 錯誤的 示例 text code 32 global start start bl main 1.pc 0x8054,lr 0x0 b main push 2.pc 0x805c,lr 0x8058 bl func1 3.pc 0x8060,lr 0x8058...