【问题标题】:Can a write to the datastore fail?写入数据存储会失败吗?
【发布时间】:2015-04-20 06:52:03
【问题描述】:

假设我正在创建一个这样的实体:

Answer answer = new Answer(this, question, optionId);
ofy().save().entity(answer);

是否应该检查写入过程是否成功?

假设我想做另一个动作(增加一个计数器),我应该做一个交易,包括写入过程吗?

还有,如何检查写入过程是否成功?

【问题讨论】:

  • 让您的 write 方法在成功时返回 true,或者返回新的 id。
  • Here 是官方文档中关于数据存储写入的重要链接。
  • @Stultuske 这是一个内置方法,你无法控制它

标签: java google-app-engine objectify


【解决方案1】:

保存时出错会产生异常。请记住,由于您没有调用now(),因此您已经启动了异步操作,并且在会话关闭时(例如,请求结束)可能会发生实际异常。

是的,如果你想增加一个计数器,你需要启动一个包含加载、增加和保存的事务。还要记住,即使成功,事务也有可能重试,因此天真的事务可能会多计。如果您需要严格精确的增量,则该模式要复杂得多。所有数据库都会遇到这个问题的一些变化。

【讨论】:

  • 写入过程中的异常有多罕见?你遇到过吗?
  • 当然可以,虽然现在很少见(HRD 非常可靠)。请记住,您可能会意外制造会导致问题的情况(例如单个实体组的激烈争用)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 2012-11-09
相关资源
最近更新 更多