-
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
-
Il faut noter que les tables ne sont pas sur le même serveur et n'ont pas les mêmes structures.
-
Merci les gars, ne vous bousculez pas, y a de la place pour tout le monde
-
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.
-
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.
-
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.
-
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.
-
Une question, pourquoi ne pas avoir utiliser une solution de réplication comme Slony-I ?