Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/07/2011, 10h50   #1
Invité de passage
 
Homme
Inscription : juillet 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : juillet 2011
Messages : 17
Points : 0
Points : 0
Par défaut Postgres : C vs C++

Bonjour,

je commence un projet sur Postgresql :

le but est de copier des transactions d'un serveur vers un autre, il y a 300000 lignes à copier.
Dans l'existant, on utilise le langage C (libpq) pour se connecter au Serveur distant et copier les transactions ligne par ligne.
Ma question est de savoir si le c++ est meilleur que le C pour ce genre de replication.
Puis comment faire pour copier les lignes par bloc.

Merci de votre aide
Postgres.0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 12h46   #2
Invité de passage
 
Homme
Inscription : juillet 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : juillet 2011
Messages : 17
Points : 0
Points : 0
Il faut noter que les tables ne sont pas sur le même serveur et n'ont pas les mêmes structures.
Postgres.0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 13h04   #3
Invité de passage
 
Homme
Inscription : juillet 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : juillet 2011
Messages : 17
Points : 0
Points : 0
Merci les gars, ne vous bousculez pas, y a de la place pour tout le monde
Postgres.0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 16h43   #4
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
Quand tu dis "meilleur" on va supposer que ton critère est la vitesse d'exécution (par opposition à d'autres critères comme la concision du programme, la facilité de maintenance, les dépendances avec des librairies etc...).

Voilà une opinion: par rapport aux éléments que tu donnes, passer du C au C++ ne va rien apporter du tout à en vitesse ton traitement. Zéro intérêt.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 10h31   #5
Invité de passage
 
Homme
Inscription : juillet 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : juillet 2011
Messages : 17
Points : 0
Points : 0
Exactement !

C'est la vitesse d'execution qui m'interesse.
Je veux savoir comment copier les lignes d'une table à une autre.
Sachant que les tables ne sont pas sur le meme serveur et n'ont pas la meme structure.
Pis, je veux savoir comment copier ces lignes le plus rapidement possible.
Postgres.0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 12h16   #6
Candidat au titre de Membre du Club
 
Homme
Développeur J2EE
Inscription : octobre 2007
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur J2EE

Informations forums :
Inscription : octobre 2007
Messages : 10
Points : 11
Points : 11
Il me semble que vous faites les transactions lignes par lignes ?
Désactivez l'autocommit et utiliser une prepared statement devrait améliorer la performance, quitte à valider les transactions toutes les 100 ou 1000 enregistrements.

En effet ce qui est lent dans votre cas :
  • le traffic réseau engendré par l'envoi de la requête + des données
  • l'analyse syntaxique de la requête
  • la création et la validation de la transaction

Si cela ne suffit pas, il est également possible de :Mais attention a valider que ces deux points sont réalisables.
ddoumeche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 13h44   #7
Invité de passage
 
Homme
Inscription : juillet 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : juillet 2011
Messages : 17
Points : 0
Points : 0
On utilise des prepared statement et on fait un commit final.
Sur le premier serveur, on a une table A qui est alimentée par des lignes
Sur la table A y a un trigger qui copie toutes les nouvelles lignes de A vers une table B.
En suite mon bach C va copier les lignes de la table B vers un autre serveur (table C) et supprime les lignes de B.

Ce que cherche s'est amélioré le Bach C, en faisant un COPY ou en copiant les lignes par bloc.

Pour chacune de ces solutions, j'ai un problème :

De nouvelles lignes peuvent etre ajouté à ma table B juste après le COPY, et je vais certainement les supprimer par mon bach C.

Pour le transfere des lignes par bloc, techniquement je ne vois pas comment faire.
Postgres.0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 14h30   #8
Candidat au titre de Membre du Club
 
Homme
Développeur J2EE
Inscription : octobre 2007
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur J2EE

Informations forums :
Inscription : octobre 2007
Messages : 10
Points : 11
Points : 11
Une question, pourquoi ne pas avoir utiliser une solution de réplication comme Slony-I ?
ddoumeche est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h27.


 
 
 
 
Partenaires

Hébergement Web