Hi Leute,
fummle hier schon seit längerem mit einer SQLite Datenbank. Funkt soweit auch alles.
Nur beschäftigt mich folgende Frage.
Soll ich die Datenbank beim Programmstart einmal öffnen und offen lassen bis Programmende ?
oder
Datenbank öffenen Daten holen und dann gleich wieder schließen ?
Wie verhält sich das ganze im Netzwerk, wenn mehrere auf die Datenbank zugreifen?
Wäre schön wenn ich hier die beste Lösung erfahren würde.
Gruß
gnaps
SQLite Datenbank offen lassen
SQLite Datenbank offen lassen
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Re: SQLite Datenbank offen lassen
Hallo gnaps
Lesezugriffe können im Netzwerk gleichzeitig gemacht werde.
bei Schreibzugriffe wird die Datenbank gesperrt bis sie geschlossen wird.(auch für lesezugriffe)
Also, wenn Du von mehreren Stellen aus den Netzwerk zugreifen willst, muss die Datenbank immer geschlossen werden.
Walter
Lesezugriffe können im Netzwerk gleichzeitig gemacht werde.
bei Schreibzugriffe wird die Datenbank gesperrt bis sie geschlossen wird.(auch für lesezugriffe)
Also, wenn Du von mehreren Stellen aus den Netzwerk zugreifen willst, muss die Datenbank immer geschlossen werden.
Walter
Lesen bei schlechten Lichtverhältnissen ist nicht schlecht für die Augen, sondern trainiert sie sogar.
Linux Ubuntu Mate 18.04
PB 5.71
Intel i5
Linux Ubuntu Mate 18.04
PB 5.71
Intel i5
Re: SQLite Datenbank offen lassen
Würde ich jetzt mal nicht unbedingt so stehenlassen.
SQLite-Dateien sollten problemlos auch im Netzwerk mehrfach geöffnet werden können und vor allem auch beschreibbar bleiben. Richtig ist, das die komplette Datei zum Schreibzeitpunkt gesperrt wird, nach erfolgreichem schreiben aber sofort wieder bereit ist.
Zum Test kann man einfach mal eine Datei öffnen, offen lassen und z.B. mit SQLiteAdmin versuchen darin zu schreiben. Das sollte gehen.
Ob eine SQLite-Datei immer geöffnet sein sollte, ist aus meiner Sicht wenn überhaupt eine Frage der Sicherheit: Geschlossene Dateien gehen weniger leicht kaputt... Ggf. kostet das Öffnen und Schließen zudem auch Geschwindigkeit.
In meinem System wird die Datenbank geöffnet und bleibt auch geöffnet. Zu Beginn der Entwicklung hatte ich das auch schonmal anders.
SQLite-Dateien sollten problemlos auch im Netzwerk mehrfach geöffnet werden können und vor allem auch beschreibbar bleiben. Richtig ist, das die komplette Datei zum Schreibzeitpunkt gesperrt wird, nach erfolgreichem schreiben aber sofort wieder bereit ist.
Zum Test kann man einfach mal eine Datei öffnen, offen lassen und z.B. mit SQLiteAdmin versuchen darin zu schreiben. Das sollte gehen.
Ob eine SQLite-Datei immer geöffnet sein sollte, ist aus meiner Sicht wenn überhaupt eine Frage der Sicherheit: Geschlossene Dateien gehen weniger leicht kaputt... Ggf. kostet das Öffnen und Schließen zudem auch Geschwindigkeit.
In meinem System wird die Datenbank geöffnet und bleibt auch geöffnet. Zu Beginn der Entwicklung hatte ich das auch schonmal anders.
Windows 8.1 Pro 64 Bit | PB 5.31 x86
Re: SQLite Datenbank offen lassen
Ist ja der Sinn von Datenbanken. Habe jetzt SQLite nicht genau im Kopf, aber bei Oracle gibt es mehrere Mechanismen, um mehrfachen Zugriff zu ermöglichen (z.B. werden daten erst mit "Commit" in die DB geschrieben (ausnahem Autocommit ist eingeschaltetshim hat geschrieben:SQLite-Dateien sollten problemlos auch im Netzwerk mehrfach geöffnet werden können und vor allem auch beschreibbar bleiben. Richtig ist, das die komplette Datei zum Schreibzeitpunkt gesperrt wird, nach erfolgreichem schreiben aber sofort wieder bereit ist.

Sonst kommt es im Speziellen auf die Anwendung an, ob man die DB wieder schließt.
Beispiele:
* Programm fragt Sensoren ab und schreibt Ergibnis in DB -> DB sollte (muß) offen bleiben.
* "Dämon" läuft ständig im Hintergrund und schreibt nur hin und wieder in die DB -> es ist besser, die DB zwischendurch zu schließen und bei Bedarf wieder zu öffnen (ev. mit Timer).
So giebt es unzählige Situationen, wo einmal die eine Variante und manchmal die andere Variante besser ist.
CU RR
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: SQLite Datenbank offen lassen
Du vergißt, das Oracle ein Datenbankserver ist, während SQLite eine lokale Datenbank ist!RomanR hat geschrieben:Ist ja der Sinn von Datenbanken. Habe jetzt SQLite nicht genau im Kopf, aber bei Oracle gibt es mehrere Mechanismen, um mehrfachen Zugriff zu ermöglichen (z.B. werden daten erst mit "Commit" in die DB geschrieben (ausnahem Autocommit ist eingeschaltet) oder man verwendet Transaktionen oder sperrt gezielt einzelne Tabellen...).
Es gibt keinerlei Schutzmechanismen, lediglich die Dateiattribute können dafür mißbraucht werden.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: SQLite Datenbank offen lassen
Das ist prinzipiell richtig. Ein Zitat aus den SQLite FAQs bestätigt das (SQLite allows multiple processes to have the database file open at once, and for multiple processes to read the database at once. When any process wants to write, it must lock the entire database file for the duration of its update. But that normally only takes a few milliseconds.). Allerdings wird das (normalerweise) nicht über Dateiattribute bewerkstelligt, sondern über Filesystem-Locks.ts-soft hat geschrieben:Es gibt keinerlei Schutzmechanismen, lediglich die Dateiattribute können dafür mißbraucht werden.
Der Sinn von SQLite ist eher einem Programm die Funktionalität einer Datenbank zu geben, ohne einen eigenen Server dafür installieren zu müssen. Außerdem kümmert sich SQLite vollkommen um Transaktionen, sodaß Programmabstürze, Betriebssystem-Crahes oder Stromausfälle während des Schreibens in die DB zu keiner korrupten DB führen. Die Änderungen sind entweder komplett übernommen oder gar nicht.
Die speziellere Frage ist, wie wird auf eine Datei übers Netzwerk zugegriffen. Wird nur von Windows-Rechnern zugegriffen, sollte es warscheinlich keine Probleme geben. Wenn auch von Linux/Mac-Rechnern zugegriffen werden soll, dann kann es je nach verwendeter Methode (Nfs oder Samba) zu Problemen kommen (Locking-Mechanismus funktioniert bei Nfs NICHT !!).
Sollte also wirklich massiv von mehreren Rechnern (und/oder verschiedenen Betriebssystemen) auf dei DB zugegriffen werden, dann sollte man eine "richtige" Datenbank verwenden. Für PureBasic bietet sich PostgreSQL an, da dieser DB-Server native unterstützt wird. (Sollte ich es endlich schaffen, alle 675 Funktionen der OCILIB 3.12.1 in ein IncludeFile zu verpacken, dann kann man auch Oracle verwenden. OracleXE ist frei verfügbar...)
CU RR