Envoyé par : jreeman
Date : 19/08/2006 17:00
Oulaaa... après quelques tests mozstorage n'est pas du tout performant.
Je lance 100 insert et mon navigateur est bloqué pendant 3-4 secondes...
C'est aussi les temps de réponses que vous avez expérimenté ?
Envoyé par : jreeman
Date : 19/08/2006 17:14
jreeman a écrit:
Oulaaa... après quelques tests mozstorage n'est
pas du tout performant.
Je lance 100 insert et mon navigateur est bloqué
pendant 3-4 secondes...
C'est aussi les temps de réponses que vous avez
expérimenté ?
Ha, je fais aucune transaction je lance 100 fois ceci :
var stmt = connection.createStatement("INSERT INTO maTable (id, value) VALUES ( (select max(id)+1 from maTable), ?)"); stmt.bindCStringParameter(0, "test"); stmt.execute();
En fait, le temps de réponses est même supérieur à 5 secondes.
Avec le sql-manager, j'ai des temps de réponses similaires lorsque je fait Exécuter tout sur 100 insert.
Le code derriere Exécuter tout est optimisé puisque dans ce code, on passe qu'une seule fois la chaine SQL (contenant les 100 insert) et c'est sqlite qui se charge ensuite de l'exécution, il n'y a pas de bouche notamment, donc c'est bien mozstorage ou sqlite qui est super lent...
C'est drole étant donné que sqlite est une bibliothèque en C s'imbriquant en plus en local dans les applications l'utilisant, je suis très surpris quand même.
Envoyé par : jreeman
Date : 19/08/2006 17:27
Ok voici ce que j'ai trouvé sur le site de sqlite...:
Test 1: 1000 INSERTs
CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100));
INSERT INTO t1 VALUES(1,13153,'thirteen thousand one hundred fifty three');
INSERT INTO t1 VALUES(2,75560,'seventy five thousand five hundred sixty');
... 995 lines omitted
INSERT INTO t1 VALUES(998,66289,'sixty six thousand two hundred eighty nine');
INSERT INTO t1 VALUES(999,24322,'twenty four thousand three hundred twenty two');
INSERT INTO t1 VALUES(1000,94142,'ninety four thousand one hundred forty two');
PostgreSQL: 4.373
MySQL: 0.114
SQLite 2.7.6: 13.061
SQLite 2.7.6 (nosync): 0.223
Donc c'est bien c'est bien ça. Avec l'option nosync on revient avec des temps de réponses convenables. Je m'en vais voir comme désactiver la sychronisation. Si vous avez une idée dites le moi, ca m'évitera de chercher pendant des erreurs si ca se trouve.
PS : Pour le sqlite-manager ca pourrait aussi t'interesser ;).
Envoyé par : jreeman
Date : 19/08/2006 17:29
Ha oui on peut conclure que sqlite est lent sur les insert mais mozstorage n'est aussi surmeent pas très rapide non plus.
Meme en désactivant la synchronisation, je ne suis pas confiant pour avoir des temps acceptables. Je vous tiens au courant.
Envoyé par : jreeman
Date : 19/08/2006 18:10
Ok je vous conseille un connection.executeSimpleSQL("PRAGMA synchronous=off");
Ca change du tout au tout... surtout que cette option peut etre desactivé pour des applications non critiques comme la plupart des applications XUL...
Ceci est expliqué ici : http://www.sqlite.org/pragma.html
Pour info, pour améliorer les performances, il est aussi conseillé de regrouper des instructions dans une transaction. Donc de faire un :
connection.begin ... connection.commit ou connection.rollback
Envoyé par : jreeman
Date : 19/08/2006 18:23
Il y a aussi cela : http://web.utk.edu/~jplyon/sqlite/SQLite(..)
Envoyé par : thefab
Date : 19/08/2006 18:56
Super, merci bien pour tous ces renseignements je vais de ce pas lire tout ça et je te tiens au courant.
Fabrice
Envoyé par : jreeman
Date : 19/08/2006 20:06
Formidable en conjuguant les optimisations 100 insert (à peu près l'ordre de ce que fait mon extention) un seul coup passent pratiquement inaperçu.
Envoyé par : jreeman
Date : 21/08/2006 12:03
Finalement, pour mes besoins je vais surement utiliser RDF pour stocker mes données. Et depuis que je connais ce format et cette tehcno, effectivement, je mitige mon point de vue sur les bases de données type sqlite coté client. C'est dommage cette base de données était très bien faite.
Envoyé par : thefab
Date : 21/08/2006 14:43
Merci pour toutes ces informations:
Avec
PRAGMA synchronous=OFF;
Et (même sur le requêtes qui ne modifie pas les données)
BEGIN TRANSACTION; COMMIT TRANSACTION;
C'est rapide, même avec 5000 INSERTs !
Pour le sqlite-manager ca pourrait aussi t'interesser ;)
Adopté ;-)
Fabrice
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.