具有事务的GAE高复制数据存储(HRD)

时间:2012-02-19 01:50:17

标签: java google-app-engine transactions

我正在使用HRD,因为我希望使用实体组对单个事务中的多个实体进行更改。

了解非事务性(非祖先)查询可能会查看先前已提交事务的全部,部分或全部结果。

我现在面临的问题是: 提交事务以将新记录添加到db

之后
  Transaction tx = pm.currentTransaction();
  tx.begin();
  pm.makePersistent(object);
  tx.commit();
  • 跟随查询提交的记录,有时它会返回结果,有些时候只返回为空

      Query q = pm.newQuery(queryStatement);        
      CompanyProfile result = (CompanyProfile) q.execute();
    

p / s:当关闭HRD时,它完美地工作。

任何解决方法?

由于 RGDS SJ

3 个答案:

答案 0 :(得分:1)

没有办法解决它:HRD总是最终保持一致:http://code.google.com/appengine/docs/python/datastore/queries.html#Setting_the_Read_Policy_and_Datastore_Call_Deadline

一种方法是使用get而不是查询。获取/放置/删除在HRD中非常一致,而查询最终是一致的:http://code.google.com/appengine/docs/java/datastore/hr/

如果这是一个用户会话中的立即查询后保存方案,您可以查询数据并手动将已保存的实体添加到列表中。

答案 1 :(得分:0)

如果您想使用关系数据库模型,您可能需要查看Google Cloud SQL:https://developers.google.com/cloud-sql/我自己没有尝试过,但我在我的应用中没有使用任何交易。< / p>

我肯定不会使用旧的非HR数据存储区。如果它在接下来的一两年结束时消失,我不会感到惊讶。它并不像HR数据存储那样可靠。但正如您所发现的那样,如果您不习惯,最终的一致性可能会非常棘手。

答案 2 :(得分:0)

如果以下查询也在同一事务中完成,则应返回正确的结果。但是,所有其他查询最终都是一致的,不幸的是数据存储区的性质。