|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
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 |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|