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.
Partager