Google app engine 应用引擎数据存储不一致?
这太奇怪了 首先,该查询在数据存储查看器中工作,即返回正确的行Google app engine 应用引擎数据存储不一致?,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,这太奇怪了 首先,该查询在数据存储查看器中工作,即返回正确的行 SELECT * FROM Level where short_id = 'Ec71eN' 但是如果我运行这个 Level.all().filter("short_id = ", 'Ec71eN').get() 如果我运行以下命令,它将返回None: db.GqlQuery("SELECT * FROM Level where short_id = '%s'" % 'Ec71eN').get() level = Level.g
SELECT * FROM Level where short_id = 'Ec71eN'
但是如果我运行这个
Level.all().filter("short_id = ", 'Ec71eN').get()
如果我运行以下命令,它将返回None:
db.GqlQuery("SELECT * FROM Level where short_id = '%s'" % 'Ec71eN').get()
level = Level.get_by_id(189009)
它还返回None。如果我运行这个:
db.GqlQuery("SELECT * FROM Level where short_id = '%s'" % 'Ec71eN').get()
level = Level.get_by_id(189009)
它返回正确的行(189009是正确行的id)
莫名其妙?这里有什么问题?我以前从未见过这样的东西,它已经在生产中正常工作了至少几个星期。。。我想我现在至少有两个案例从今天开始就不起作用了
更新:这不可能是一个最终一致的问题,因为当我尝试上述操作时,该行已经运行了7个小时。我有两行相同的症状,奇怪的是booth是由相同的用户生成的。我通过上传特殊案例代码手动检查了他们的身份证后,他们“修复”了booth,如:
if short_id==CASE_1_SHORT_ID:
level = Level.get_by_id(CASE_1_ID)
之后,查询照常进行。您是否正在使用HRD?没什么问题。你知道它最终应该是一致的,对吗 查询操作最终是一致的。 按id获取操作完全一致
您描述的是正确的数据存储行为。数据存储查看器操作返回正确的结果有点奇怪,但它可能在数据存储操作中碰到了一个单独的平板电脑。您使用的是HRD吗?没什么问题。你知道它最终应该是一致的,对吗 查询操作最终是一致的。 按id获取操作完全一致
您描述的是正确的数据存储行为。数据存储查看器操作返回正确的结果有点奇怪,但它可能在数据存储操作中碰到了单独的平板电脑。鉴于它是7小时前创建的,“最终一致性”通常需要几秒钟到几分钟。
如果最终的一致性是个问题,请多次运行相同的查询方法,看看是否返回相同的结果。如果它使用相同的方法连续返回相同的结果,那么很可能不是最终的一致性问题。您也应该切换到NDB API来查询数据—它比NDB API好1000倍,Guido也在使用它—所以您知道它很好。NDB是否表现出同样的不一致性 考虑到它是7小时前创建的,“最终一致性”通常需要几秒钟到几分钟。
如果最终的一致性是个问题,请多次运行相同的查询方法,看看是否返回相同的结果。如果它使用相同的方法连续返回相同的结果,那么很可能不是最终的一致性问题。您也应该切换到NDB API来查询数据—它比NDB API好1000倍,Guido也在使用它—所以您知道它很好。NDB是否表现出同样的不一致性 是的,HRD,但此行是在7小时前创建的。没有上限?如果有这样的案例,设计一个系统有点困难。是的,人力资源部,但这一行是7小时前创建的。没有上限?如果有这样的情况,设计一个系统是有点困难的。我不知道NDB API,我一定会研究它。(主要使用java和AppEngine,最近改用python。)我有两个案例至少5-7个小时。Booth在我手动执行get_by_id后“修复”(上传了新版本,带有针对失败的short_id的if语句)。所以这不是EC的事情,这是某种bug。我不知道NDB API,我一定会研究它。(主要使用java和AppEngine,最近改用python。)我有两个案例至少5-7个小时。Booth在我手动执行get_by_id后“修复”(上传了新版本,带有针对失败的short_id的if语句)。所以这不是电子商务,这是某种错误。