gpt4 book ai didi

google-app-engine - Google App Engine : close . put() 和 .get() 竞争条件?

转载 作者:行者123 更新时间:2023-12-02 06:20:30 27 4
gpt4 key购买 nike

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

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

SELECT * FROM entityName
WHERE someThing = 'value'
ORDER BY votes DESC, lastTouchedTimestamp DESC

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

对 GAE 很陌生,如果我忽略了一些简单的事情,我们深表歉意。

编辑/添加:

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

最佳答案

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

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

关于google-app-engine - Google App Engine : close . put() 和 .get() 竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11065636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com