Как мне кэшировать различия в данных для произвольных временных различий (веб-сервис Java) - PullRequest
0 голосов
/ 06 января 2012

У меня есть Java Webserivce, который запрашивает БД для возврата данных пользователям.Запросы к БД дороги, поэтому у меня есть задание Cron, которое выполняется каждые 60 секунд для кэширования текущих данных в memcached.Элементы данных «закрываются» через некоторое время, что означает, что они не возвращаются запросами «получить текущие данные».Таким образом, эти запросы могут использовать кэшированные данные.

Клиенты используют функцию с тех пор, как «все», чтобы получить все данные, которые изменились со времени конкретной отметки времени (отметка времени последнего запроса).Это вернет все закрытые данные, если эти данные будут закрыты в течение этого времени.

Как я могу эффективно хранить данные diffs / Since?Доступ к БД для каждого, так как запрос слишком медленный (и не будет хорошо масштабироваться), но поскольку клиенты могут запрашивать любой со временем, это затрудняет создание универсального кеша.

Я пытался, чтобы задание cron также создавало кэш с тех пор.Он будет выполнять запросы «с тех пор», чтобы иметь все, что изменилось со времени последнего обновления, и пытаться заставить клиентов запрашивать метки времени, которые соответствуют заданию cron с момента запроса.Но несоответствия в том, сколько времени занял cron плюс ни работа с клиентом, ни работа с кукурузой, выполняются ровно каждые 60 секунд, поэтому небольшие различия складываются.В конечном итоге это приводит к закрытию некоторых данных, но кеш или клиент пропускают его.

Я даже не уверен, что искать, чтобы решить эту проблему.

Ответы [ 2 ]

1 голос
/ 25 января 2012

Мне хотелось бы вставить кэш с истекающим временем (например, ehcache с установленным timeToLive) перед базой данных, и какой бы процесс ни обновлял базу данных, также поместите данные непосредственно в кеш (сброс или удаление существующего соответствующего элемента),Затем веб-служба просто запускает кэш (что невероятно быстро) во всем, кроме его первоначального соединения, отфильтровывая несколько устаревших элементов и отправляя остальное клиенту.Постепенно старые данные удаляются из кеша по мере того, как время их жизни проходит.Затем просто убедитесь, что кэш предварительно заполняется при запуске службы.

0 голосов
/ 06 января 2012

Есть ли у ваших данных отметки времени?У нас были подобные проблемы во время кэширования здесь, в моей компании, временные метки решили эту проблему.Вы можете использовать временную метку «Действителен до» со своими данными, чтобы ваш кэш и клиент могли знать, когда данные действительны.

...