我有一個包含300萬條記錄的數據庫表。一個java線程從表中讀取10,000條記錄並處理它。處理後,它跳到下一個10000,依此類推。爲了加速,我有25個線程完成相同的任務(讀取+處理),然後我有4個物理服務器運行相同的Java程序。所以有效地,我有100個線程做同樣的工作(閱讀+處理)。在多個進程間平均分配數據庫記錄
我使用的策略是有一個SQL過程,抓取下一個10,000條記錄並將它們標記爲由特定線程處理。但是,我注意到線程似乎在等待一段時間,試圖調用該過程並獲得響應。還有什麼其他的策略可以用來加速這個數據選擇過程。
我的數據庫服務器是MySQL和編程語言是Java
我用這種方法可以看到的唯一問題是「寫入」隊列會被卡住。瓶頸處於驅動器的讀/寫週期,我不認爲他能做任何事情。 – 2012-07-16 16:55:08
@Tomasz:使用jms方法,如果消費者由於某些原因而死亡,那麼我將擁有一組不會處理的消息,除非我提供某種額外的檢查機制。用我目前的程序方法,我能夠繞過這種情況。如果一臺服務器出現故障,其餘的服務器將繼續工作並承擔額外的負載。 – prashant 2012-07-16 18:23:52
@prashant:如果您將消費者配置爲事務性消息,如果消費者無法處理某些消息(通過死亡,拋出異常,無論如何),消息代理會將該消息放回隊列中,另一位消費者會將其選中。 – 2012-07-16 18:28:06