2012-03-12 1 views
1

J'ai travaillé sur une application Play (1.2.4) qui va faire un peu de crunching sur les logs. Ce n'est pas vraiment la chose typique pour laquelle le framework serait utilisé (en gros je serai probablement le seul utilisateur), mais c'est si rapide de tester une idée que j'ai décidé de l'utiliser.Structure de jeu - chargement de données à partir d'une base de données externe

Je vais charger beaucoup de différents types d'événements et de comptes associés stockés dans le journal (base de données) d'une application séparée, les stocker dans la base de données locale, puis faire la corrélation entre les événements. Jusqu'à présent, je viens d'aller chercher les logs dans la base de données et les importer dans la base de données, mais c'est maladroit, lent, sujet aux erreurs et les fichiers deviennent assez volumineux quand la durée est augmentée. Je voudrais trouver un moyen d'obtenir un accès en lecture à deux bases de données externes, exécuter des requêtes et ensuite créer des objets stockés localement dans la base de données locale. Les deux bases de données externes ont des schémas différents, et bien sûr le local est différent deux. La connexion est seulement nécessaire pendant l'importation, et puisque les tables que j'importe des données contiennent beaucoup de colonnes dont je n'ai besoin que de quelques-unes (et les serveurs sont loin), je préférerais interroger seulement les colonnes que je avoir besoin. Je suis d'accord avec la création directe de modèles stockés localement directement hors de l'ensemble de résultats, donc je n'ai même pas besoin de définir des modèles basés sur la base de données externe. Je pourrais aussi avoir besoin d'extraire des données de la base de données externe A en fonction des données de la base de données B (par exemple lorsqu'une ligne de journal contient un utilisateur que je n'ai pas stocké localement, récupérer ses données sur l'autre serveur). Les connexions ne sont nécessaires que pendant l'importation, ce qui en théorie est un événement ponctuel. Un gros bonus serait également la possibilité de configurer les paramètres datasources sans avoir à redémarrer (par exemple stocker l'hôte/port dans la base de données locale et lire les valeurs avant de commencer l'importation).

La plupart des threads que je trouve à propos de l'utilisation de plusieurs DB semblent être liés à la réduction de la charge en répartissant les données avec le même schéma sur plusieurs instances. J'ai trouvé des discussions sur le fait d'avoir des bases de données séparées avec un schéma différent, mais je n'arrivais pas à comprendre comment les solutions s'adapteraient à mes besoins. Tout commentaire serait apprécié.

Répondre

2

Vous pouvez vous connecter à vos bases de données externes de la même manière que vous le feriez habituellement - JDBC, Hibernate ou autre. Play ajoute un peu de magie dans les modèles gérés en interne, mais rien ne vous empêche d'ajouter n méthodes d'accès différentes pour n frameworks. Vous devrez gérer l'état transactionnel, etc., mais ce n'est pas différent de l'habitude.

Notez que vous pouvez également utiliser Spring pour configurer ces bases de données externes.

S'il s'agit d'une importation en une seule fois, vous souhaiterez peut-être envisager d'écrire un outil de migration pour ce faire, et de faire en sorte que votre application principale se concentre sur son travail quotidien. Vous pouvez partager le modèle de base de données entre votre application principale et votre application de migration, et ainsi écrire l'application de migration à l'aide de Play. Nous l'avons fait sur un projet précédent, et cela a très bien fonctionné.

+0

Merci, cela a semblé fonctionner bien. Je comprends qu'un outil de migration fonctionnerait bien, mais je veux avoir la capacité d'extraire des données de manière assez dynamique, alors procurez-vous un mois en premier et quand les choses fonctionnent comme je veux, en obtenir plus progressivement. Aussi, je pense à obtenir des données à la volée seulement quand j'en ai besoin. Je viens de mettre en place JDBC qui semble fonctionner parfaitement. – kamina

Questions connexes