масштабируемость memcached и эффективная статистика голосования - PullRequest
0 голосов
/ 24 сентября 2010

Насколько масштабируема memcache в среде, где кэш потенциально истекает каждую секунду.На самом деле, мой вопрос касается не только масштабируемости memcached, но и ситуаций, когда модель постоянно меняется, и лучшего способа масштабирования среды такого типа.Кто-то может сказать, зачем кешировать, если кеш истекает каждую секунду.

Рассмотрим это в гипотетическом приложении, где люди публикуют пометки как избранные, и давайте просто посмотрим, что тысячи людей постоянно помечают сообщения как избранныеи создание любимой записи в результате.При каждой вставке представление поста должно обновляться, чтобы отображать текущую статистику о постах, количество людей, которые сделали его фаворитом, число фаворитов пользователя и т. Д.каждые х много минут ... но есть ли хороший способ сделать это более реальным временем в рельсах?

1 Ответ

0 голосов
/ 24 сентября 2010

Попробуйте такой алгоритм:

  1. Обновление записей БД для сообщения с +1 голосом
  2. Создать значение кэша || обновить существующий кеш +1 для количества постов
  3. Создать значение кэша || обновить существующий кэш +1 для счетчика избранного пользователя

Поскольку в кеше нет транзакций, значения могут не соответствовать текущим значениям БД. может возникнуть редкое параллельное чтение и запись. Но эти несоответствия исчезнут, как только запись в кеше станет недействительной, а значения будут пересчитаны из БД.

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

Наиболее важным здесь является то, что пользователи видят изменение значения в реальном времени для голосования. Стоимость чтения / записи Memcached здесь определенно меньше, чем у DB, потому что memcache - это просто хэш-хранилище с множественным доступом без транзакций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...