2012-03-31 48 views
0

我有一個簡單的腳本,可以從遠程MySQL服務器一次抽取100萬個結果,每次100萬,並更新我的本地數據庫。遠程服務器不在我的控制之下,因此無法進行自動更新的某種主/從設置。這需要幾個小時才能正常執行,但我意識到從遠程服務器獲取結果的代碼部分以及更新本地條目的代碼部分需要大致相同的時間執行。因此,理論上,如果我在更新本地條目時從遠程服務器獲取下一批行,則可以將執行時間縮短近一半。我已經在PHP中看到了用於並行數據庫查詢的一些示例代碼(例如,問題322275),但我想不出讓它在我的腳本中使用foreach更新循環的方式。這是可能的PHP中,或者我會更好的做這是像Python或Ruby的另一種語言(雖然我沒有任何經驗)?並行執行從屬數據庫查詢

編輯:此外,遠程服務器是世界各地的一半,所以網絡延遲相當高。

示例代碼:

for ($i = 0; $i < 100; $i++) 
{ 
    $min = $i * LIMIT; 
    $max = ($i + 1) * LIMIT; 

    $updates = $db_remote->fetchAll("SELECT * FROM table_name WHERE content_id >= $min AND content_id < $max"); // Pull 1 million results from the remote SQL server 

    foreach ($updates as $u) 
    { 
     $db_local->update("UPDATE table_name SET ... WHERE content_id = $u['content_id'] LIMIT 1"); // Update each of the local entries 
    } 
} 
+0

mysqlnd的異步API似乎非常實驗性。如果您使用* NIX,只需分叉,這可能會更簡單。 – netcoder 2012-03-31 21:38:52

回答

相關問題