業(yè)務(wù)場(chǎng)景:現(xiàn)在我數(shù)據(jù)庫(kù)有100w數(shù)據(jù),我想全部取出來(lái)進(jìn)行業(yè)務(wù)操作,比如同步es,或者調(diào)用第三方接口檢查狀態(tài)。
問(wèn)題:?jiǎn)芜M(jìn)程去處理這100萬(wàn)數(shù)據(jù)顯然很慢,我開10個(gè)進(jìn)程,每個(gè)進(jìn)程處理10萬(wàn)數(shù)據(jù),這樣會(huì)快很多,這樣在webman 中應(yīng)該怎么實(shí)現(xiàn),同時(shí)怎么保證這個(gè)數(shù)據(jù)不會(huì)被重復(fù)執(zhí)行
10個(gè)隊(duì)列,取模分配
我之前在使用symfony框架時(shí),這個(gè)業(yè)務(wù)的實(shí)現(xiàn)方案是,寫個(gè)command ,計(jì)算出數(shù)據(jù)總數(shù)塊id所在區(qū)間,fork 10個(gè)子進(jìn)程,并把id區(qū)間傳遞給子進(jìn)程,由子進(jìn)程對(duì)數(shù)據(jù)進(jìn)行處理,處理完銷毀子進(jìn)程,當(dāng)然id不連續(xù)會(huì)有問(wèn)題
我想問(wèn)的是webman 啟動(dòng)的時(shí)候啟動(dòng)的子進(jìn)程,能否由這些固定的子進(jìn)程去分塊處理數(shù)據(jù)
public function onWorkerStart($worker) {
echo $worker->id;
}
$worker->id 是進(jìn)程編號(hào),從0開始。每個(gè)進(jìn)程根據(jù)自己編號(hào)執(zhí)行任務(wù)
$worker->id 參考文檔 http://m.wtbis.cn/doc/workerman/worker/workerid.html