Шаблон справочных данных

Похож на этот поток, но не совсем так: как кэшировать информацию в безопасном режиме

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

Будет ли это, как правило, единичный элемент, который я мог бы добавить с помощью DAO, и, таким образом, смог бы управлять собственным содержимым? Мне нравится идея выставления метода refresh() в этом сервисе, который будет вызывать обновление (т. Е. Через MBean - поэтому мне не придется отказов приложения).

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

Мне нравится идея, что одноэтапная служба внедряется либо с реальным DAO, который загружает данные из базы данных, либо с mock/test-double, который возвращает жестко закодированный ответ. Однако, если бы я реализовал сервис как одиночный с помощью java enum, это сделало бы его подключение через Spring более проблематичным.

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

1 ответ

Решение

Обычно я внедряю реализацию DAO в свой сервисный уровень с помощью Spring и, как вы упоминаете, часто имеет тестовую реализацию (XMLDao, FlatFileDao) в дополнение к моей реализации на основе SQL. Для небольших наборов данных я обычно пишу свой собственный кэш и сохраняю все данные, загруженные из базовой таблицы (таблиц), в память.

Сказав все это, я имею преимущество работы с достаточно маленькими наборами данных. Если бы я имел дело с большим набором данных, я мог бы рассмотреть готовые решения для кэширования, возможно, распределенные по нескольким JVM (например, Terracotta).

Как я упоминал в предыдущем потоке, я также предоставляю метод refresh(). В случаях, когда обновления данных не должны распространяться своевременно, я просто вызываю это вручную через MBean. В ситуациях, когда я хочу автоматизировать это, я использовал Tibrv для прослушивания обновлений из базы данных и обновления кэшированных данных (используя триггер MS-SQL для генерации сообщения Tibrv).

Я не совсем понимаю вашу ссылку на использование перечислений Java для реализации сервиса. Как это будет работать?

Другие вопросы по тегам