2013-09-26 2 views
1

У меня есть процедура SQL, которую я вызываю часто (около 10-25 раз в секунду). Сама процедура очень хорошо оптимизирована, однако для предварительной обработки для этой процедуры требуется конфигурация, основанная на параметрах (возможно несколько тысяч конфигураций). Эта конфигурация также сохраняется в базе данных и изменяется примерно один раз в день до одного раза в месяц.Кэширование конфигурации (Java/MySQL)

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

Есть несколько проблем с этим:

1 - Если изменения конфигурации может занять до 30 минут, чтобы увидеть изменения.

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

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

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

Любые предложения высоко оценили

ответ

0

Как кэш хранится?

В идеале при обновлении конфигурации вы можете запустить очистку кеша. Если кеш хранится и в SQL, то вы можете добавить TRIGGER ON UPDATE вашей таблицы конфигурации.

+0

Кэш только что хранится как объекты java, у них есть несколько строк и целых чисел. Проблема с триггерами заключается в том, что они не могут отменить java. – nikdeapen

+1

Являются ли обновления конфигурации внутри этого приложения Java? Если да, вы можете очистить кеш при событии udating Configuration table. Но я чувствую, что вы обновляете конфигурацию извне приложения Java. – alandarev

+0

Хорошо. Вы можете использовать TRIGGER для выполнения внешней команды с помощью функции FUNCTION. I.e., скажите Java, что кеш был изменен. Хотя я бы классифицировал включение внешнего двоичного файла в качестве грязного хака. С другой стороны, вы могли бы провести отдельную проверку потока для изменения кэша каждые несколько минут. Ни один из них не является удивительным решением. – alandarev

Смежные вопросы