App引擎数据存储不一致?

时间:2013-03-06 18:53:26

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

这太奇怪了......

首先,此查询在数据存储区查看器中工作,即。它返回正确的行。

SELECT * FROM Level where short_id = 'Ec71eN'

但如果我跑这个

Level.all().filter("short_id = ", 'Ec71eN').get()

如果我执行此操作,则返回

db.GqlQuery("SELECT * FROM Level where short_id = '%s'" % 'Ec71eN').get()

它还会返回。如果我运行这个:

level = Level.get_by_id(189009)

它返回正确的行(189009是正确行的ID)

困惑?这可能有什么不对?我以前从未见过这样的东西,它在生产中至少工作了几周...我认为我现在至少有两个案例从今天开始起作用。


更新:这不是一个最终一致的问题,因为当我尝试上述时,该行是7个小时。我有两排症状相同,奇怪的是由同一个用户生成的摊位。在我通过上传特殊案例代码(例如:

)完成其ID的手动操作之后,展位“固定”了
if short_id==CASE_1_SHORT_ID: 
     level = Level.get_by_id(CASE_1_ID)

之后,查询正常工作。

2 个答案:

答案 0 :(得分:4)

您使用的是HRD吗?没错。你知道它应该最终是正确的吗?

查询操作最终是一致的。 Get-by-id操作完全一致。

您描述的是正确的数据存储行为。数据存储区查看器操作返回正确的结果有点奇怪,但它可能在数据存储区操作中遇到了单独的平板电脑。

答案 1 :(得分:1)

鉴于它是在7小时前创建的,最终的一致性' 通常应该花费几秒到几分钟。 如果最终的一致性是问题,请多次运行相同的查询方法,看看是否返回相同的结果。如果它使用相同的方法连续返回相同的结果,那么很可能不是最终的一致性问题。您应该切换到NDB API以便查询数据 - 它已经好了1000倍,而Guido也在使用它 - 所以你知道它很好。 NDB是否显示相同的不一致性?