January 2026

S M T W T F S
     123
4 5678 910
11 12 1314151617
18 192021222324
25262728293031

Style Credit

Expand Cut Tags

No cut tags
Monday, June 4th, 2007 05:38 pm

Вопрос для программистов:

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

1. Когда что-то кладется в кеш, клиент говорит срок годности (возьми А и держи 5 минут)
2. Когда что-то берется из кеша, клиент говорит срок годности (дай мне А не старше 5 минут)

Есть ли какие-то причины предпочитать один из этих способов другому, и если да, то какие?
Tuesday, June 5th, 2007 07:52 pm (UTC)
При варианте номер раз кеш не будет перегружен старыми данными, что уменьшит время поиска в нем. Однако надо будет заводить и привязывать функцию очитски от времени, а это означает, что функция должна постоянно работать и вычищать устаревшие данные, что тоже съест чуток системных ресурсов.

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

Можно сделать промежуточный вариант где функция очистки не нужна для экономии ресурсов. Когда новые данные поступают в кеш, то он пролистывается с самого начала, находятся первые устаревшие данные и новые данные записываются поверх них. Таким образом каждое новое вхождение данных в кеш освобождает одну устаревшую ячейку. А дальше пользователь просит данные не старше времени икс. Тем самым немного, по сравнению со вторым вариантом, уменьшается время поиска, по сравнению с первым вариантом, немного уменьшается затраты на обслуживание временной-очищающей функции, однако немного повышаются системные затраты на запись данных в кеш. Что лучше - хрен его знает. ;)