-
[HSQLDB] C'est trop lent
Bonjour, voila j'utilise une base donnée HSQLDB pour gerer des questionnaire.
J'ai fais ce choix car je voulais une base de données embarqué et portable. Le problème c'est que c'est beaucoup trop long, notament et surtout à l'ouvertur de la base de données.
J'utilise des tables mise memoire, et je pense que le problème doit venir de là. Mon fichier .scripte pese dans les 15 Mo, et doit pouvoir etre encore plus gros.
J'ai crue comprendre que HSQL pouvait etre stocker dans tables en modes text, jai regardé la doc sur le site, mais je dois avouer que je n'ai pas du tout compris (je ne trouve pas la doc très clair, mais il est vrai que mon anglais laisse pafois à désirer).
J'aurais donc voulue plusieurs choses :
Tout d'abord est ce qu'en passant par des fichiers text, cela sera plus rapide (pour l'ouverture) ?
Si oui, quelqu'un pourrait i lm'expliquer comment cela marche ?
Sinon, vers quel autres base de données puis je me porter ?
-
Une solution très pratiquée à l'heure actuelle quand on veut sauvegarder des données sans utiliser de base de données externe est de gérer la persistance sous la forme de fichiers XML.
Un des avantages (ou défauts... cela dépend de l'utilisation qu'on veut en faire) est qu'il est possible d'aller modifier les données directement en éditant directement les fichiers XML en question, ceux-ci étant lisibles et compréhensibles en mode texte.
Par exemple GanttProject gère la persistance et la sauvegarde des projets en XML.
-
J'y avais penser, mais la une base de données est obligatoire, mais merci ^^
-
Bonjour,
j'ai utilisé HSQLDB et je n'ai pas eu de problèmes majeures surtout de timing puisque c'est une des plus rapides Base de données embarquées.
Sinon je me suis toutnées sur H2 et puis enfin qui est devenu ma preferé sur DERBY quis sera d'ailleurs native dans la prochaine version de JAVA.
tu as une documentation tres complète sur leur site :
http://db.apache.org/derby/
-
Qu'as tu mis en place comme index, attaques tu tes bases selon les colonnes indexées lorsque tu lances des requêtes lourdes, quand codes une requête utilises des jointures internes ou des sous requêtes?
En général ce n'est pas le SGBD (enfin pas plus que çà) qui est lent mais plutôt la conception qui est limite, ou les requêtes qui sont mal foutues (un query plan foireux suffit pour que ta requête prenne trois plombes).
++
-
Mh merci bien, je regardais justement JavaDB (qui est si je comprend bien le noueau nom de Derby). Sinon j'aimerais ne pas avoir à changer de bd, donc pour vérifier, tu dis que tu n'avais pas de problème de lenteur sous HSQL ?
La, j'ai un fichier .script qui doit faire 15 Mo, et pour juste ouvrir la base (donc faire
Code:
connexion = DriverManager.getConnection("jdbc:hsqldb:file:"nomBD, "sa", "");
cela me prend bien 8s. Et certaine requete deviennent parfois très longue.
Edit ah, je n'avais pas vu le message de sinok.
Bah, il ya deux problème, le premier qui est la lenteur au niveau de l'ouverture.
Le deuxième au niveau des requetes.
POur les indexs, oui j'ai mis en place plusieurs indexs. Mes requetes sont faite par des sous requetes en général, mais celle qui me posent problèmes sont des requetes toutes simple.
reedit : si mon fichier script pass à un peu plue de 16Mo, je passe à 25 s pour ouvrir la base de données ...
Je n'ai aucune idée si c'est normal ou pas en fait :/