Paralleler Mehrfachzugriff Datenbank
-
Ich möchte ein C++ Datenbank Interface entwickeln, welche DB ist noch offen.
Mehrere Task werden parallel Zugriff auf die DB haben.Wie ist das bei Client-Server Datenbanken (MySQL oder PostgreSQL z.B.) mit parallelem Zugriff?
Muss ich das selber steuern in meinem Interface oder macht die Datenbank das automatisch?Bei SQLite scheint das ja automatisch möglich sein, wenn ich folgenden Text richtig verstehe:
SQLite is threadsafe because it uses mutexes to serialize access to common data structures. However, the work of acquiring and releasing these mutexes will slow SQLite down slightly. Hence, if you do not need SQLite to be threadsafe, you should disable the mutexes for maximum performance.
-
Du solltest pro Thread eine eigene Connection verwenden.
Das ist IIRC auch das einzige was bei SQLite "safe" ist - die gleichzeitige Verwendung von verschiedenen Objekten aus verschiedenen Threads. "SQLite is threadsafe" heisst erstmal nur dass SQLite überhaupt irgendwie in Programmen mit mehreren Threads verwendet werden kann. Es heisst nicht dass man einfach alles auf alle Objekte aus allen Threads gleichzeitig aufrufen kann.
-
hustbaer schrieb:
Du solltest pro Thread eine eigene Connection verwenden.
Muss ich bei Client-Server DBs nicht den Zugriff selber koordinieren um ein gegenseitiges Überschreiben von Daten zu vermeiden?
Ich frag mich nur wie das gehen soll, wenn mehrere Client hintereinander dieselben Daten verändern. Dann hat derjenige gewonnen, der zuletzt reinschreibt. Oder man muss einfach vermeiden, dass Clients diesselben Daten bearbeiten und stattdessen jeder seine eigenen Daten hat?!
-
Da man ohnehin alles in Transaktionen macht *hust*, spielt es keine Rolle, ob einer oder mehrere Clients zugreifen.