在專案中,常常都會遇到高並發問題,如在某個時間點有100個人對同一數據進行更改,這樣就會產生問題,最後導致的數據會不准確,通常的解決高並發的方法有讀取數據時加緩存,寫入資料時加入隊列,下面羅列一些處理高並發的常見方法供大家參考。
一、MySQL批次插入最佳化
對於某些資料量較大的系統,資料庫面臨的問題除了查詢效率低下,還有就是資料入庫時間長。特別像報表系統,每天花在資料導入上的時間可能會長達幾個小時或十幾個小時之久。因此,優化資料庫插入效能是很有意義的。
經過MySQL innodb的一些效能測試,發現一些可以提高insert效率的方法,供大家參考。
1.一條SQL語句插入多條資料。
常用的插入語句如:
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0);INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1);
登入後複製
修改成:
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1);
登入後複製
修改後的插入操作能夠提高程式的插入效率。這裡第二種SQL執行效率高的主要原因是合併後日誌量(MySQL的binlog和innodb的事務讓日誌)減少了,降低日誌刷盤的資料量和頻率,進而提高效率。透過合併SQL語句,同時也能減少SQL語句解析的次數,減少網路傳輸的IO。
這裡提供一些測試比較數據,分別是進行單一資料的導入與轉換成一條SQL語句進行導入,分別測試1百、1千、1萬筆資料記錄。
也可以在交易中進行插入處理。