1

我使用带有 --high_replication --use_sqlite 的 Python 编写了这段代码:

def delete(self, id):
    product = Product.get_by_id(long(id))
    if product is None:
        self.session.add_flash('Product could not be found', level='error')
        self.redirect_to('products')
    else:
        product.key.delete()
        self.session.add_flash('Product is deleted')
        self.redirect_to('products')

删除后,我重定向到“产品”页面,该页面基本上是一个查询所有产品并显示它们的页面。

我发现的唯一一件事是它也显示已删除的记录。当我刷新“产品”页面时,记录就消失了。

其他人是否也面临这个问题,我能做些什么吗?


编辑1:

我只在本地看到这种行为,在生产基础设施上并非如此。我过去使用以下 jvm arg 为 Java sdk 解决了这个问题:

-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

Python sdk 是否有类似的东西来模拟您希望应用程序在本地看到的最终一致性的数量?

请参阅https://developers.google.com/appengine/docs/java/tools/devserver

4

1 回答 1

2

您所看到的是开发服务器模拟的 HRD 数据存储的最终一致性行为。

https://developers.google.com/appengine/docs/python/datastore/queries#Data_Consistency

在最终一致性查询中,用于收集结果的索引也以最终一致性访问。因此,此类查询有时可能会返回不再匹配原始查询条件的实体,而强一致性查询始终在事务上是一致的。

于 2013-03-17T22:45:53.853 回答