LINUX.ORG.RU

in-memory cache


0

0

где можно посмотреть хороший пример реализации алгоритма кэширования объектов (наприемер строки разной длины) с ограничением времени хранения в памяти? можно с использованием хешей или без них...
интересуют реализации на C.
спасибо!

anonymous

> алгоритма кэширования объектов (наприемер строки разной длины) с ограничением времени хранения в памяти? можно с использованием хешей или без них...

Что-то я вдруг, вновь посмотрев на вопрос, перестал его понимать.

Кэшировать можно по ключам (например, по адресу, или по имени), это я понимаю. То есть, объект с именем "вася", например, может быть в памяти, а может оказаться на диске.

А как кэшировать строки произвольной длины, да еще и с использованием хэшей?

Если у меня на входе функции есть строка, то как-то глупо определять, в памяти ее копия, или на диске -- она _и_так_ есть в памяти.

Что имелось в виду?

И на какое время требуется ограничение? CPU? Wall clock? Cache miss events?

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

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

anonymous
()
Ответ на: комментарий от Zulu

смотрел, но как то сильно сложно :) с внешним демоном...

anonymous
()
Ответ на: комментарий от anonymous

anonymous (*) (06.02.2006 16:19:36):

> что непонятного?

Все.

> кэш в памяти.

Ок, на то он и кэш.

> сохраняются строки переменной длины вместе с временем,

Каким? gettimeofday()? clock()? Или в духе IPшного счетчика хопов?

> хеш позволяет быстро находить строку в кэше не траверсируя по всему кэшу.

Для того, чтобы вычислить хеш строки, надо ее иметь в памяти. То есть она _уже_ в памяти, ее не надо подкачивать с диска! Какое это имеет отношение к кышам?

Наверное, речь идет, все-таки, просто о большой коллекции строк, не влезающей в память. То есть для проверки того, встречалась данная строка раньше, или нет. Если так, то это _не_ кэш!

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

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

anonymous
()
Ответ на: комментарий от anonymous

2anonymous (*) (07.02.2006 14:58:48):

> Теперь понятно?

Да.

Конечно, можно такую штуку называть "кэш", по смыслу английского слова cash (наличность) _с_натяжкой_ подходит. Только обычно под словом "кэш" имеется в виду английское слово cache (заначка), что означает совершенно иное.

Если есть желание получить ответ, неплохо бы называть вещи своими именами, или хотя бы объяснять употребляемые термины :)

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

in-memory table с возможностью быстрого поиска и удаления устаревших записей
так пойдет? ответ будет?

anonymous
()
Ответ на: комментарий от anonymous

anonymous (*) (07.02.2006 15:54:31):

> так пойдет? ответ будет?

Так, по крайней мере, _почти_ понятно.

Не совсем понятен критерий "устаревания" -- как я заключаю из _предыдущего_ обсуждения, просто буквально, по часам/календарю (между тем, чаще всего под "устаревшими" понимаются записи, к которым обращались наиболее давно/недавно или наиболее редко/часто).

Если есть желание получить ответ, советую еще раз спросить (поскольку ссылка уже ушла с первой страницы), только не употребляя слова "кэш", он тут совершенно не при чем, и уточнив критерии устаревания.

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

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

напишу с нуля, либо на основе memcached как рекомендовал Zulu... а то замумукаешься объяснять непонятливым

anonymous
()
Ответ на: комментарий от anonymous

anonymous (*) (07.02.2006 19:00:20)

> ...либо на основе memcached как рекомендовал Zulu...

Только учти, что memcached не имеет ни малейшего отношения к тому, что тебе надо.

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

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

anonymous
()
Ответ на: комментарий от anonymous

anonymous (*) (08.02.2006 15:46:12):

> как ни странно, но имеет...

Ну, значит, то, что тебе надо не имеет ни малейшего отношения к тому, что ты мне объяснял :)

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.