为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
蝴蝶不菲 2021-04-25 13:15:50
我需要以一种不会被多个并发用户做相同事情的方式破坏的方式更新数据存储实体。我了解我无法使用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 datetimeUPDATE    AccountSET       Account.Balance = Account.Balance + ( DATEDIFF(S, GETDATE(), Account.CheckDate) * Account.Rate),          Account.CheckDate = GETDATE()我知道我可以将所有操作包装在一个事务中,但是如果不使用显示的SQL这样的单个更新操作,如何确保更新不会由于多个用户而导致计算错误呢?您可能会看到一些操作,例如:1. Read entity2. Update values3. Save entity可能由于多个用户执行相同的操作而失败我猜想有几种可能的方法可以实现这一目标,我正在寻找一种最能满足当前和未来需求的方法。==================答案==================当我达到这一点时,我意识到只要同时更新余额和支票日期,一切都会好起来的。并发更新不会破坏任何东西:)但是我以为我还是会发布它!我仍然很高兴看到更好的解决方案...
查看完整描述

2 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

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


查看完整回答
反对 回复 2021-05-10
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

我的解决方案如下:

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

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

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


查看完整回答
反对 回复 2021-05-10
  • 2 回答
  • 0 关注
  • 246 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信