Связывание информации из нескольких баз данных
-
10-07-2019 - |
Вопрос
Каковы ваши методы объединения данных, распределенных по нескольким архитектурам баз данных (например, MySQL против PostgreSQL и т. д.), в одно приложение?
Будете ли вы создавать гигантские хеш-таблицы / массивы для сопоставления контента друг с другом? Есть ли другие, более эффективные и менее потребляющие память варианты для этого? Р>
Если бы вы использовали данные из MySQL & amp; Исходный код PostgreSQL, без возможности преобразования одной БД в другую (ограничения приложений, нехватка времени, недостаток знаний, ...), как бы вы поступили?
Решение
По крайней мере, в случае с MySQL вы можете в любом случае использовать данные из нескольких баз данных в одном запросе, при условии, что базы данных размещены на одном и том же экземпляре MySQL Server. Вы можете отличить таблицы от разных баз данных, указав в таблице имя схемы:
CREATE TABLE test.foo (id SERIAL PRIMARY KEY) TYPE=InnoDB;
CREATE DATABASE test2;
CREATE TABLE test2.bar (foo_id BIGINT UNSIGNED,
FOREIGN KEY (foo_id) REFERENCES test.foo(id)) TYPE=InnoDB;
SELECT * FROM test.foo f JOIN test2.bar b ON (f.id = b.foo_id);
В PostgreSQL вы также можете указывать ссылки на таблицы с помощью имени схемы. Однако я не уверен, что вы можете создать ограничения внешнего ключа для баз данных.
Другие советы
SQL Relay или другой прокси sql. http://sqlrelay.sourceforge.net/
Если вы хотите создать ограничения для СУРБД - вы не можете.
Я сталкиваюсь с той же проблемой при запуске части приложения из PostgreSQL, где это будет полезно, и остальной части MySQL, где это лучше.
Я делаю несколько вставок, используя ключ одного и того же формата первичной информации (в моем случае это общий идентификатор пользователя), поэтому я позволяю приложению обрабатывать логику проверки того же идентификатора у обеих БД. р>
Однако на самом деле не существует чистого способа сделать это, кроме абстрагирования его от класса или служебной функции.