2009-03-17 10 views
1

J'ai un couple de scripts qui génèrent & rassembler de grandes quantités de données dont j'ai besoin à la fois pour ma base de données et dans le futur pour y ajouter de grandes quantités. Quelle est la meilleure façon d'importer beaucoup de données relationnelles dans une base de données de rails à la fois comme données de base et de manière intermittente pendant la production?Rails: Script pour importer des données

Je n'ai pas encore défini de format de sortie pour mon script, mais la structure des données reflète en grande partie celle de mes rails et contient de nombreuses associations que j'aimerais conserver.

J'ai fait un peu de googled un peu et vu ar-extensions et seed_fu ainsi que l'idée d'utiliser des appareils. Avec les extensions ar, tous les exemples semblent être de simples importations csv (provenant probablement des tables dumps qui semblent être son principal cas d'utilisation) sans aucune mention de gestion des associations ou d'éviter les mises à jour en double. Dans mon cas, je n'ai pas d'identifiant, de clé étrangère ou de table jointe dans mon script, donc cela semble ne pas fonctionner pour moi à moins que je ne sois prêt à gérer cette complexité moi-même. Avec seed_fu, il semble qu'il pourrait gérer les aspects relationnels de la création de données, mais il me faudrait quand même spécifier des identifiants (comment savoir lesquels sont disponibles en production?) Et mélanger du code avec des données. Les projecteurs ont aussi le même problème d'identifiant mais maintenant il faut que les objets soient nommés (je finirais probablement par utiliser des nombres pour les noms) et je ne sais pas comment éviter les duplications accidentelles d'enregistrements.

Ou est-ce que je ferais mieux de simplement mettre mes données dans un local sqlite db d'abord et ensuite en utilisant les techniques de dumping de table droite?

Répondre

1

On m'a récemment remis une application de rails qui nécessitait des données importées et tout était géré dans une tâche de rake. Toutes les données se présentaient sous la forme de fichiers au format csv et étaient traitées par classe/modèle etc. Cela a fonctionné relativement bien pour moi étant nouveau dans le système car il était très facile de voir où les données se passaient et comment il était appliqué. Au fur et à mesure que vous importez les données, vous pouvez vérifier les conflits d'identifiants/collisions et les gérer en conséquence.

2

Je l'ai déjà fait avec des fichiers CSV. J'ai un travail cron qui recueille les données et les met dans des fichiers CSV accessibles. Ensuite, j'ai une tâche rake (également dans cron, mais sur une autre case) qui recherche des CSV, et s'il y en a, appelle des méthodes de modèle pour créer des objets à partir des lignes CSV.

Les modèles ont une méthode csv_create_or_update qui prend une ligne CSV. Cette technique contourne le problème de l'ID et permet également aux validations de s'exécuter (ou non) sur les données entrant.

Questions connexes