Вопрос

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

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

Спасибо!

РЕДАКТИРОВАТЬ: DB - SQL Server. Запрос - это оператор SELECT. И механизм кэширования очень прост: простая запись, без блокировки. И это потому, что в настоящее время нет способа указать порядок избранных запросов.

Это было полезно?

Решение

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

Таким образом, в каждом обновлении также увеличивает глобальный счетчик. На каждом чтении прочитайте глобальный счетчик и поместите данные в кэш вместе со значением счетчика. Перезапись содержимое кэша, если значение счетчика больше.

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

Другие советы

Где кеш? Это файл диска? Или таблица в базе данных?

И что это значит, когда вы говорите, что более старый запрос может перезаписать более новый? Разве это не правда, что наиболее заполненный запрос (или, может быть, самый начальный)-самый новый?

Вы должны заблокировать контейнер кеша перед выполнением каждого запроса, будь то файл или таблица. Каждый сервер должен выполнить запрос только в том случае, если он может получить блокировку, в противном случае он должен ждать заблокированного ресурса. Таким образом, кэш будет содержать только самые последние результаты.

Это вроде того, что вы спрашиваете?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top