(это в проекте Java)
Я использую поисковую систему параллельно с реляционной базой данных.Основным объектом интереса является «листинг».Он имеет приблизительно 5 других объектов в структуре композиционного стиля.Один - это местоположение, другой - сложное определение времени и даты.
По моему опыту и исследованиям, поиск в Solr, Lucene, Elastic SEarch намного быстрее, чем в любой базе данных с полнотекстовыми и географическими индексами.Вот почему я хочу использовать поисковую систему для данных, которые находятся в базе данных.Кроме того, поисковая система будет содержать более детальные записи времени, чем база данных, более конкретные и формальные.
Итак, в отношении шаблона проектирования: цель состоит в том, чтобы CRUD происходил из API в обе базы данных.содержимое объекта, а также все временные и географические перестановки, созданные в индексе поисковой системы.
У меня были обсуждения с партнером, и я считаю, что он прав, когда говорит, что для поддержания низкого уровня связи класс 'Listing' (опять же, верхняя часть иерархии данных в данных) НЕ ДОЛЖЕНзнать о поисковой системе и НЕ иметь в ней статических функций, которые выполняют поиск в поисковой системе.Он заявил, что шаблон проектирования «Цепочка ответственности» может быть подходящим способом, позволяющим CRUD API воздействовать как на базу данных, так и на содержимое поисковой системы.Я читал, что это не правильно.
Я искал http://sourcemaking.com/design_patterns и думаю, что паттерн Фасад http://sourcemaking.com/design_patterns/facade, может быть лучшим.Но я хотел бы услышать другие мнения.
Заранее спасибо.
PS.Я занимаюсь разработкой слоя osem (http://en.wikipedia.org/wiki/Compass_Project), который может быть внедрен в Spring IOC. Этот слой сделан специально для ElasticSearch. На данный момент он не поддерживает транзакции или внешние ключи (и может никогда этого не делать). Но онпозже у них будут хуки для аннотаций. Возможно, вы захотите взглянуть на них. Это на https://github.com/kwince/osemManager. В настоящее время ведутся две ветки. Я решу, какую из них объединить на следующей неделе.