【问题标题】:Limit amount of writes to database using memcache使用 memcache 限制对数据库的写入量
【发布时间】:2011-03-07 16:12:48
【问题描述】:

我正在尝试修改留言簿示例 ​​webapp 以减少数据库写入量。

我想要实现的是将所有留言簿条目加载到我已经完成的内存缓存中。

但是我希望能够使用新的留言簿条目直接更新内存缓存,然后每 30 秒将所有更改作为批处理 put.() 写入数据库。

有没有人举例说明我如何实现上述目标?这对我很有帮助!

谢谢:)

【问题讨论】:

  • 您是最近第二个询问此类问题的人。我认为有一些糟糕的优化课程正在发生。您应该避免进行单独的 put,并尽可能尝试批量 put,但您不应该在未先将其写入数据存储区的情况下将要再次查看的数据放入 memcache。

标签: python google-app-engine caching memcached google-cloud-datastore


【解决方案1】:

这是丢失数据的秘诀。我很难相信留言簿会导致足够的写入活动成为问题。此外,这涉及的簿记会很棘手,因为内存缓存不可搜索。

【讨论】:

    【解决方案2】:

    您要实现的目标称为Write-Behind Caching,通常要以正确的方式实现并不像起初看起来那么容易。据我所知,目前 Python 中没有针对 Memcached/GAE 的现成解决方案,但您可以查看 Stockpyle。它具有Write-Through Caching 的一些基本功能(请参阅 appengine.py 和 memcache.py),因此它可以作为您自己解决方案的基础。

    【讨论】:

      【解决方案3】:

      Memcache 是一种易失性存储器,用于存储有价值的数据,例如留言簿条目;请记住,例如,在内存不足的情况下,memcache 数据可能会被逐出。

      如果您的留言簿具有高流量并且您正在遭受写入数据存储超时/争用,请尝试使用另一种方法,使用速率受限taskqueue 来减慢对数据存储的写入次数。

      1. 让用户编写留言簿条目
      2. 通过deferred 库将每个数据条目传递给速率受限的任务队列
      3. 写入数据存储区

      您可以在queue.yaml 中放宽对数据存储的写入,以定义低速率执行,如下所示:

      queue:
      - name: relaxed-write
        rate: 1/s
        bucket_size: 1
      

      每秒写入一次,您可能会遇到一些零星的超时错误;在这种情况下,任务将再次执行,直到成功为止。

      【讨论】:

        猜你喜欢
        • 2011-07-22
        • 2019-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-18
        • 2016-09-29
        相关资源
        最近更新 更多