2016-05-18 7 views
1

Ich habe ein Programm, dass mehrere Computer ausgeführt werden, die alle aus der gleichen SQLite-Datenbank lesen/schreiben müssen. Jedes Programm führt eine Aktion für eine Datei aus und fordert einen "verfügbaren" Dateinamen aus einer Liste an, die in einer SQLite-Tabelle gespeichert ist. Es wird höchstens 6-10 Benutzer geben. Pseudo-Code wäre ...Python 2.7: SQlite und Parallelität über mehrere Computer

con = sqlite.connection(db,timeout=60) 
filename = select file from tablename limit 1; 
update tablename set status ="busy" where file = filename; 
<..perform action. takes 2-5 minutes..> 
update tablename set status ="Finished" where file = filename; 
repeat 

So jede Transaktion ist sehr schnell, aber leider bin ich noch läuft in „db ist gesperrt“ Fragen, auch wenn ich die Verbindung Timeout wirklich hoch. Ich habe auf dem asynchronen vfs in apsw gelesen, aber es klingt wie der Warteschlangenmanager nur lokal auf einem Computer ist. Irgendwelche Tipps zum weiteren Vorgehen?

EDIT: Ich sollte hinzufügen, ich bin unter einer IT-Beschränkung und kann nicht einen richtigen SQL-Server an meinem Schreibtisch einrichten.

+3

Genau dafür sollte SQLite nicht verwendet werden. Verwenden Sie einen geeigneten Datenbankserver wie PostgreSQL. –

+0

Ich verstehe, aber IT-Einschränkungen werden es nicht zulassen – njfrazie

Antwort

0

(Disclosure: Ich bin der APSW-Autor) Das asynchrone VFS wurde vor einiger Zeit vom SQLite-Team veraltet und wurde seit Jahren nicht mehr in APSW aufgenommen. Eine wesentlich bessere integrierte äquivalente Funktionalität wird im SQLite-Core mit write ahead logging bereitgestellt.

... lokal für eine Maschine ...

Dass Sie SQLite über das Netzwerk zu verwenden versuchen impliziert. TU das nicht. Es wird nicht funktionieren. Es scheint zunächst zu funktionieren, aber schließlich wirst du Korruption bekommen. Sie können nicht im Voraus testen, um zu beweisen, dass die Korruption nicht passieren wird. More details here.