Google App Engine:关闭.put()和.get()竞争条件?

Gar*_*ley 2 google-app-engine google-cloud-datastore

我通过entity.put()将一些数据放入数据存储区,然后很快通过.get()从数据存储区读取(获取包含刚刚放置的实体的数据).

.get()数据是正确的,但通常它的顺序没有意义:

SELECT * FROM entityName
WHERE someThing = 'value'
ORDER BY votes DESC, lastTouchedTimestamp DESC
Run Code Online (Sandbox Code Playgroud)

将返回正确的实体(更新为包含上述.put()中的新数据)但是顺序不正确(即投票和/或lastTouchedTimestamp实际上不按顺序)

非常新的GAE很抱歉,如果我有一些简单的事情我会忽略.

编辑/添加:

每个实体都有一个整数投票.SELECT应按照投票顺序返回实体,如:10,8,7,7,1,但有时会返回例如10,7,8,7,1.

Gui*_*sum 6

你所描述的是App Engine术语而不是 .get()调用而是查询.正确的.get()调用指定一个键,不受此种族的影响.(也不是祖先查询.)有关此主题的更多背景信息,请阅读https://developers.google.com/appengine/docs/python/datastore/overview#Datastore_Writes_and_Data_Visibility

你很幸运,你在查询结果中得到了更新的实体 - 这是因为在.put()调用仍然匹配查询之前存在的实体.您在实体中获得了正确的值,因为按键访问查询结果(提到的@tesdal的投影查询除外); 但是你得到了错误的排序,因为排序来自索引.