le 05-23-2012 04:31 AM
Bonjours,
J'utilise la librairie postgresql2labview pour accéder à une base de donnée. Mon problème c'est que la fonction ExecutCmd de cette librairie va chercher les données de ma table cellule par cellule lorsque je fais par exemple
SELECT TimeStamp,Header[4], id_dataset FROM rt_raw_342045637152347776 WHERE TimeStamp > '1980-01-01' ORDER BY TimeStamp DESC LIMIT 3600 !!!
Ce qui est dérengeant c'est que cela me prend bcp trop de temps (3.5 secondes), j'aimerais pourvoir allé chercher mes donnée ligne par ligne au moins et non cellule par cellule. Je ne sais pas si vous avez une astuce?
La même requête avec pgadmin me prend 92ms.
Avez vous une idées?
Cordialement
Sébastien Kuenlin
le 05-23-2012 05:33 AM
Bonjour Sébastien,
As tu essayé avec le Database toolkit de NI? Peut être ira t'il plus vite pour les requêtes.
Comment sont structurées tes tables? combien as tu de colonnes? en théorie tu dois en avoir très peut donc la recherche cellule par cellule ne devrait pas être beaucoup plus longue.
Je sais aussi que l'on peut modifier les configs de PostGreSQL pour optimiser certains types de recherches, mais Google t'en dira plus que moi il y a pleins de questions sur des forums spécialistes des SGBD.
Ton timestamp semble être une string, en Base de donnée les recherches sur des nombres vont plus vite il me semble (mais le problème semble surtout venir de ta librairie)
Quelle est la taille de ta base de données?
En espérant avoir donné quelques pistes...
le 05-23-2012 06:07 AM
Hello,
Tout d'abord merci de ta réponse.
Non je n'ai pas essayé le Database toolkit de Ni car tout le soft est fait avec la librairie postgresql2labview et je ne veux pas tout refaire (ce soft avait été fait par une autre personne que moi) et d'après ce que j'ai entendu cela ne serait pas plus rapide.
La table ou je fais cette requêtes est relativement simple (32colones et 3600 lignes max) donc si je vais chercher cellules par cellule (deux boucle for impriqué) cela me fait 115200 iteration tout de même avec insertion dans un tableau à chaque fois. Puis enfin ressortir le tableau... pas très optimisé tout ça 😉 ! Maintenant si je fais la même requête avec pgadmin (le soft fournit par PostgreSQL) la requête ne dur que 92ms!!! Donc je pense pas que cela vienne des configs de PostgreSQL mais vraiment de ma librairie.
Pour la taille de ma base de donnée complète c'est 26 tables dont 7 tables pour les données qui arrive de l'acquisition. Mais mon problpème vient vraiment de la table des donnée en temps réelle (3600 lignes et 32 colones), les autre table n'ont pas bcp de donnée.
Cordialement
Sébastien Kuenlin
05-23-2012 06:53 AM - modifié 05-23-2012 06:56 AM
Déjà 32 colonnes c'est beaucoup trop puisque les algo sont optimisés pour chercher suivant les enregistrements (lignes) il faut subdiviser en plusieurs tables avec des foreign key etc..
La requête est bien longue en effet pour une si petite table, par contre je ne connais pas ta librairie donc je ne sais pas si il y a une fonction plus appropriée, mais un test simple avec le toolkit NI me semble une bonne option sa ne prendrait que quelques minutes pour tester. Tu fais juste un open puis une requete SQL et un close et tu vois combien sa prend de temps...
le 05-23-2012 09:11 AM
Re Bonjours,
Alors j'ai trouvé une solution, j'au recoder la manière dont la librairie allais chercher les cellules dans la table et maintenant je suis à 92 ms 😉
Maintenant :
Avant
Il y a pas grande différence dans le code, mais un gain de temps de 30x !!
Cordialement
Sébastien Kuenlin
le 02-12-2013 10:08 AM
bonjour , je suis encore debutante avec labview et jai un projet qui consister à enregestrer des donnnés dans des tableaux de base de donnée . avez vous des docuemnts qui peuvent m'aider à realiser cette tache .merci 🙂