Précédent   Forum des professionnels en informatique > Bases de données > Autres SGBD > SQLite
SQLite Forum d'entraide SQLite
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/04/2005, 11h00   #1
Invité régulier
 
Inscription : avril 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 14
Points : 5
Points : 5
Envoyer un message via MSN à DJZiaK
Par défaut Problème de concurrence d'accès sous Windows

Bonjour,
je suis actuellement en stage pour mon DUT Informatique et je dois réaliser une couche portable Windows/Linux qui permette d'accéder, d'écrire, de lire, dans une base SQLite. Pour l'instant, j'ai réalisé cette couche, en m'appuyant sur la classe CppSQLite, et cela fonctionne parfaitement sous Linux. (Pourtant j'ai codé sous Windows avec Visual C++ 6 ).
En fait, mon problème est le suivant : j'ai réalisé un programme de test qui fait une transaction de 200 000 insertions dans la base. Lorsque j'en lance un seul, pas de problème. J'en lance deux, pas de problème non plus, mon algo qui permet de gérer la concurrence d'accès fonctionne. En fait, lorsqu'une requête se solde par un SQLITE_BUSY, je stocke cette requête dans un vecteur. Ensuite, avant de fermer la base, je retente les requêtes contenues dans le vecteur. Si jamais ya encore SQLITE_BUSY, ben re-stockage dans le vecteur, etc.
Par contre, quand j'en lance 3 à la fois, ça foire : les 2 permières transactions fonctionnent correctement et font leurs inserts, avec de bonnes performances. Par contre, la 3ème transaction se bloque sur son premier insert : j'ai débuggé avec Visual C++, et je me suis aperçu qu'en fait sqlite3_exec() ne renvoie même pas de code d'erreur, il se bloque tout simplement là-dessus.
Avec mon responsable, on ena parlé, et il m'a mis une idée en tête : c'est peut-être tout simplement un paramètre de Windows à changer.

Ah oui petite précision, on ne sait jamais : nous travaillons sous Windows 2000 et Linux Red Hat 7.1.

Donc résumé :
Linux -> nickel.
Windows -> bloquage de la 3ème transaction sur le premier insert.

Merci.
DJZiaK est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2005, 12h04   #2
Invité régulier
 
Inscription : avril 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 14
Points : 5
Points : 5
Envoyer un message via MSN à DJZiaK
Personne ne sait ?
Ca fait 30 ans que je cherche la solution à ce problème, je trouve pas, j'ai remis en cause mon algo des dizaines de fois, j'ai été voir sur le site offciel SQLite, un peu partout, sur des forums, j'ai cherché, et rien...
Et en plus ça marche sous Linux... rien que pour me narguer...
DJZiaK est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2005, 14h40   #3
Invité régulier
 
Inscription : avril 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 14
Points : 5
Points : 5
Envoyer un message via MSN à DJZiaK
J'ai un autre problème.
En fait sous Windows si je fais des séries d'insertions sans lancer de transaction à la main, c'est... 40 fois plus lent (j'ai mesuré) que sous Linux. Alors ça me paraît quand même bizarre cette affaire.
Je ne sais pas si c'est lié avec mon autre problème, mais peut-être que la solution de celui-ci m'aidera pour l'autre.
DJZiaK est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2005, 09h43   #4
Invité régulier
 
Inscription : avril 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 14
Points : 5
Points : 5
Envoyer un message via MSN à DJZiaK
YAHAHAHAAAAAAAA ! J'ai trouvé la solution à mon premier problème !!! En fait c'était une question de version de SQLite ! Après avoir recompilé 5000 fois la dll de différentes versions, je me suis rendu compte que j'avais oublié de la mettre dans system32 ... Et là j'ai essayé une version plus ancienne (3.0.6 au lieu de 3.2.1) et paf ça marche ! Mes 3 transactions se font sans problème.
Bon je mets pas [Résolu] devant mon message car ya encore le problème de la lenteur sous Windows.
Bon moi je m'en fous, a priori j'ai pas d'intérêt à ne pas utiliser de transaction, mais si jamais ça intéresse quelqu'un, on sait jamais.
DJZiaK est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2005, 16h27   #5
Membre régulier
 
Inscription : janvier 2004
Messages : 133
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 133
Points : 97
Points : 97
bonjour,
C'est un one man show ?
Malheureusement je ne peux pas t'aider pour ton problème, mais je le suis depuis le premier post. Allez bon courage, j'espère que tu arriveras à faire passer la 2ème à ton appli sous windows.
++
sympho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2005, 19h19   #6
Membre régulier
 
Inscription : septembre 2003
Messages : 137
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 137
Points : 99
Points : 99
Citation:
C'est un one man show ?


Citation:
Bon je mets pas [Résolu] devant mon message car ya encore le problème de la lenteur sous Windows.
Utilises-tu les transactions ?
Je veux dire :
Code :
1
2
3
BEGIN TRANSACTION 
//---200 000 insertions
COMMIT TRANSACTION
Car même Windows2000/XP est très rapide dans ce cas là...
En tout cas, je n'ai pas remarqué de lenteur particulière, au contraire...

Par contre si tu fais 200 000 fois ça:
Code :
1
2
3
BEGIN TRANSACTION  //optionnel dans ce cas
//---1 insertion
COMMIT TRANSACTION //optionnel dans ce cas
Evidemment, le code sera fortement dépendant du système d'exploitation. Car SQLite va verrouiller 200 000 fois le fichier BD. Et j'ai remarqué aussi la lenteur de SQLite/Windows2000 dans ce domaine.
slylafone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2005, 17h21   #7
Invité régulier
 
Inscription : avril 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 14
Points : 5
Points : 5
Envoyer un message via MSN à DJZiaK
Oui, c'est un one man show
Par contre il faut écouter quand on parle : la lenteur sous Windows, c'est quand je n'utilise pas de transactions (en fait quand sqlite fait 1 transaction par insert). C'est quand même 47 fois plus que sous Linux alors qu'avec des transactions, c'est plus rapide sous Windows (pas beaucoup mais un peu). Donc ça me paraît étrange...
DJZiaK est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h28.


 
 
 
 
Partenaires

Hébergement Web