Google App Engine数据存储区,如何处理数据不一致?

时间:2015-03-23 19:41:07

标签: java google-app-engine google-cloud-datastore

我正在移植一个简单​​的CRUD休息服务,我意识到数据存储的一致性不是立竿见影的。

目前我发出POST请求以创建实体并获取状态代码202(因为我知道该实体尚未持久化)。 然后GET请求获取创建的实体,如果状态是404我在两秒钟内睡觉,并且我一直请求直到我得到200.

这是处理数据存储最终一致性的可接受方式吗? 我应该在服务器端获得实体之前进行相同的读取操作吗? 还有其他选择吗?

1 个答案:

答案 0 :(得分:2)

为了响应POST而创建实体的服务器端Java代码可以通过其方法Key获取该实体的.getKey()。然后,它使用KeyFactory.keyToString上的Key(请参阅https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/KeyFactory#keyToString(com.google.appengine.api.datastore.Key))获取"网络安全字符串"作为响应的一部分发送给客户的密钥形式。

然后,客户端GET可以包含"网络安全字符串"并且服务器可以使用Key再次生成KeyFactory.stringToKey对象。

最后但并非最不重要的是,datastore.get(key)实例上的DataStoreService,请参阅https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/DatastoreService,返回具有强一致性的相应实体 - 这是& #39;遗憾的是,没有明确记录Java,但是它与Python一样好, 明确记录在https://cloud.google.com/developers/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore/#h.tf76fya5nqk8 ......

所以,通过正确跳舞基于密钥的小步舞曲,你应该没事,而不需要在404s上重试和等待! - )