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
>>
>>
>>
>>