如何在Go中进行更新?(Google App Engine)

我需要以一种不会被多个并发用户做相同事情的方式破坏的方式更新数据存储实体。

我了解我无法使用SQL来更新数据存储区,但是我不确定还有其他方法可以工作。


这是我将在使用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

可能由于多个用户执行相同的操作而失败


我猜想有几种可能的方法可以实现这一目标,我正在寻找一种最能满足当前和未来需求的方法。


==================答案==================


当我达到这一点时,我意识到只要同时更新余额和支票日期,一切都会好起来的。并发更新不会破坏任何东西:)


但是我以为我还是会发布它!


我仍然很高兴看到更好的解决方案...


蝴蝶不菲
浏览 247回答 2
2回答

湖上湖

事务可用于原子执行一系列数据存储操作。

小怪兽爱吃肉

我的解决方案如下:我最终意识到,只要我同时更新余额和支票日期,一切都会好起来的。并发更新不会破坏任何东西:)但是我以为我还是会发布它!我仍然很高兴看到更好的解决方案...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go