2009-07-06 4 views
2

Подобно этой теме, но не совсем: How To Cache Information In A Threadsafe MannerСправочные данные

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

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

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

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

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

ответ

2

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

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

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

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

+0

Возможно, я содрогнулся с этой частью. В основном, мне интересно, как вводить зависимости в одиночные. Теперь, когда я думаю об этом, это может быть отдельный вопрос. В любом случае, согласно Блоху, в настоящее время лучшая практика реализации синглетонов в java - с Enums с одним членом (экземпляром): т. Е. Public enum Elvis { INSTANCE; } – ayang

+0

Если вы должны были спуститься по этому маршруту, не могли бы вы все равно вводить любые зависимости через Spring с помощью метода MethodInvokingFactoryBean, чтобы вызвать соответствующий сеттер в классе enum? – Adamski

+0

Да, и это то, что я, скорее всего, в конечном итоге сделаю - но это было недостаточно сложно, и я подумал, что вернусь к первым принципам и посмотрю, не сделаю ли я это неправильно. – ayang

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