Ограничить количество записей в базу данных, используя memcache - PullRequest
2 голосов
/ 07 марта 2011

Я пытаюсь изменить пример веб-приложения гостевой книги, чтобы уменьшить количество записей в базу данных.

Я пытаюсь загрузить все записи гостевой книги в memcache, что я и сделал.

Однако я хочу иметь возможность напрямую обновлять кэш памяти новыми записями в гостевой книге, а затем записывать все изменения в базу данных в виде пакетной операции. () Каждые 30 секунд.

Кто-нибудь получил пример того, как я мог достичь вышеупомянутого? это действительно помогло бы мне!

Спасибо:)

Ответы [ 3 ]

6 голосов
/ 07 марта 2011

Это рецепт потерянных данных. Мне трудно поверить, что гостевая книга вызывает достаточно много писательской активности, чтобы быть проблемой. Кроме того, бухгалтерия, связанная с этим, была бы сложной, так как memcache не доступен для поиска.

2 голосов
/ 07 марта 2011

То, что вы пытаетесь достичь, называется Кэширование с обратной записью , и обычно это не так просто реализовать правильно, как кажется на первый взгляд. Насколько я знаю, на данный момент в Python нет готовых решений для Memcached / GAE, но вы можете взглянуть на Stockpyle . Он имеет некоторые базовые функции для сквозного кэширования (см. Appengine.py и memcache.py), поэтому он может служить основой для вашего собственного решения.

1 голос
/ 07 марта 2011

Memcache - это такое энергозависимое хранилище для хранения ценных данных, таких как записи в гостевой книге; помните, что данные memcache могут быть удалены, например, в случае нехватки памяти.

Если в вашей гостевой книге большой трафик, и вы страдаете из-за тайм-аутов / конфликтов записи в хранилище данных, попробуйте другой подход, использующий ограниченную скорость taskqueue , чтобы замедлить количество операций записи в хранилище данных.

  1. Позволяет пользователю скомпилировать записи в гостевой книге
  2. Передайте каждую запись данных в очередь задач с ограниченной скоростью через deferred library
  3. Написать в хранилище данных

Вы можете ослабить запись в хранилище данных, определяя низкоскоростное выполнение в вашем queue.yaml, примерно так:

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

При одной записи в секунду вы, вероятно, получите некоторые случайные ошибки тайм-аута; в этом случае задание будет выполняться снова до тех пор, пока оно не будет успешно выполнено.

...