IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

Problème de concurrence d'accès sous Windows


Sujet :

SQLite

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 14
    Points : 10
    Points
    10
    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.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    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...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    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.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    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.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 136
    Points : 133
    Points
    133
    Par défaut
    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.
    ++

  6. #6
    Membre habitué

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 137
    Points : 161
    Points
    161
    Par défaut
    C'est un one man show ?


    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    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...

Discussions similaires

  1. Accès aux ports sous windows 7
    Par kimlee dans le forum C
    Réponses: 5
    Dernier message: 12/09/2012, 17h32
  2. Lenteur accès à la base sous windows 7 pro
    Par nakapuce dans le forum Administration
    Réponses: 4
    Dernier message: 18/04/2012, 08h50
  3. Problemes acces serveur samba sous windows
    Par djew13 dans le forum Réseau
    Réponses: 1
    Dernier message: 24/10/2008, 16h49
  4. Accès à un répertoire sous windows 2003 server
    Par gege87270 dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 11/05/2008, 23h34
  5. [MS-DOS] accès au dos sous Windows Vista
    Par sephirothmana dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 04/08/2006, 00h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo