2010-09-03 47 views
0

我有一個MySQL數據庫產品的價格,從現在開始,我想與這些值同步另一個數據庫,但這個其他數據庫不在我的服務器上,我只能通過web服務更新它...以原子方式調用Web服務?

有沒有辦法讓這兩個操作(更新我的數據庫和調用Web服務的其他數據庫更新)原子?我不想知道某一天,當服務器嘗試調用Web服務來更新它時,第二個數據庫已關閉,因此它不具有與當前數據庫相同的值。順便說一下,我使用的是PHP。

非常感謝。

回答

1

你這些問題的答案可以幫助思考的最佳解決方案 -

  • 是價格更新用本體法?我的意思是一週之內或者某個網站的所有價格都被編輯了,並且批量更改必須在其他服務器上進行(第二個數據庫託管在哪裏)?
  • 或者是像個別價格可以編輯和相同的變化對任取兩個效應或沒有(如果第2個服務器關閉)?

  • 你想做些什麼的情況下做第二個服務器壞了,回滾第一臺服務器上的變化?

如果Web服務提供迴應 - 無論是否成功更新其產品價格,事情都非常簡單。這裏是使其顯得原子的一種方式 -

  • 有兩個領域 - price_backup並在所有項目的價格都存儲在表lock_item
  • 開始於更新處理之前,設置lock_item = true,使得項目不能在該時間期間(以防止inconsistensies)購買。
  • 更新第一個數據庫中的價格字段,將價格保留在price_backup字段中,然後調用Web服務來更新並檢查響應。
  • 如果響應是假的,恢復該項目的價格與價值price_backup和復位lock_item,或者乾脆復位鎖定。

該方法確保跨服務器相同的值。但是,可能會有更好的方法