Как работать с кэшированием результатов SQL-запросов - PullRequest
2 голосов
/ 23 июня 2010

В программе на Perl я кэширую результат запроса SQL для ускорения работы программы.

Я вижу два распространенных способа сделать это:

  • Создать хеш, используя запрос в качестве индекса для кэширования результата, как предложено здесь
  • Создать хеш с индексом, кроме 2, первый - это список используемой таблицы, второй - это пункт где

Сегодня я использовал 2-й вариант, потому что кэш для данного набора таблиц легче очищать, когда вы знаете, что они были изменены.

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

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

Как с этим бороться? Моя текущая система кеширования довольно проста, Cache :: Memcached :: Fast довольно сложен. У вас есть решение, которое было бы более эффективным, чем мое, но все же довольно простое?

1 Ответ

1 голос
/ 23 июня 2010

Один из подходов, которые я использую для кэширования данных, которые вряд ли могут измениться (например, данные конфигурации), заключается в использовании мемоизации через превосходный модуль Memoize .Я обертываю SQL-запрос в функцию, в которой я передаю параметры связывания и имя таблицы, и запоминаю эту функцию.

use Memoize;

sub get_config_for_foo
{
     my ($table, $field1, $field2) @_;

     # generate my sql query here, using table, field1 and field2...

     return $result;

}
memoize(get_config_for_foo);

Вы также можете использовать стратегию кэширования в memcache или что-то подобное;проверьте Tie :: Cache :: LRU для хорошей реализации для этого.

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