0

Je suis en train d'implémenter une application Rails qui doit regrouper les résultats de recherche à partir de N bases de données hétérogènes indépendantes. Un cas d'utilisation exemple serait:Application Extensible Rails qui se connecte à plusieurs bases de données

  • requêtes de l'utilisateur « XPTO »
  • La requête est soumise à toutes les bases de données enregistrées sur le système
  • Les résultats sont transformés et combinés dans un format prédéfini
  • utilisateur obtient les résultats

L'application doit fournir un point d'extensibilité pour l'introduction de nouvelles bases de données dans le système. Une base de données peut être de différents types: un fichier plat, une base de données SQL, une interface REST vers une base de données SQL, etc.

Si je travaillais en C#/Java, en ignorant les problèmes de vitesse, je définirais une gestion de plug-in système où chaque hôte aurait un plug-in qui saura comment interroger et transformer les résultats de l'hôte. De nouveaux hôtes seraient facilement introduits en définissant un nouveau plug-in et en configurant l'hôte dans le système. Je suis nouveau venu aux rails et je cherche des idées, des outils ou des modèles de conception qui peuvent m'aider à résoudre ce problème.

+0

mieux en faire un wiki communautaire – clyfe

Répondre

0

Ma meilleure estimation sera d'écrire un adaptateur ActiveRecord personnalisé qui interrogerait toutes vos bases de données et combinerait les résultats.

+0

C'est une possibilité, mais je préférerais avoir un module différent pour différentes bases de données. – luis

+0

Demandez à votre MultiSourceAdapter de s'appuyer sur plusieurs MultiSourceAdapterAdapter.s et dans database.yml, spécifiez un adaptateur et un adaptateur pour chaque source. – clyfe

0

De la référence API:

Les connexions sont généralement créées par ActiveRecord :: Base.establish_connection et récupérés par ActiveRecord :: Base.connection. Toutes les classes héritant de ActiveRecord :: Base utiliseront cette connexion. Mais vous pouvez également définir une connexion spécifique à la classe. Par exemple, si Course est un ActiveRecord :: Base, mais réside dans une base de données différente, vous pouvez simplement dire Course.establish_connection et Course et toutes ses sous-classes utiliseront cette connexion à la place.

Questions connexes