您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)php mysql中并發(fā)的解決方法的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
php mysql并發(fā)解決的方法:1、一條SQL語句插入多條數(shù)據(jù);2、修改插入語句為“INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`)”。
在項目中,經(jīng)常都會遇到高并發(fā)問題,如在某個時間點(diǎn)有100個人對同一數(shù)據(jù)進(jìn)行更改,這樣就會產(chǎn)生問題,最后導(dǎo)致的數(shù)據(jù)會不準(zhǔn)確,通常的解決高并發(fā)的方法有讀取數(shù)據(jù)時加緩存,寫入數(shù)據(jù)時添加到隊列,下面羅列一些處理高并發(fā)的常見方法供大家參考。
對于一些數(shù)據(jù)量較大的系統(tǒng),數(shù)據(jù)庫面臨的問題除了查詢效率低下,還有就是數(shù)據(jù)入庫時間長。特別像報表系統(tǒng),每天花費(fèi)在數(shù)據(jù)導(dǎo)入上的時間可能會長達(dá)幾個小時或十幾個小時之久。因此,優(yōu)化數(shù)據(jù)庫插入性能是很有意義的。
經(jīng)過對MySQL innodb的一些性能測試,發(fā)現(xiàn)一些可以提高insert效率的方法,供大家參考參考。
1.一條SQL語句插入多條數(shù)據(jù)。
常用的插入語句如:
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執(zhí)行效率高的主要原因是合并后日志量(MySQL的binlog和innodb的事務(wù)讓日志)減少了,降低日志刷盤的數(shù)據(jù)量和頻率,從而提高效率。通過合并SQL語句,同時也能減少SQL語句解析的次數(shù),減少網(wǎng)絡(luò)傳輸?shù)腎O。
這里提供一些測試對比數(shù)據(jù),分別是進(jìn)行單條數(shù)據(jù)的導(dǎo)入與轉(zhuǎn)化成一條SQL語句進(jìn)行導(dǎo)入,分別測試1百、1千、1萬條數(shù)據(jù)記錄。
還可以在事務(wù)中進(jìn)行插入處理。
感謝各位的閱讀!關(guān)于php mysql中并發(fā)的解決方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。