我一直在尝试使用GAE(1.7.0)几周,而且我遇到了STRONG一致性问题。
我一直在研究这个问题,但我仍然不清楚。
是否有人能够肯定地说,如果在GAE中使用JDO,那么一致性将是EVENTUAL。
实现STRONG constancy的唯一方法是不使用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>
由于
答案 0 :(得分:0)
我不认为通过在jdoconfig.xml文件中将datastoreReadConsistency指定为STRONG可以确保一致性。
Google App Engine的高复制数据存储(HRD)现在是App Engine应用程序的默认数据存储库。保证此模型仅适用于最终的一致性。
您提到的内容是正确的,并且根据文档说明“要获得强一致的查询结果,您需要使用祖先查询将结果限制为单个实体组。”
请参阅注释:https://developers.google.com/appengine/docs/java/datastore/structuring_for_strong_consistency