2012-02-06 28 views
1

我需要以不會被多個併發用戶做同樣事情的方式來更新數據存儲區實體。
我知道我不能使用SQL來更新數據存儲,但我不確定還有什麼可以工作。如何在Go中執行更新? (Google App Engine)

這是我將如何使用SQL實現它在RDBMS:

-- Account.Balance = current balance 
-- Account.Rate  = increase per second 
-- Account.CheckDate = the last time the balance was checked and updated 

-- so we need to find the number of seconds since the last check, 
-- update the balance by rate*seconds, then update the check datetime 

UPDATE Account 
SET  Account.Balance = Account.Balance + (DATEDIFF(S, GETDATE(), Account.CheckDate) * Account.Rate), 
      Account.CheckDate = GETDATE() 

我知道我可以在單個事務中完成所有操作,但如何確保更新是不是因爲失算沒有使用像SQL顯示的單個更新操作的多個用戶?
你或許可以看到一些操作,如:

1. Read entity 
2. Update values 
3. Save entity 

可能因爲幾個用戶做同樣的事情

我猜測有幾種可能的方式來實現這一點,我在尋找失敗最適合這個和未來要求的那個。

================== ANSWER ==================

當我到了這個我意識到只要我同時更新餘額和支票日期,一切都會好起來的。 併發更新不會破壞任何東西:)

但我想我會發布它呢!

我還是高興地看到,雖然更好的解決方案...

+1

嗨bukko!在SO上,您最好單獨發佈您的答案,而不是更新問題。如果您滿意,也可以將自己的答案標記爲已接受。祝你有美好的一天! – Ski 2012-02-06 14:58:18

+0

當然 - 抱歉,在下面發佈答案! – CompanyDroneFromSector7G 2012-02-06 15:37:02

回答

0

我的解決方案如下:

我最終意識到,只要我更新的平衡,並在同一時間檢查日期,所有會沒事的。併發更新不會破壞任何東西:)

但我想我會發布它呢!

我還是高興地看到,雖然更好的解決方案...