2009-03-11 5 views
2

Quelles sont vos méthodes de liaison de données réparties sur plusieurs architectures de bases de données (pensez MySQL vs PostgreSQL etc), dans une seule application? Voulez-vous créer des tableaux/tables de hachage géants pour faire correspondre le contenu les uns avec les autres? Existe-t-il d'autres options plus efficaces et moins gourmandes en mémoire pour ce faire? Si vous utilisiez des données à partir d'une source MySQL & PostgreSQL, sans possibilité de convertir un DB en un autre (contraintes d'application, manque de temps, manque de connaissance, ...), comment procéderiez-vous? il?Liaison d'informations multi-base de données

+0

Pourquoi ne pas simplement conserver les bases de données là où elles sont et les utiliser telles quelles. Quel genre de "lien" avez-vous besoin de faire? –

Répondre

1

Au moins dans le cas de MySQL, vous pouvez quand même utiliser les données de plusieurs bases de données dans une seule requête, à condition que les bases de données soient hébergées par la même instance de MySQL Server. Vous pouvez distinguer des tables de différentes bases de données en qualifiant la table avec un nom de schéma:

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); 

Dans PostgreSQL, vous pouvez également qualifier les références de table avec un nom de schéma. Toutefois, je ne suis pas sûr que vous puissiez créer des contraintes de clé étrangère entre les bases de données.

0

Si vous cherchez à créer des contraintes sur les SGBDR, vous ne pouvez pas.

Je suis confronté au même problème avec l'exécution d'une partie d'une application sur PostgreSQL pour en bénéficier, et le reste de MySQL où c'est mieux. Je fais plusieurs insertions avec le même format d'informations primaires (dans mon cas, un ID utilisateur générique), donc je laisse l'application gérer la logique de s'assurer de demander le même ID des deux DBs .

Il n'y a pas vraiment moyen de le faire en dehors de l'abstraction d'une classe ou d'une fonction d'utilité que j'ai trouvée.