Re: traitement par lots et sequence
CRUMEYROLLE Pierre <[email protected]> Wed, 12 Jun 2019 14:25:08 +0200
| Newsgroups | gmane.comp.db.postgresql.french |
|---|---|
| Message-ID | <[email protected]> |
ok pour la demarche malheureusement j'adapte un code d=C3=A9ja ecrit en java hibernate jpa , je= =20=20 sui=20pas dans le cadre d'un simple script merci Emmanuel BEZAGU <[email protected]> a =C3=A9crit=C2=A0= : > Bonjour, > > voici comment je proc=C3=A9derais (en partant du principe que nous avons= =20=20 >=20n enregistrements =C3=A0 ins=C3=A9rer) > 1. recherche du num=C3=A9ro de s=C3=A9quence actuel n0 > 2. on force la s=C3=A9quence =C3=A0 repartir =C3=A0 la position n0+n+1 de= mani=C3=A8re =C3=A0=20=20 >=20laisser un trou de n valeurs qui seront consomm=C3=A9es dans nos insert > 3. g=C3=A9n=C3=A9ration d'un script constitu=C3=A9 de 2 instructions COPY= : 1 pour=20=20 >=20la table m=C3=A8re, et 1 pour la table fille. Le num=C3=A9ro de s=C3=A9= quence est=20=20 >=20pris de (n0+1 =C3=A0 n0+n) > 4. lancement du script d'insertion en masse > > Cordialement > > Le 12/06/2019 =C3=A0 12:48, Daniel Verite a =C3=A9crit=C2=A0: >> CRUMEYROLLE Pierre wrote: >> >>> 3 - boucle sur tous les id de m=C3=A8re >>> for i in liste_id_mere >>> { >>> insertion d'un paquet de j filles pour une m=C3=A8re >>> insert into T_filles idFils,idMere,datamere values >>> ((j,i,dataf1),(j,i,dataf2),(j,i,dataf3), .... (j,i,datafn)); >>> } >>> } >>> >>> je suis oblig=C3=A9 de faire de l'insert par batch car l'insertion >>> unitaire postgresql n'est pas top , seul le traitement par lots donne >>> des perfs convenables. >> N'oubliez pas de faire tout =C3=A7a dans la m=C3=AAme transaction, sinon= c'est >> les commit interm=C3=A9diaires implicites qui ruinent les performances. >> >> Ind=C3=A9pendamment de =C3=A7a, effectivement envoyer beaucoup d'INSERT = avec peu >> de donn=C3=A9es =C3=A0 chaque fois n'est pas ce qu'il y a de plus effica= ce, mais >> au vu de l'=C3=A9tape 3 ci-dessus, on ne voit pas pourquoi cette boucle = FOR >> ne construit pas un seul INSERT par accumulation de VALUES, et >> l'ex=C3=A9cute une seule fois en dehors de la boucle. Puisque que =C3= =A7a >> ins=C3=A8re toujours dans la m=C3=AAme table et toujours avec les m=C3= =AAme colonnes >> cibles. >> >> Et une fois qu'on en est l=C3=A0 dans le raisonnement, on peut se demand= er >> aussi si =C3=A7a ne pourrait pas faire un COPY dans la table cible au li= eu >> d'un INSERT g=C3=A9ant, ce qui serait plus rapide aussi en permettant >> notamment un effet de pipeline entre le client et le serveur. >> >> >> Cordialement, >> -- >> Daniel V=C3=A9rit=C3=A9 >> >> >> >>