第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

大家對PHP多進程與MySQL的高并發(fā)瓶頸是怎么處理的

大家對PHP多進程與MySQL的高并發(fā)瓶頸是怎么處理的

函數(shù)式編程 2019-04-08 11:16:42
需求我每天執(zhí)行一個定時任務(wù),把一個具有千萬條數(shù)據(jù)的日志分割成一些小的日志文件;然后啟動多個PHP進程,分別對這些小日志文件中的每行數(shù)據(jù)進行處理,處理過程是這樣的:每個PHP進程從各自負(fù)責(zé)的日志文件中逐行讀取,然后根據(jù)該行中的一個標(biāo)識去數(shù)據(jù)庫中查找是否有了該記錄,如果沒有則插入該行,如果已經(jīng)存在了就更新(該行的數(shù)據(jù)與數(shù)據(jù)庫中的數(shù)據(jù)進行合并);引發(fā)的問題這樣就出現(xiàn)了一個問題,就是可能存在多個PHP進程對同一條數(shù)據(jù)都在做處理,如果用Mysql鎖機制可以避免這個問題,但是這樣的話,就出現(xiàn)另一個問題,就是MySQL的高并發(fā)瓶頸,因為我是多個PHP進程同時在進行,一個進程要等待另一個進程解鎖后,才能操作數(shù)據(jù)庫。這樣我前面所做的分割日志、啟動多個進程這些操作就失去意義了,因為我在前面做日志分析時,啟的進程再多,運行的再快,到最后全都會卡在高并發(fā)操作數(shù)據(jù)庫這個瓶頸上,不知道大家對這類問題是怎么處理的?
查看完整描述

2 回答

?
Cats萌萌

TA貢獻1805條經(jīng)驗 獲得超9個贊

寫過類似的東西,像這種需要多次更新同一賬號數(shù)據(jù)的時候,我們的做法是處理完數(shù)據(jù)后不立即存入mysql,
而是放在了redis中,后面的數(shù)據(jù)更新都在redis修改,
在redis積累了數(shù)千條數(shù)據(jù)后在異步的寫一次數(shù)據(jù)到mysql,效果不錯
鹵煮的場景多進程處理建議只負(fù)責(zé)數(shù)據(jù)處理,處理完的放redis,在單獨用一個腳本定時檢測redis
達(dá)到條件的時候(一定條數(shù)或時間)存一次數(shù)據(jù)到mysql
                            
查看完整回答
反對 回復(fù) 2019-04-08
?
偶然的你

TA貢獻1841條經(jīng)驗 獲得超3個贊

上面的兩種方法都可行
建主鍵索引,使用upsert語句是最便捷的解決方法。如上@felix021大神所言。
另外,使用緩存(Memcache或者redis)異步寫入數(shù)據(jù)也不錯,只是開發(fā)代價要高一些。
                            
查看完整回答
反對 回復(fù) 2019-04-08
  • 2 回答
  • 0 關(guān)注
  • 350 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號