несколько баз данных с одинаковой структурой - PullRequest
0 голосов
/ 15 апреля 2011

Каков наилучший способ в доктрине2 иметь дело с разными базами, но с одной и той же схемой.В настоящее время я

  1. генерирую сущности отдельно для каждой базы данных, добавляя пространство имен и имя базы данных к каждому объекту метаданных, помещая их в разные пространства имен (XXX \ Base \ EntityClass), но с тем же псевдонимом * 1004.*
  2. создание одного EntityManager для каждой базы (даже если они совместно используют одно и то же соединение)
  3. создание прокси-сервера, который передает вызовы нескольким EntityManager и собирает ответы
  4. объединяет ответы в один выход

Есть ли более простой способ справиться с несколькими базами в доктрине2?

1 Ответ

0 голосов
/ 15 апреля 2011

Я не могу ответить за doctrine2, но я делаю это на C #.

  1. Один набор сущностей со строгими именами и строгими типами, определяемыми в соответствии с потребностями остальной части приложения.Это сопоставляет схему, но не привязано ни к одной из баз данных.
  2. Один фасад, который знает, какую базу данных вы используете в данный момент, и направляет запросы на одну из двух ...
  3. Отдельные пространства имен доступа к данным, которые обрабатывают общий набор операций и заполняют результаты в единый набор объектов, которые возвращаются запрашивающей стороне через фасад.
  4. Генераторы статического кода, основанные на чтении сценария изкаталог базы данных, полезны.Вы можете выбрать один из них в качестве модели, если вы можете сделать вывод о том, что вам нужно знать о другой базе данных.
  5. Динамические генераторы кода также полезны для вставок, обновлений, выражений where и т. Д.
  6. Инвестируйте некоторое время в рамки, чтобы поддержать все это.Решите, нужно ли вам хранить метаданные во время выполнения, и нужно ли в первую очередь поддерживать запросы или операции изменения.Предоставьте общий метод для извлечения данных из наборов результатов для любой базы данных, чтобы вы могли получать строго именованные и типизированные наборы результатов обратно в ваше приложение, независимо от базовой базы данных.
...