【问题标题】:Google App Engine JDO and Strong ConsistancyGoogle App Engine JDO 和强一致性
【发布时间】:2012-07-24 12:16:24
【问题描述】:

我已经用 GAE (1.7.0) 试验了几个星期,但我在 STRONG 一致性方面遇到了一些问题。

我一直在研究这个问题,但我仍然不清楚。

是否有人能够肯定地说,如果在 GAE 中使用 JDO,那么一致性将是 EVENTUAL。

实现 STRONG 一致性的唯一方法是不使用 JDO,而是将 GAE 实体类与 Ancestry 一起使用。

在这个阶段,我不知道是我的代码有问题还是环境不支持。无论如何,我正在失去我脆弱的小头脑:-)

我的 jdoconfig.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">

<persistence-manager-factory name="transactions-optional">
  <property name="javax.jdo.PersistenceManagerFactoryClass"
    value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
  <property name="javax.jdo.option.ConnectionURL" value="appengine"/>
  <property name="javax.jdo.option.NontransactionalRead" value="true"/>
  <property name="javax.jdo.option.NontransactionalWrite" value="true"/>
  <property name="javax.jdo.option.RetainValues" value="true"/>
  <property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
  <property name="datanucleus.appengine.datastoreReadConsistency" value="STRONG" />
</persistence-manager-factory>

谢谢

【问题讨论】:

    标签: google-app-engine jdo datanucleus


    【解决方案1】:

    我认为您不能通过在 jdoconfig.xml 文件中将 datastoreReadConsistency 指定为 STRONG 来确保一致性。

    Google App Engine 的 High Replication Datastore (HRD) 现在是 App Engine 应用程序的默认数据存储库。保证此模型仅适用于最终的一致性。

    您提到的是正确的,并且根据文档,该文档指出“要获得高度一致的查询结果,您需要使用祖先查询将结果限制为单个实体组。”

    见注释:https://developers.google.com/appengine/docs/java/datastore/structuring_for_strong_consistency

    【讨论】:

    • 确实,Google 的 JDO/JPA 插件(当然是当前版本,不是用户使用的)在某些情况下会进行祖先查询
    • 看来我需要去进一步调查。我知道objectify,有没有人有其他的建议?
    猜你喜欢
    • 2013-01-11
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2011-12-28
    • 2011-06-19
    相关资源
    最近更新 更多