Je suis sur le point de vous lancer dans un projet PostgreSQL pour un client. Ils veulent développer une énorme base de données professionnelle avec de nombreuses jointures complexes, alors après la considération, j'ai choisi d'aller avec PostgreSQL sur MySQL . P>
Une considération importante est de savoir comment interfacer efficacement avec la base de données avec des scripts. Actuellement, le client utilise environ un million de scripts pour importer et remodeler les données à leurs besoins, mais n'utilise aucune base de données (sauf si vous envisagez que les fichiers CSV soient une base de données). Avec l'arrivée d'une structure de base de données avec des requêtes et des vues, la nécessité de scripts sera inférieure, mais l'importation devra toujours être faite souvent et l'exportation / reporting également. Pour moi, le résultat final idéal serait une série de scripts standardisés, de préférence avec une interface Web, de sorte que le client puisse effectuer des tâches régulières rapidement et sans erreur avec un clic sur le bouton. P>
Ma question est quelle approche de script sera la plus appropriée. Probablement une langue de script avec un postgre ou un plug-in ODBC suffirait, mais je cherche à faire un choix intelligent à long terme. Quelqu'un a-t-il de l'expérience avec cela? Est-ce que Postgres propose une langue de script interne et est-il facile de construire une interface graphique pour cela? Existe-t-il des outils standardisés disponibles pour importer / exporter et sont-ils suffisamment personnalisables pour permettre la normalisation des tâches au niveau du clic? Que diriez-vous de php ou de perl? P>
Merci d'avance. Toute astuces, ressources, looks perplexes ou gestes pitoyables sera vraiment apprécié; -) p>
4 Réponses :
Depuis que vous parlez de scripts qui manipulent expressément la base de données, je commencerais avec les outils les plus indigènes. p>
copie de code> et copie sur code> pour importer et exporter vers des fichiers plats li>
- Un outil ETL pour tout remodelage qui ne peut pas être traité avec ce qui précède li>
ul>
Maintenant, vous souhaitez fournir une interface Web facile pour interfacer avec ces scripts. Ici, la meilleure langue est probablement celle que vous ou votre équipe connaît déjà. Toutes les principales langues ont des pilotes Postgres. La langue que vous choisissez aura très peu d'impact si vous conservez vos tâches de manipulation de données au calque de base de données. P>
Une chose à considérer, c'est combien de temps le script typique prendra pour exécuter. S'il est plus de quelques minutes, je vous suggère de le découler à partir de l'interface Web. Dans ce cas, l'interface Web doit permettre à l'utilisateur de faire la queue du script de démarrer afin que le serveur puisse l'exécuter indépendant du cycle de requête Web. P>
Ceci est un conseil solide. Merci. En attente d'autres idées, je suis enclin à choisir PHP dans un cadre tel que Symphony, en utilisant Ajax pour placer les appels de base de données.
Mise à jour: J'ai maintenant utilisé un serveur M $ SQL pendant un certain temps au lieu de Postgres, et j'ai trouvé que les fonctions internes T-SQL et les packages SSIS (ETL) sont plus rapides que toutes les autres langues de script reliant ODBC. Je suis enclin à penser que c'est la même chose pour les postgres. Je conseillerais donc à quiconque, commencez par des procédures stockées internes, puis regardez d'autres possibilités de script.
Petit addition: et vous avez également raison sur l'interface Web. Il est bien plus rapide de laisser l'interface Web d'appeler des procédures stockées natives que de faire des scripts ou de la manipulation dans votre PHP / ASP / quel que soit le site Web.
J'utilise Perl. Je le suggérerais aussi. En ce qui concerne les langages de script de base de données que Postgres offre: Vous avez toujours Malheureusement, le soutien de la CSV sur Postgres est un type de crofty, je vais commencer un projet Perl très bientôt pour résoudre ce problème (probablement dans le mois prochain). Actuellement, vous devez presque utiliser PGloader qui (IMHO) a une syntaxe de Kludgey. Perl a Perl a historiquement fait accès à la base de données et utiliser beaucoup mieux que php. Je crois toujours que c'est un bon sens devant PHP. PHP manque toujours d'un cadre asynchrone et est plutôt limité au Web. Les points forts de PHP ont tendance à être beaucoup plus centrés sur des caractéristiques non techniques de la langue, à savoir la courbe d'apprentissage et la portabilité d'hôte partagée. P> pl / perl code> est beaucoup plus développé que
pl / php code> et
pl / perlu code> apporte le CPANO Postgres. P>
pl / sql code> (idéal pour les petites choses) et
pl / pgsql code> (a également ses applications). P>
Texte :: CSV_XS CODE>, qui est une goodse pour traiter les CSV. P>
Pourquoi pgloader? Qu'en est-il de "Copier
Merci. C'est toutes les informations très utiles pour moi. Peut-être une question idiote, mais est pl / perl code> une perl à part entière dans laquelle je peux utiliser
texte :: csv_xs code> ou dois-je avoir besoin
pl / pérlu < / code> pour cela?
@Matthew Wood: Dans la copie du monde réel *, comme actuellement mis en œuvre n'est jamais suffisante, je suis l'auteur du wiki.postgresql.org/wiki/copy Si vous souhaitez voir les aspects négatifs de la copie et les problèmes avec cela. @Littlegreen: pl / pérlu code>, signifie que vous pouvez tirer dans des modules externes, il n'y a rien de spécial à ce sujet en soi, mais l'utilisation de
texte :: csv_xs code> n'est pas script dans la db. J'utilise du texte :: CSV_XS pour transformer un CSV pour importer en PSQL en raison de l'absence de fonctionnalité de CSV natif dans la PSQL. J'utilise
pl / pérlu code> par exemple pour créer des domaines pour les types de données par courrier électronique et les numéros de VIN.
Bien que je puisse comprendre votre frustration lorsque vous recevez des fichiers CSV d'une source, vous ne pouvez pas contacter / contrôler / peu importe, cinq des six questions ne sont pas pertinentes pour l'importation de CSV (NULL comme ...) ou sont incorrectivement dus au formaté. Fichiers CSV. La seule fois que la faute de la copie n'est pas de ne pas contraindre de fichiers de données formatés de lieu, mais je ne ferais que cela ne le faisait pas depuis que je dois échanger avec des fournisseurs de données européens et que je suis aux États-Unis (15.000 convertiraient silencieusement en 15 de mon côté Si vous n'aviez pas à la fois défini les deux locaux; mieux rejeter et intervenir manuellement).
Je ne sais pas comment vous avez réussi à compartimenter dans une telle mode. Tous ces problèmes sont en raison de mauvaises exportations, qui constitue une réelle vie de points de commun lors de la gestion des CSV. Tous ces problèmes sont gérables dans MSSQL et MySQL via leur interface de chargement CSV, mais elles ne sont pas faciles à gérer avec juste \ Copy. Je refuse de diviser le blâme. Beaucoup de problèmes de PG sont reconnaissants en amont et ils attendent simplement une personne avec un savoir-faire suffisant pour soumettre un correctif acceptable. PG n'a même pas eu la capacité de traiter les CSV avec des en-têtes (jetez la première rangée) jusqu'au 8.1.
Copier de est une bonne option, mais pas très flexible ... Si vous voulez faire un prétraitement, il est préférable d'utiliser un outil (ETL) loader.
J'utilise Python / Jython pour se connecter à PostgreSQL et faire diverses choses. P>
PLUS: P>
Exemples d'utilisation: P>
sur mes autres messages sur vous permettre de voir que j'utilise Python / Jython avec d'autres bases de données comme Oracle et Informix. Par exemple, j'ai créé des outils qui déblose des informations du schéma de base de données afin que je puisse facilement comparer des bases de données dans l'environnement de test et de production. P>
Merci. Je vais envisager d'utiliser Python ainsi que Perl.
SCHEMACRAWLER pour PostgreSQL vous permet de script sur une base de données à l'aide de JavaScript. P>
JavaScript, encore une autre possibilité :-) Cela devient intéressant. Je vais mettre du temps à enquêter sur toutes les options et à voir ce qui est le plus puissant.
Ils ont un serveur Windows, IIS et SBS. Je suis tenté d'installer sur celui-ci car il a des charges de mémoire et de plusieurs processeurs, bien que je préfère une machine UNIX dédiée.
Quelles langues connaissez-vous? Êtes-vous dans un horaire serré ou avez-vous le temps d'apprendre de nouvelles langues?
Je n'ai que de l'expérience avec PHP, en ce qui concerne les langues de script. Je sais que c aussi, mais cela ne me semble pas très pratique pour le travail. J'ai assez d'air dans l'horaire, je peux donc apprendre de nouvelles langues, tant que la courbe d'apprentissage n'est pas trop raide. J'aimerais apprendre Perl, si seulement pour pouvoir porter des chemises et des chapeaux de Perlmonger ';)