PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Optimisation en ajout d'enregs
Optimisation en ajout d'enregs
Débuté par Zag, 20 déc. 2005 17:57 - 7 réponses
Posté le 20 décembre 2005 - 17:57
Bonjour,

Je souhaite savoir comment je peux optimiser la création d'enregs.

Je commence par faire un "delete from" en SQL pour vider ma table hyperfile (selon une clé donnée) et déjà, celà prend beaucoup trop de temps.
Puis je lis un fichier texte et chaque ligne lue est ajoutée dans le fichier hyperfile.

le fichier texte contient 20 000 lignes mais il pourra en contenir bien plus et la création des enregs mets plusieurs minutes.

Voici un exemple de code:

le DELETE :
>>>>>>>
Req_Supp_Err est une Source de Données
vSql = " delete from Compte_rendu_détaillé where Compte_rendu_détaillé.CRD_Id_Application = "+MgVerify.ComboApplication
resultat = HExécuteRequêteSQL ( Req_Supp_Err,vSql)
<<<<<<<

la LECTURE ASCII, ECRITURE HYPERFILE

de simples HAJOUTE()
<<<<<<<

J'ai analysé les performances et évidemment, c'est le hajoute() qui est trop long

Question:

Est ce que les transactions peuvent me permettre d'améliorer les performances.
En fait, je souhaiterai que hyperfiles écrive dans les fichiers par paquets plutot que enreg par enreg.

Toutes vos idées sont les bienvenues

Zag
Posté le 20 décembre 2005 - 16:56
Salut,

1.pour ton problème de suppression je n'ai pas vraiment de solution. À
moins que tu utilises une boucle avec la fonction Hraye

2.Par contre, pour ce qui est de l'écriture tu peux utiliser HEcrit plustôt
que HAjoute. La seule chose est que si tu as une clé unique dans ton
fichier et que tu as besoin de sa valeur immédiatement après l'ajout, ce
n'est pas possible. Par contre si tu en as pas besoin, HEcrit est ton amie.

Ensuite tu réindexe ton fichier. (Si tu utilises la solution 1 tu devras
faire une réindexation avec compactage. En fait même si tu ne l'utilises
pas tu devrais car la taille de ton fichier ne réflètera pas ton nombre
d'enregistrements)

C'est à toi de voir si l'utilisation du Sql+HAjoute est moins longue que le
HRaye+HEcrit+HReindexe puisque le HAjoute se fait seulement sur l'ajoute des
tes 20000 nouveaux enregistrements mais le HReindexe se fait sur le fichier
au complet...

Mathieu
Posté le 20 décembre 2005 - 18:04
salut

les transaction ralentiront encore plus
tu peux vérifier hSecurite() sinon je ne vois pas de soluce
Posté le 20 décembre 2005 - 18:09
Bonjour,
Le but des transactions n'est pas d'améliorer les performances, mais de garantir l'intégrité de la BDD en rendant atomique un ensemble de requêtes. Il est même possible que les transactions ralentissent les mises à jour.
Une piste serait de désactiver les controles d'intégrité référentielle lors du chargement des données, mais ce n'est pas très recommandé.

Frédéric.
Posté le 21 décembre 2005 - 09:44
Bonjour,

Voir la fonction HF HimporteTexte pour importer le fichier texte .......?

Edoardo
Posté le 21 décembre 2005 - 12:57
Quel est le besoin exact, en terme fonctionnel ? Il y a quoi dans les enregistrements à supprimer, et quoi dans ceux à rajouter ?
Posté le 21 décembre 2005 - 14:51
En effet,

Pour accélérer, j aurai suggérer de désactiver la réindexation automatique du fichier pendant tout le traitement puis ensuite de le réindexer à la fin avec la fonction H**.

Seuls les tests diront si c'est une bonne solution.
Posté le 22 décembre 2005 - 11:54
Waouhhh, beaucoups de piste à explorer !

1) j'ai désactivé l'intégrité référentielle (inutile dans mon cas) et dans les delete sql, c'est spectaculaire.

Par contre, dans les hajoute, ca serait plutot le contraire, me demander pas pourkoi, ca me dépasse. Les temps sont parfois meilleurs, parfois affolants (x3)

2) je vais tester le hecrit car je n'ai pas besoin de relire l'enreg apres sa création

3) Pour expliquer ce que fait le programme: appel d'un prog delphi qui génère des fichiers texte. Puis avant de récupérer le contenu des fichiers texte, je nettoie ma base. En fait , je supprime et remplace lors de la lecture des fichiers.

Mais mes fichiers hyperfile contiennnent les enregs de plusieurs "applications (écrit en magic pour info)" or j'en importe qu'une donc je ne peux pas carrément faire un troncate.

3) pour le himportetexte, ce là ne semble pas me convenir car j'effectue parfois des extractions de chaines sur certains champs. Je ne peux pas faire modifier la création des fichiers texte, c'est pose trop de problèmes.

Merci pour ces infos très intéressantes, un espoir d'avoir des temps corrects renait