SQLite Datenbank offen lassen

Anfängerfragen zum Programmieren mit PureBasic.
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

SQLite Datenbank offen lassen

Beitrag von gnaps »

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
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Benutzeravatar
Waldixxl
Beiträge: 108
Registriert: 27.12.2005 17:35
Wohnort: Linz, Österreich

Re: SQLite Datenbank offen lassen

Beitrag von Waldixxl »

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
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
shim
Beiträge: 65
Registriert: 12.09.2004 23:09

Re: SQLite Datenbank offen lassen

Beitrag von shim »

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.
Windows 8.1 Pro 64 Bit | PB 5.31 x86
RomanR
Beiträge: 23
Registriert: 21.04.2006 13:43
Wohnort: Eisenstadt

Re: SQLite Datenbank offen lassen

Beitrag von RomanR »

shim 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.
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...).

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
Benutzeravatar
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

Beitrag von ts-soft »

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...).
Du vergißt, das Oracle ein Datenbankserver ist, während SQLite eine lokale Datenbank ist!

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.
Bild
RomanR
Beiträge: 23
Registriert: 21.04.2006 13:43
Wohnort: Eisenstadt

Re: SQLite Datenbank offen lassen

Beitrag von RomanR »

ts-soft hat geschrieben:Es gibt keinerlei Schutzmechanismen, lediglich die Dateiattribute können dafür mißbraucht werden.
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.

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
Antworten