2010-02-07 66 views
2

我正在運行mySql服務器,每4小時更新一次。 可以檢索數據的意思。併發mySql數據庫查詢

mySql是否處理數據庫正在更新的此場景 並收到用戶的查詢?

或者我應該處理這種情況? 是否可以在更新發生之前創建數據庫快照 並查詢此數據庫?

感謝

回答

0

如果你擔心併發寫入的處理方式,這是一兩件事,但你可以安全地從正被另一個線程更新,而不必擔心損壞的數據MySQL數據庫讀取。

當然,如果寫入線程正在執行需要原子化的多個寫入(即全部或無),請確保他正在使用事務。

+0

只有1個寫線程可用其中每4個小時。 寫入線程從數據庫中提取所有記錄。 爲每個記錄:它執行一些任務,並用新的接收數據更新記錄。 所以有可能記錄我正在更新,擁有記錄我的用戶試圖從中獲取數據。 所以我會讀更多關於交易。 是否有可能在PHP中分離線程之間的工作? 我的意思是每個記錄的任務需要10秒,對於演出問題,我儘管分割工作。 – embedded

+0

「,因此記錄i有更新的可能性,擁有記錄i的用戶會嘗試從中獲取數據。」 - 這不應該對你造成任何問題。假設您正在使用事務來寫入數據,則用戶將在更新之前或之後查看數據庫的視圖,具體取決於接收查詢的順序。如果讀入後跟着寫入,則不能指示數據庫延遲讀取直到寫入完成,但不應該因爲用戶正在獲取有效的數據視圖而需要。 – danben

+0

Re:PHP線程,沒有這種東西。您需要分叉多個進程。有關示例,請參見http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html。 – danben

0

您可以使用事務和/或鎖定來確保每個用戶都看到一致的視圖(即完全更新或根本不更新)。數據庫引擎本身非常適合這種情況。如果你不擔心讀者在確切的時間看到更新正在運行,你不需要做任何事情。

0

考慮到我的情況,我認爲不需要進一步的操作。 如果寫入之前讀取用戶將得到最新的數據 否則它不會,他會等待下一個查詢。

這符合我的要求。

謝謝大家

+0

如果任何發佈的問題的答案幫助你達成了你的結論,那麼通常是禮貌的接受和接受它們。這也有助於其他讀者找到有用的信息。 – danben