Как часто Memcache в Google AppEngine теряет данные? - PullRequest
8 голосов
/ 16 апреля 2010

Memcache в целом и в AppEngine в частности ненадежен в том смысле, что мои данные могут быть удалены из кэша по любой причине в любой момент времени. Однако в некоторых случаях могут быть случаи, когда небольшой риск может стоить дополнительной производительности, которую может дать использование memcache, например обновление некоторых данных в memcache, которые периодически сохраняются, в другое, более надежное хранилище. Есть ли какие-либо числа от Google, которые могли бы дать мне указание на фактическую вероятность того, что запись memcache будет потеряна из кэша до истечения срока ее действия, учитывая, что я соблюдаю свои квоты?

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

Ответы [ 4 ]

5 голосов
/ 16 апреля 2010

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

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

Если вы не настраиваете и не используете кеш самостоятельно, у вас НЕТ гарантии, когда и как элементы могут быть намеренно / намеренно удалены из кеша.

2 голосов
/ 16 апреля 2010

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

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

Если вас беспокоит нагрузка на обычное задание, как насчет настройки задания для последующего обновления счетчика с использованием очереди заданий?

2 голосов
/ 16 апреля 2010

Любой конкретный ответ, который вы получите на этот вопрос, может быть изменен на 100%.

Тем не менее, я использовал memcache при небольших нагрузках, чтобы накапливать данные в течение 15 минут или около того, прежде чем записать все это в хранилище данных. Это было для совершенно некритических аналитических данных. Не зависит от этого.

0 голосов
/ 25 августа 2016

Я реализовал счетчик статистики shared -memcache, который ежечасно собирает данные в БД и может идентифицировать потерю кэша (зарегистрировать его). До сих пор я наблюдаю постоянно <10% потерь кеша каждый день после максимум 1 ч (в среднем 30 мин) времени кеша примерно с 60 активными счетчиками. Встречные потери кажутся случайными одиночными счетчиками. Я подозреваю, что счетчики, которые увеличиваются только один раз (встречается довольно часто в моем случае), могут иметь более высокую вероятность сброса. </p>

Мое приложение использует общий кэш-память <1MB в общей системе memcache. К сожалению, использование выделенной памяти memcache с минимальным объемом 1 ГБ и существенными затратами в год не может быть и речи. <a href="https://stackoverflow.com/questions/38930966/designing-an-access-web-statistics-counter-module-for-appengine"> Используется счетчик статистики .

Я создал счетчик стековых драйверов, который записывает потери памяти кэша для счетчика, который сохраняется каждый полный час. График показывает успешное сохранение красным, а memcache - синим. Счетчик сохраняет каждый полный час и имеет несколько отсчетов в час.

Memcache loss (blue) vs. success (red)

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