我正在移植一个简单的CRUD休息服务,我意识到数据存储的一致性不是立竿见影的。
目前我发出POST请求以创建实体并获取状态代码202(因为我知道该实体尚未持久化)。 然后GET请求获取创建的实体,如果状态是404我在两秒钟内睡觉,并且我一直请求直到我得到200.
这是处理数据存储最终一致性的可接受方式吗? 我应该在服务器端获得实体之前进行相同的读取操作吗? 还有其他选择吗?
答案 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上重试和等待! - )