PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Performance HFSQL
Performance HFSQL
Iniciado por VincentRG, 18,may. 2020 11:59 - 17 respuestas
Miembro registrado
12 mensajes
Publicado el 18,mayo 2020 - 11:59
Bonjour,

Je vois que ce sujet a été traité quelques fois, mais comme les choses évoluent et que je suis "nouveau" sur WinDev, j'ose imaginer qu'il y a soit eu des nouveautés depuis ces posts, soit j'ai quelque chose de mal configuré.
J'ai plusieurs années d'expériences avec des DB SQLite, je sais à quel niveau de performance on peut s'attendre même sur une base de données "locale".

Le projet sur lequel je travaille possède une base de données HFSQL "classique" (donc locale). En réflexion sur une fonctionnalité, je voulais voir ce que HFSQL peut encaisser en volume de données avant de valider une solution technique.

J'ai donc créé une table très simple: un identifiant (entier, clé primaire), une valeur texte (rempli avec des guid, mais peu importe). Cette table contient 100 000 lignes. Mon test est simple: lire chacune des lignes avec autant de requête en utilisant l'identifiant, donc... 100 000 requêtes.

D'autre part, à titre de comparaison, je crée la même table dans une DB SQLite.

Après quelques constats sur la libération des sources de données, je fais un benchmark des 3 codes suivants:

1e version, avec libération des sources de données, avec DB HFSQL
Procedure LitHFSQL(piCount est un entier)

sSelectStmt est une chaîne = "select Valeur from test where IDTest = %1"
sdSelect est une Source dede Données
HConnecte("*")

iIndex est un entier = 1

TANTQUE iIndex <= piCount
HExécuteRequêteSQL(sdSelect, ChaîneConstruit(sSelectStmt, iIndex))
HAnnuleDéclaration(sdSelect)

iIndex++
FIN

HFerme("*")


2e version, sans libération des sources de données, avec DB HFSQL
Procedure LitHFSQL_fast(piCount est un entier)

sSelectStmt est une chaîne = "select Valeur from test where IDTest = %1"
HConnecte("*")

iIndex est un entier = 1

TANTQUE iIndex <= piCount
HExécuteRequêteSQL("sdSelect" + iIndex, ChaîneConstruit(sSelectStmt, iIndex))

iIndex++
FIN

HFerme("*")


3e version, DB SQLite
Procedure LitSQLite(piCount est un entier)

sSelectStmt est une chaîne = "select Valeur from test where IDTest = %1"
testConnexion est un entier = SQLConnecte("test09.db", "", "", "", "SQLITE")

iIndex est un entier = 1

TANTQUE iIndex <= piCount
SQLExec(ChaîneConstruit(sSelectStmt, iIndex), "SelectTest")
SQLFerme("SelectTest")

iIndex++
FIN

SQLDéconnecte()


Voici les résultats obtenus (en secondes), en fonction du nombre d'enregistrements lus
HFSQL avec libération    HFSQL sans libération SQLite
100           1,385                    0,016             0,002
500           7,518                    0,074             0,019
1000         14,304                    0,144             0,016
2000         28,268                    0,261             0,032
5000         68,767                    0,744             0,074
10000          *                       1,527             0,148
100000         *                      48,284             1,5

* Etant donné le temps que cela prendrait, je n'ai même pas fait ce test dans ce cas.

A noter que, bien évidemment, sans libération des ressources, l'empreinte mémoire explose littéralement: 2,7Go en RAM pour seulement 100 000 lignes lues!
A coté de ça, le moteur SQLite ne bronche pas, l'empreinte mémoire est inexistante.
J'ai fait un test en utilisant les mêmes méthodes que SQLite pour HFSQL, les résultats sont les mêmes. Le problème viendrait donc bien du moteur de base de données. Ou, je l'espère, d'un problème de configuration dans ma base de données.

Je suis perplexe, et mon choix technique dépend, évidemment, fortement des performances du moteur HFSQL.

Quelqu'un aurait-il une idée ou une indication à tester?

Merci!
Miembro registrado
12 mensajes
Publicado el 18,mayo 2020 - 14:32
La mise en page du tableau de benchmarking a un peu sauté, les colonnes de valeur sont:
1 - nb d'enregistrements requêtés
2 - temps d'exécution pour DB HFSQL, avec libération des requêtes à chaque fois
3 - temps d'exécution pour DB HFSQL, sans libération des requêtes
4 - temps d'exécution pour DB SQLite
Miembro registrado
237 mensajes
Publicado el 18,mayo 2020 - 16:16
Bonjour,

je pense qu'utiliser une source de données ( fonction LitHFSQL() ) doit induire un traitement en interne entre la variable source de données et le moteur HFCS.

essayer avec la fonction suivante
PROCÉDURE LitHFSQL_req(piCount est un entier)

req_SelectStmt est une Requête SQL =
[
SELECT Valeur FROM test WHERE IDTest = {pIDTest}
]

HConnecte("*")

iIndex est un entier = 1

TANTQUE iIndex <= piCount
req_SelectStmt.pIDTest = iIndex
HExécuteRequête(req_SelectStmt , hRequêteSansCorrectionHF)
HlibereRequete(req_SelectStmt )
iIndex++
FIN

HFerme("*")


et vous aurez aussi des temps de réponse plus rapide en utilisant le générateur de requete au lieu de déclarer une variable requette sql.


Attention aussi les fonctions HExécuteRequêteSQL et HExécuteRequête prépare la requete sur le serveur en parallèle
c'est au premier parcours que les données sont lus donc vous aurez également une grosse différences suivant le nombre de résultat que renvoie votre requete.


Pour que vos chiffres soit plus exact, je pense que vous devriez afficher ou parcourir vos résultats vu que le nombre sera identique vous aurez le temps total de parcours.



Aussi sur HExécuteRequêteSQL et HExécuteRequête, j'ajoute toujours hRequêteSansCorrectionHF et je test aussi avec les options hOptimiseurV1 puis hOptimiseurV2 qui corresponde à des changements dans la gestion du Standart SQL ce qui peut induire des ralentissements dans des requêtes sql


Personnellement j'utilise HFSQL parce que l’analyse d'origine contient des tableaux et que historiquement tous à été fait en windev mais si je devait donner mon avis je passerais sans hésité sur un autre sgbd

Si tu ne compte pas utiliser de mémo ou des tableaux et que tu as suffisamment de connaissance pour gérer le sgbd qui sera plus complexe à mettre en place que HFCS (sécurité,sauvegarde,droit). Ben prends le SQLite après cela reste que mon avis personnelle je n'ai aucun chiffre pour confirmer ou infirmer les tiens.


Note : tu utilises qu'une simple requête pense à faire la même chose avec des relations.
Miembro registrado
12 mensajes
Publicado el 18,mayo 2020 - 17:50
Merci pour toutes ces suggestions!
Pour ma part aussi, il s'agit d'un projet historiquement développé avec une DB HFSQL locale.

J'ai effectué le test en utilisant une variable de type Requête SQL, les temps sont identiques à la version avec libération de la requête à chaque itération. A savoir pour 1000 itérations, environ 15sec.
Les flags hOptimiseurV1 et V2 (que je n'ai pas trouvé dans la documentation des fonctions HExecuteRequete et HExecuteRequeteSQL) ne provoquent aucun changement.

Le générateur de requête fait-il référence aux requêtes stockées? Je n'ai pas encore eu l'occasion de l'utiliser, et d'après ce que j'ai vu dans la documentation c'est uniquement pour être utilisé dans les procédures stockées en mode Client/Serveur?

Malheureusement la problématique de changement de SGBD ne se pose pas puisque ce n'est pas envisageable pour l'instant. Sinon oui, SQLite pour rester simple et très efficace (déjà utilisé avec des tables contenant des centaines de milliers d'enregistrements, en faisant des jointures et requêtes imbriquées, c'est un moteur impressionnant), ou PostgreSQL si besoin d'un serveur (déjà installé/configuré/utilisé aussi).

Je testerai des cas un peu plus complexes si déjà de simples select peuvent s'exécuter plus rapidement :-(
En faisant les choses "proprement" (en libérant la requête), il y a un rapport de quasi 1 pour 1000 entre SQLite et HFSQL.

Précision: je suis en version 25
Miembro registrado
2.321 mensajes
Publicado el 19,mayo 2020 - 09:32
De quoi s'agit-il ?
"options hOptimiseurV1 puis hOptimiseurV2" ????

--
Bon dev,
Jean-Pierre
Miembro registrado
499 mensajes
Publicado el 19,mayo 2020 - 09:36
Bonjour,

Ne serait-il pas plus "égalitaire" de réaliser les tests SQLite également avec les fonctions HExecuteRequeteSQL() ?

Non pas que je sois un grand fan de HFSQL local, mais il me semble un peu rapide d'utiliser les fonctions SQL, qui sont un niveau en dessous des fonctions H uniquement pour SQLite, et d'en déduire directement que c'est le SGBD qui est en cause.

Si les tests utilisent le même code, le résultat n'en sera que plus criant de vérité. :)
Miembro registrado
237 mensajes
Publicado el 19,mayo 2020 - 09:52
Bonjour,

je parlais pour l'éditeur de requête des requêtes que tu enregistres dans ton projet au dessus de classe dans l'éditeur de projet.
Je sais que la même requête enregistré dans le projet et une requête déclaré en variable j'ai un gain de vitesse.

Après j'ai pas demandé, c'est quoi ta configuration HFCS ? tu peux peut être jouer dessus pour augmenter les performances.
http://www.ldsysteme.fr/fileadmin/ldactu/ldactu/actualites/newsNote.php…

je remet aussi si tu ne connaissais pas : https://blogs.pcsoft.fr/fr/category/hfsql-performances/posts.awp

je sais que j'ai aussi déclarer un connexion en lecture uniquement pour mes selects mais je ne crois pas qu'il y ait un gain de temps en HFSQL vue que les curseur ne sont pas géré.
Publicado el 19,mayo 2020 - 10:36
Après mûre réflexion, VincentRG a écrit :
Bonjour,

Je vois que ce sujet a été traité quelques fois, mais comme les choses
évoluent et que je suis "nouveau" sur WinDev, j'ose imaginer qu'il y a soit
eu des nouveautés depuis ces posts, soit j'ai quelque chose de mal configuré.
J'ai plusieurs années d'expériences avec des DB SQLite, je sais à quel niveau
de performance on peut s'attendre même sur une base de données "locale".

Le projet sur lequel je travaille possède une base de données HFSQL
"classique" (donc locale). En réflexion sur une fonctionnalité, je voulais
voir ce que HFSQL peut encaisser en volume de données avant de valider une
solution technique.

J'ai donc créé une table très simple: un identifiant (entier, clé primaire),
une valeur texte (rempli avec des guid, mais peu importe). Cette table
contient 100 000 lignes. Mon test est simple: lire chacune des lignes avec
autant de requête en utilisant l'identifiant, donc... 100 000 requêtes.

D'autre part, à titre de comparaison, je crée la même table dans une DB
SQLite.

Après quelques constats sur la libération des sources de données, je fais un
benchmark des 3 codes suivants:

1e version, avec libération des sources de données, avec DB HFSQL
Procedure LitHFSQL(piCount est un entier)

sSelectStmt est une chaîne = "select Valeur from test where IDTest = %1"
sdSelect est une Source dede Données
HConnecte("*")

iIndex est un entier = 1

TANTQUE iIndex <= piCount
HExécuteRequêteSQL(sdSelect, ChaîneConstruit(sSelectStmt, iIndex))
HAnnuleDéclaration(sdSelect)

iIndex++
FIN

HFerme("*")


2e version, sans libération des sources de données, avec DB HFSQL
Procedure LitHFSQL_fast(piCount est un entier)

sSelectStmt est une chaîne = "select Valeur from test where IDTest = %1"
HConnecte("*")

iIndex est un entier = 1

TANTQUE iIndex <= piCount
HExécuteRequêteSQL("sdSelect" + iIndex, ChaîneConstruit(sSelectStmt,
iIndex))

iIndex++
FIN

HFerme("*")


3e version, DB SQLite
Procedure LitSQLite(piCount est un entier)

sSelectStmt est une chaîne = "select Valeur from test where IDTest = %1"
testConnexion est un entier = SQLConnecte("test09.db", "", "", "", "SQLITE")

iIndex est un entier = 1

TANTQUE iIndex <= piCount
SQLExec(ChaîneConstruit(sSelectStmt, iIndex), "SelectTest")
SQLFerme("SelectTest")

iIndex++
FIN

SQLDéconnecte()


Voici les résultats obtenus (en secondes), en fonction du nombre
d'enregistrements lus
HFSQL avec libération    HFSQL sans libération SQLite
100           1,385                    0,016             0,002
500           7,518                    0,074             0,019
1000         14,304                    0,144             0,016
2000         28,268                    0,261             0,032
5000         68,767                    0,744             0,074
10000          *                       1,527             0,148
100000         *                      48,284             1,5

* Etant donné le temps que cela prendrait, je n'ai même pas fait ce test dans
ce cas.

A noter que, bien évidemment, sans libération des ressources, l'empreinte
mémoire explose littéralement: 2,7Go en RAM pour seulement 100 000 lignes
lues!
A coté de ça, le moteur SQLite ne bronche pas, l'empreinte mémoire est
inexistante.
J'ai fait un test en utilisant les mêmes méthodes que SQLite pour HFSQL, les
résultats sont les mêmes. Le problème viendrait donc bien du moteur de base
de données. Ou, je l'espère, d'un problème de configuration dans ma base de
données.

Je suis perplexe, et mon choix technique dépend, évidemment, fortement des
performances du moteur HFSQL.

Quelqu'un aurait-il une idée ou une indication à tester?

Merci!


bonjour,

sans être exhaustif et qui ne reflète que mon avis voici mon retour
d'expérience

1 - si vous utilisez HFSQL en local (=> application et BDD installé sur
le même PC) vous ne trouverez pas plus rapide que les fonctions H*
(HLit*, etc.)

2 - si vous utilisez HFSQL en réseau (=> application sur PC et BDD sur
poste serveur en partage de fichier sans utiliser le serveur Manta) vos
ne trouverez pas plus rapide que les fonctions H* (HLit*, etc.) =>
cette configuration n'est pas ce qu'il y a des plus optimisé

3 - si vous utilisez HFSQL C/S (=> application sur PC et BDD sur poste
serveur avec Manta) vous ne trouverez pas plus rapide que d'utiliser
des requêtes

pour 1 et 2 les sélections de données complexes pourront se faire par
requête

HFSQL ne reste que du "fichier indexé" sur lequel on mis un moteur de
BDD pour le mettre en C/S

en ce qui me concerne, j'ai choisit il y a bien longtemps de ne plus
utilisez HFSQL (cela ne m'empêche pas de regarder et tester les
évolutions), actuellement j'utilise MySQL (=> application multiposte)
et SQLite (application monoposte et android)

--
Cordialement JeAn-PhI
Miembro registrado
12 mensajes
Publicado el 19,mayo 2020 - 15:49
@Benjamin
J'ai donc réalisé en plus un test "croisé":
1 - accès SQLite avec les fonctions "H"
2 - accès HFSQL avec SQLConnecte et autres fonctions SQL

Le test 1 donne un résultat 10x plus lent que du SQLite avec accès "SQL" simple, mais ça reste 50x plus rapide que HFSQL avec les fonctions "H" (avec libération des requêtes).

Le test 2 ne change rien, même temps d'exécution que du HFSQL accédé avec les fonctions "H". Mais pour le même timing, la répartition est différente entre l'exécution de la requête et la libération des ressources:
- 5,8% pour HExecuteRequeteSQL() et 92,3% pour HLibereRequete()
- 27% pour SQLExec() et 72,3% pour SQLFerme()

Mais ma question à la base c'est surtout: est-ce qu'il y a des choses particulières à configurer pour que ça tourne mieux que ça?
Je passe régulièrement un coup de WDOptimiseur sur ma DB avec recalcul des index et des stats. Mais ma DB ne change pas, donc aucune raison de voir un changement avec ça.



@Gurdarr
Ok, test fait avec une requête créée dans le projet (je n'avais pas vu cet endroit). Cela ne change malheureusement rien du tout, j'ai le même timing que la requête soit une chaine de caractère, un objet "requête SQL" ou une requête créée dans le projet.

Le lien sur le site LD Systeme ne semble concerner que HFSQL en client/serveur, pour ma part il s'agit d'une DB locale.
Pour le second lien, sur le blog, finalement quasiment aucun article vraiment pertinent pour un cas de test aussi simple que des select sur une DB locale :-(

Par acquit de conscience, j'ai quand même rajouté le paramètre d'ouverture des DB en lecture seule. Ca ne change rien.

Merci beaucoup en tout cas de m'avoir donné ces informations.



@JeAn-PhI
Merci pour ces indications. Personnellement j'irai sur du SQLite pour DB locale, et PostgreSQL pour une DB réseau. Malheureusement c'est pour un projet qui existe de longue date, donc pas de migration à envisager. Le but est d'essayer de tirer le meilleur parti des technos utilisées. Et surtout que ça puisse continuer de tenir la charge.
Miembro registrado
499 mensajes
Publicado el 19,mayo 2020 - 17:46
VincentRG a écrit :
@Benjamin
J'ai donc réalisé en plus un test "croisé":
1 - accès SQLite avec les fonctions "H"
2 - accès HFSQL avec SQLConnecte et autres fonctions SQL

Le test 1 donne un résultat 10x plus lent que du SQLite avec accès "SQL" simple, mais ça reste 50x plus rapide que HFSQL avec les fonctions "H" (avec libération des requêtes).

Le test 2 ne change rien, même temps d'exécution que du HFSQL accédé avec les fonctions "H". Mais pour le même timing, la répartition est différente entre l'exécution de la requête et la libération des ressources:
- 5,8% pour HExecuteRequeteSQL() et 92,3% pour HLibereRequete()
- 27% pour SQLExec() et 72,3% pour SQLFerme()

Mais ma question à la base c'est surtout: est-ce qu'il y a des choses particulières à configurer pour que ça tourne mieux que ça?
Je passe régulièrement un coup de WDOptimiseur sur ma DB avec recalcul des index et des stats. Mais ma DB ne change pas, donc aucune raison de voir un changement avec ça.


OK comme je m'en doutais l'avantage reste très clairement pour SQLite. Et je pense qu'à ce niveau il n'y a rien de "plus" à faire pour vous, si ce n'est vérifier que vos indices dans les tables sont corrects (seul point commun d'optimisation qui n'a pas encore été évoqué je crois).

Il faut se rendre à l'évidence de plusieurs points :
- HFSQL en local (anciennement Hyperfile SQL) est un "vieux truc", la première version est sortie en 1993. SQLite est plus "récent" (première version en 2000). La version locale est à mon avis délaissée en terme d'investissement chez PC Soft, tout se porte vers la version Client/Serveur.
- SQLite est une base de données ultra-testée, ultra-utilisée (Android, navigateurs, et pleins d'autres endroits), et bénéficie donc d'un support et d'un suivi mille fois plus important que HFSQL. Il semble logique que ses performances soient meilleures (puisqu'elles profitent au plus grand nombre)
- Si ce genre de benchmark est intéressant en terme de performances pures, dans la pratique la différence est moins notable. Si je chope un dev faire 100k lookup de ce genre dans du code métier, que ça soit rapide ou non, il se prendra le même nombre de coups de pieds au cul :D

Il reste à noter que la migration de Hyperfile à SQLite peut se faire relativement "secrètement", les fonctions H étant les mêmes dans les deux cas (et si l'utilisation est à peu près "simple", sans triggers suspects ou utilisation de fonctions natives Wlangage dans les requêtes SQL). Le plus compliqué est de gérer le contenu déjà présent dans la base et son transfert dans la nouvelle base SQLite, mais une fois que c'est fait, on ne se pose plus de questions.
Miembro registrado
334 mensajes
Publicado el 19,mayo 2020 - 18:51
J’ai eu envie moi aussi de faire des test comparatif, mais pas moyen de trouver un lien pour télécharger le client natif pour Windev 25 de SQLITE !

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Miembro registrado
237 mensajes
Publicado el 19,mayo 2020 - 19:14
VincentRG : Depuis le début j'étais persuadé que vous étiez en client / serveur du coup effectivement oublier le SQL en HFSQL en local les performances seront toujours catastrophiques par rapport aux fonctions H
Je suis par contre intéressé par l'idée que soulève Benjamin à savoir < migrer "secrètement" vers du Sqlite > mais attention, je crois pas que toutes les rubriques (clef composé ... tableau...) soit supportés par Sqlite (après je connais pas bien SQLite) mais si sa marche je vais aller chercher 2 3 vieux projet et les migrer direct surtout si les fonctions H sont supportés cela sera que plus rapide.

Jean-Pierre
hOptimiseurV1 et hOptimiseurV2 ne sont pas disponible sur la documentation sans doute un oublis il s'agit d'utiliser ou non tel standart de SQL
En fait, pcsoft tente de coller au standard de SQL et parfois cela les oblige lors d'un changement de version à modifier le fonctionnement interne de leur traitement du SQL ce qui peut donner lieu à des up ou down en temps de traitement des requettes sql simplement parce que vous avez migrer vers une nouvelle version de Windev
d’où ces options qui permettent de réactiver l'ancien fonctionnement. (Je n'arrive pas à remettre la main sur la réponse exact que m'avait fait le support sur ce point)
Miembro registrado
12 mensajes
Publicado el 20,mayo 2020 - 09:01
@Benjamin
Au sujet des index, j'avais justement précisé ce point dans ma réponse précédente:
"Je passe régulièrement un coup de WDOptimiseur sur ma DB avec recalcul des index et des stats. Mais ma DB ne change pas, donc aucune raison de voir un changement avec ça."

Ce genre de cas (multitude de requêtes SELECT) est un cas de figure "pratique". Lorsqu'on implémente le design pattern DAO, c'est justement ce qu'il se passe.


@Gurdarr
SQLite gère seulement quelques types (4 ou 5), très basiques, mais qui permettent de tout faire. J'avoue que dans WinDev il y a presque "trop" de types différents!
Publicado el 20,mayo 2020 - 10:04
Il se trouve que Gurdarr a formulé :
VincentRG : Depuis le début j'étais persuadé que vous étiez en client /
serveur du coup effectivement oublier le SQL en HFSQL en local les
performances seront toujours catastrophiques par rapport aux fonctions H
Je suis par contre intéressé par l'idée que soulève Benjamin à savoir <
migrer "secrètement" vers du Sqlite > mais attention, je crois pas que toutes
les rubriques (clef composé ... tableau...) soit supportés par Sqlite (après
je connais pas bien SQLite) mais si sa marche je vais aller chercher 2 3
vieux projet et les migrer direct surtout si les fonctions H sont supportés
cela sera que plus rapide.

comme les clés et les index ne sont pas séparés en HF c'est un peu la
confusion

clé primaire composé en HF = clé primaire sur les colonnes composant la
clé en SQLite

clé doublons en HF = index sur SQLite

il existe aussi la notion d'index unique qui pourrait correspondre à :
clé unique en HF = index unique en SQLite

quant aux rubriques tableau c'est pour moi une mauvaise chose mais qui
peut être aisément remplacer pour une "sous-table", dans ce cas le
tableau est reporté dans une table en liaison avec la 1ère avec uns
structure comme suit

- idt_auto (integer NOT NULL PRIMARY KEY AUTOINCREMENT => pour pouvoir
supprime un et un seul enreg)
- id_fk (CONSTRAINT [nom_de_la_contrainte] REFERENCES
[table_principale]([cle_primaire]) même type que la table principale
mais qui sera un idex non unique => clé étrangère)
- val_tab (valeur du tableau)

--
Cordialement JeAn-PhI
Miembro registrado
2.682 mensajes
Publicado el 20,mayo 2020 - 10:28
Pour ma part, j'essaye d'utiliser HFSQL le moins possible. Encore cette semaine la même requête lancée sur HFSQL et Postgresql donne des résultats bien différents:
HFSQL: 20 secondes
Postgresql: 40 ms

Le grand vainqueur est Postgresql !!!

Alors le vrai soucis c'est que HFSQL n'est à mon sens pas un SGBD C/S à proprement parlé. Il n'évolue que très peu en fonction de la norme SQL et est à des années lumières des SGBD qu'on peut trouver gratuit ou non.

J'ai encore eu un problème avec le mode d'isolation des transactions sur HFSQL qui par défaut est en "READ UNCOMMITTED". Ce qui a entrainé des problèmes montrueux avant qu'on s'en rende compte. Pour le coup ils auraient pu déroger à la règle et passer en "READ COMMITTED" comme tous les gros SGBD. De plus on ne peut pas changer lem ode d'isolation sur le serveur à priori il faut donc le changer directement dasn l'applicatif ce qui n'est absolument pas pratique. Du coup je n'ai jamais réussi à le faire fonctionner.

Concernant le SQL tant qu'il y a peu de jointures dans les requêtes, il ne s'en sort pas trop mal par contre si trop de jointures et trop de données alors là c'est la catastrophe.

HFSQL ne supporte pas non plus les requêtes trop complexes donc à mon sens c'est une base de donnée difficilement utilisable pour pour une application moyenne. Par contre ça convient bien pour des petites applications qui n'ont pas de gros besoins.

@Dergen Il n'ya pas d'accès natif à rajouter il est inclus dans windev dès le départ.

@VincentRG
SQLite gère seulement quelques types (4 ou 5), très basiques, mais qui permettent de tout faire. J'avoue que dans WinDev il y a presque "trop" de types différents!

Si tu trouves qu'il y a trop de type dans HFSQL que dire des autres SGBD...

--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
170 mensajes
Publicado el 20,mayo 2020 - 11:11
VincentRG a écrit :


Ce genre de cas (multitude de requêtes SELECT) est un cas de figure "pratique". Lorsqu'on implémente le design pattern DAO, c'est justement ce qu'il se passe.


J'utilise ce pattern et mes données sont insérées, modifiées et supprimées via cette méthode, cependant, il ne me viendrait pas à l'esprit de requêter n fois dans une boucle pour sélectionner mes résultats. J'utilise des requêtes SELECT dans tous les cas où j'attends plusieurs résultats, j'ai des jointures, ...

--
Hth,
Padbrain
Miembro registrado
12 mensajes
Publicado el 20,mayo 2020 - 11:11
Philippe SB a écrit :

@VincentRG
SQLite gère seulement quelques types (4 ou 5), très basiques, mais qui permettent de tout faire. J'avoue que dans WinDev il y a presque "trop" de types différents!

Si tu trouves qu'il y a trop de type dans HFSQL que dire des autres SGBD...


Oui j'avoue, quand on regarde PostgreSQL, c'est pas mal blindé aussi. Après je peux comprendre qu'il y en ait autant sur un serveur de base de données pour faire des traitements dans des procédures stockées par exemple. Avoir des variables typées déjà toutes faites pour des traitements particuliers, ça doit faciliter la tache.
C'est un problème qu'on ne rencontre pas sur une DB locale car les traitements n'auront pas forcément d'intérêt en procédures stockées.
Miembro registrado
194 mensajes
Publicado el 20,mayo 2020 - 18:52
Padbrain a écrit :
[...]
il ne me viendrait pas à l'esprit de requêter n fois dans une boucle pour sélectionner mes résultats. J'utilise des requêtes SELECT dans tous les cas où j'attends plusieurs résultats, j'ai des jointures, ...
[...]
De fait de fait... c'est bien mal parti tout ça, quel que soit le sgbd finalement retenu !

--
Côme, Clairinfo