【问题标题】:High replication delete delay in local server本地服务器中的高复制删除延迟
【发布时间】:2013-03-06 02:46:34
【问题描述】:

我使用 Python 和 --high_replication --use_sqlite 编写了这段代码:

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

【问题讨论】:

    标签: python google-app-engine python-2.7 webapp2 app-engine-ndb


    【解决方案1】:

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

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

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

    【讨论】:

    • 作为一种俗气但可能足够好的解决方法,您可以将最后一行更改为 self.redirect_to('products?but_do_not_show=%s' % id) 之类的内容,然后制作该参数工作。
    • 查看我的 Edit1 评论。这有意义吗?
    • devappserver2 有这个参数,datastore_consistency_policy。这可能仍然发生在 apppot 中,有时它足够快以至于它随机发生。开发服务器会强制解决问题,以便您妥善处理。
    • 嗨,Brian,感谢您提及 --datastore_consistency_policy。不幸的是,这没有记录在案。
    猜你喜欢
    • 2019-10-09
    • 2015-12-04
    • 2014-04-09
    • 2018-07-12
    • 2021-04-29
    • 2017-09-19
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多