Entry tags:
(no subject)
Вопрос для программистов:
Предположим, у нас имеется некий кеш, который должен содержать произвольные данные. Данные имеют срок годности, для каждой единицы данных разный, который определяется клиентом. Есть два способа общаться с таким кешем:
1. Когда что-то кладется в кеш, клиент говорит срок годности (возьми А и держи 5 минут)
2. Когда что-то берется из кеша, клиент говорит срок годности (дай мне А не старше 5 минут)
Есть ли какие-то причины предпочитать один из этих способов другому, и если да, то какие?
no subject
Я что-то не понимаю
Re: Я что-то не понимаю
Но в реальных задачах просить за 100 лет не будут - времена в обоих случаях будут сходные.
В первом можно убирать, но на самом деле не очень нужно - т.е. задачи, чтобы в кеше не было "старых" данных, нет - не будет, хорошо, будет - тоже не очень страшно.
no subject
Очистка может состоять в выкидывании суб-кеша -5-0 в урну :)
Разумеется, надо думать как именно разбить на суб-кеши -- даже наверное построить график распределения объектов по времени протухания.
no subject
Суб-кеши - это слишком сложно, больше времени уйдет на их управление, чем от них пользы будет, боюсь.
no subject
В случае, если скорость реакции кеша действительно супер-важна, отсечение ненужных кеш-деревьев из леса ускоряет поиск.
Другими словами нужно больше данных о том, как это должно работать :) Но лично мне кажется что от некоей уборщицы в кеше не убежать, значит будет логичнее хранить дату прокисания документа, чтобы минимализировать "а мы его пять минут назад убили" (скорость же важна) и как-то организовать очистку с пристрелом на нужды клиента (например очистка будет бить объекты когда время поиска в кеше подбирается к критическому).
Если лень писать самому то есть штуки типа EHCache, в которых и политики выселения запомненных элементов есть, и прочие мелкие нужности.
no subject
Если природой запросов, то 2.
Из эстетических хотя бы соображений. Не говоря о том, что во втором случае первое решение может не работать (не всегда срок годности данных известен при их кешировании).
no subject
no subject
no subject
вполне конкретным критериям.
предположим у нас в кеше есть данные которые запрашиваются часто, живут недолго, получить свежие мы может достаточно быстро и дешево. и другие которые должны жить долго,
запрашиваются несколько меньше но их свежая копия нам стоит дорого. при втором способе кешь не знает какие данные уже не актуальны, он всегда будет вынужден выбирать из "свежих"
поэтому может получится что будут удалены "дорогие" данные.
вообще второй способ вполне можно скомбинировать с первым, т.е данные в кеш имеют с ttl который указывается при store, но клиент может при запросе указать "свежесть" данных.
таким образом для разных данных можно получить разные политики комбинируя разные параметры.
P.S тут http://www.hpl.hp.com/techreports/1999/HPL-1999-69.html про cache policy для squid, может что для себя найдете полезного.
no subject
Если использовать второй вариант, то на поиск данных клиентом уйдет времени больше чем при первом варианте, так как при поиске будет потрачено время на перелопачивание устаревшего материала.
Можно сделать промежуточный вариант где функция очистки не нужна для экономии ресурсов. Когда новые данные поступают в кеш, то он пролистывается с самого начала, находятся первые устаревшие данные и новые данные записываются поверх них. Таким образом каждое новое вхождение данных в кеш освобождает одну устаревшую ячейку. А дальше пользователь просит данные не старше времени икс. Тем самым немного, по сравнению со вторым вариантом, уменьшается время поиска, по сравнению с первым вариантом, немного уменьшается затраты на обслуживание временной-очищающей функции, однако немного повышаются системные затраты на запись данных в кеш. Что лучше - хрен его знает. ;)