Всем привет. Интересуют мнения по решению вот такой задачи:
Есть неограниченное количество баз данных.Их количество может изменяться каждый день (создаваться новые, удаляться старые.)
В этих базах данных есть данные, одинаковые во всех базах. Например, значение температуры на Шпицбергене каждый час. Очевидно, что эти данные обновляются каждый час и должны появляться во всех базах.
Важно, что данные из общих таблиц могут использоваться в локальных.
Как решить эту задачу?
Сам вижу следующие решения: Записать общие данные в отдельную базу данных и в клиентском коде получать их отдельным запросом
Минусы: Клиентский код знает о существовании другой БД, усложнение кода, Сложности при работе ORM
Плюсы: простота построения базы
Записать общие данные в отдельную базу данных и создать view во всех базах данных
Минусы: Немного усложняется репликация
Плюсы: прозрачная работа со стороны клиента
Держать копии данных во всех базах
Минусы: Очевидны
Плюсы: прозрачная работа со стороны клиента, любые ORM будут работать без проблем.
Виталий Сорокин, зависит от того какие данные хранятся и что выполняется.
К примеру, возьмём стим или фейсбук. Иметь "свою" основную БД под каждого! клиента в таком случае крайне глупая затея. Но иметь кеширующие инстансы БД под некоторые группы клиентов - вполне.
Виталий Сорокин, в общем случае нужно определиться с типом и архитектурой приложения. Своя отдельная БД под каждого клиента на одном сервере идея странная. Но допустим (только допустим), что таким образом вы организовали песочницы для них.
В этом случае общие для всех данные должны быть в общей для всех базе.
То есть работать или со вторым подключением или интегрировать (например, посредством api, rpc) с сервисом, который эти общие данные и обрабатывает.
Fortop, Конечно, всё зависит от проекта, потому меня и удивила Ваша категоричность.
Тут случай именно создания песочниц, так-как клиенты не должны вообще пересекаться.
Про второе соединение я писал в самой задаче. Хотелось бы найти более прозрачное решение
Fortop, Под прозрачностью я подразумеваю работу с этими данными, как с одной базой данных (разумеется только на чтение). Судя по всему, такой возможности нет.