2
我目前正在構建一個運行計算的系統,並且每5秒鐘將基於這些計算的信息插入或更新到MySQL中的幾行。我正努力在幾個不同的服務器上立即運行這個系統,並使用幾個代理進行類似的處理,然後寫入同一行。我已經隨機化了每個代理程序寫入其行集的順序,但仍然有很多死鎖發生。通過這些僵局最好/最快的方式是什麼?我應該在每次發生問題時重新運行查詢,還是進行行鎖定或其他操作?如何並行化寫入MySQL中的同一行?
我目前正在構建一個運行計算的系統,並且每5秒鐘將基於這些計算的信息插入或更新到MySQL中的幾行。我正努力在幾個不同的服務器上立即運行這個系統,並使用幾個代理進行類似的處理,然後寫入同一行。我已經隨機化了每個代理程序寫入其行集的順序,但仍然有很多死鎖發生。通過這些僵局最好/最快的方式是什麼?我應該在每次發生問題時重新運行查詢,還是進行行鎖定或其他操作?如何並行化寫入MySQL中的同一行?
我建議你嘗試一些不需要多個客戶端來更新你的「少數幾行」。
例如,您可以讓每個產生結果的代理使用MEMORY訪問方法對登臺表執行INSERT
。
然後,每5秒鐘可以運行一個MySQL事件(服務器內的存儲過程),循環遍歷該表中的所有行,將結果發佈到「少數行」,然後刪除它們。如果按照順序處理登臺表中的行很重要,那麼可以使用AUTO_INCREMENT標識字段。但對他們來說可能並不重要。
如果您想獲得更出色的可擴展性,那麼您需要像Apache ActiveMQ這樣的隊列管理系統。
隨機化不是一個好方法。行級鎖和處理分配行的中央仲裁器將是更好的方法。 –
鏈接到如何設置類似的信息? – Eli