使用memcache限制对数据库的写入量

时间:2011-03-07 16:12:48

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

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

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

但是我希望能够使用新的留言簿条目直接更新内存缓存,然后每隔30秒将所有更改写入批量放置。()。

有没有人有一个如何实现上述目标的例子?它会真的帮助我!

谢谢:)

3 个答案:

答案 0 :(得分:6)

这是丢失数据的方法。我很难相信留言簿会导致写入活动成为问题。此外,由于memcache无法搜索,因此涉及此项的簿记会很棘手。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

Memcache是​​一个易变的存储器,用于存储有价值的数据,如留言簿条目;请记住,例如,在内存不足的情况下,可以驱逐内存缓存数据。

如果您的留言簿流量很大而您正在编写数据存储区超时/争用,请尝试使用速率限制taskqueue的其他方法来减慢对数据存储区的写入次数。

  1. 让用户编译留言簿条目
  2. 通过deferred
  3. 将每个数据条目传递到速率限制的任务队列
  4. 写入数据存储区
  5. 您可以使用以下内容放宽对queue.yaml中定义低费率执行的数据存储区的写入:

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

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