PHP+Mysql高併發解決

在項目中,常常都會遇到高併發問題,如在某個時間點有100我的對同一數據進行更改,這樣就會產生問題,最後致使的數據會不許確,一般的解決高併發的方法有讀取數據時加緩存,寫入數據時添加到隊列,下面羅列一些處理高併發的常見方法供你們參考。php

1、MySQL批量插入優化

對於一些數據量較大的系統,數據庫面臨的問題除了查詢效率低下,還有就是數據入庫時間長。特別像報表系統,天天花費在數據導入上的時間可能會長達幾個小時或十幾個小時之久。所以,優化數據庫插入性能是頗有意義的。
通過對MySQL innodb的一些性能測試,發現一些能夠提升insert效率的方法,供你們參考參考。mysql

  1. 一條SQL語句插入多條數據。
    經常使用的插入語句如:redis

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);

修改爲:sql

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萬條數據記錄。數據庫

clipboard.png

還能夠在事務中進行插入處理。
更多詳情,請看原文章:MySQL批量SQL插入性能優化segmentfault


相關文章:
【高併發簡單解決方案】redis隊列緩存 + mysql 批量入庫 + php離線整合
秒殺活動設計方案緩存

相關文章
相關標籤/搜索