![]() |
Datenbank: SQLite • Version: 3.x • Zugriff über: universell
SQLite - Wie Multiuser Zugriff regeln?
Hallo,
eine Anwendung (Fuhrpark-Verwaltung) speichert Daten in einer SQL-Datenbank. Über eine Zwischenschicht (einfach ein Object, dass die Daten bereitstellt) wird nun die Möglichkeit geboten MSSQL, Firebird oder SQLite zu verwenden. Grundsätzlich empfehle ich, SQLite nur für Einzelplatz-Rechner zu verwenden, will aber auch hier eine Notlösung für 2-3 Clientrechner bieten. Es wird meistens lesend auf die Datenbank zugegriffen. Schreibzugriffe bei neuem Fahrzeug, Werkstattbesuche oder Verbrauchswerte eingetragen oder neue Bilder eingefügt werden. Denke also, das es sehr selten zu Schreibkollisionen kommen wird. Meine Lösung über eine Lock-Table ist für SQLite nicht sicher, da ja kein zentrales DBMS den Zugriff regelt, sondern dezentral die Clientrechner per DLL auf die DB zugreifen. Im worst-case locken zwei Clientrechner die gleiche Tabelle/Datensatz. *** Meine erste Idee und bisher einziger Ansatz ist, das ich eine Datei zur Datenbank mit anlege. Also neben Daten.sqlite noch eine Daten.lock. Diese Datei Daten.lock wird vom Clientrechner exclusiv (ShareDenyAll) geöffnet, bevor ein Schreibzuriff innerhalb der Daten.sqlite erfolgt. Welche Lösungen würde Ihr vorschlagen? |
AW: SQLite - Wie Multiuser Zugriff regeln?
Zitat:
Wieso bietest Du überhaupt unterschiedliche DB an? Was Du da machst, hat weder Hand noch Fuss. Du läufst mit so einer Krückenlösung Gefahr, das der Kunde sich die Datenbank zerschießt. Schmeiss SQLLite doch einfach aus dem Portfolio und verwende nur FB, und von mir aus auch MSSQL (aber wieso eigentlich?). |
AW: SQLite - Wie Multiuser Zugriff regeln?
Zitat:
Hat man ein DB im Angebot die der Kunde eh schon hat (i.d.R. MS SQL Server, MySQL oder Oracle) so kann man diese Installation verwenden und somit auch vorhandene Backupmechanismen, ... |
AW: SQLite - Wie Multiuser Zugriff regeln?
Zitat:
Das ist aber unwichtig... Die Frage ist nur, wie ich einen sicheren Multiuser-Zugriff mit SQLite lösen könnte. Gibt es keine sichere Lösung, wird es Singleuser beschränkt, aber auf jeden Fall drin bleiben. // Es wäre Schade, wenn die Diskussion an der Frage vorbeiläuft, weil ich das aktuelle Einsatzgebiet gleich mit beschrieben habe. |
AW: SQLite - Wie Multiuser Zugriff regeln?
Du könntest eine Liste dazugeben, welche Tabellen gerade in Gebrauch sind. Ist das der Fall bekommt der zweite, der auf die Tabelle zugreifen möchte eine Meldung angezeigt, dass er es in einigen Sekunden noch einmal versuchen soll.
mfg Florian |
AW: SQLite - Wie Multiuser Zugriff regeln?
Einfache Lösung?
SQLLite nur für SingleUserSysteme. Sobald es mehr wird, dann ein richtiges DBMS nutzen, welches von sich aus MultiUser anbietet. |
AW: SQLite - Wie Multiuser Zugriff regeln?
Zitat:
Wie himitsu auch geschrieben hat, für richtiges Multiuser muss ein Server-System verwendet werden. Es wäre nur gut, wenn mit SQlite eine Art Basis-Muliuser-Zugriff möglich wäre z.B. für Heimnetzwerke ohne Server. |
AW: SQLite - Wie Multiuser Zugriff regeln?
Zitat:
Ich würde nicht anfangen, mir eine Lösung zusammenzufrickeln, nur weil ich unbedingt bei SQLite MU brauche. Wenns für den Kunden billig sein soll, dann würde ich ihn eher dazu anhalten, MySQL zu installieren, wenn er eine MU-Umgebung benötigt. Das müsstest du natürlich noch unterstützen, ist ja aber nichts unmögliches. |
AW: SQLite - Wie Multiuser Zugriff regeln?
Ja, es sollen viele DBMS unterstützt werden, gruppiert nach Fähigkeiten.
Wenn es zu riskant ist, dann schiebe ich SQlite in die SingleUser-Gruppe zusammen mit XML, INI usw. (letztere sind sogar nur SingleTable) |
AW: SQLite - Wie Multiuser Zugriff regeln?
Schau Dir mal die Patterns Optimistic-Offline-Locking oder Pessimistic-Offline-Locking an. Die könnten Dir weiterhelfen.
|
AW: SQLite - Wie Multiuser Zugriff regeln?
Zitat:
|
AW: SQLite - Wie Multiuser Zugriff regeln?
Wenn man SQLite unbedingt MU-fähig machen will, dann müsste man eine entsprechende Zwischenschicht drüberlegen (z.B. SOAP)
Ist aber wohl mit Kanonen auf Spatzen und wesentlich billiger zu haben ;) (MSSQL-Express) |
AW: SQLite - Wie Multiuser Zugriff regeln?
Zitat:
Zitat:
|
AW: SQLite - Wie Multiuser Zugriff regeln?
Grundsätzlich kanst Du mit einer SOA-Schicht vom Prinzip her jede Datenbank Multiuserfähig bekommen. Also auch Access, DBase und Paradox, aber letztlich immer mit großen Einschränkungen, was die Wartezeit der User betrifft. Und die SOA-Schicht brauchte wieder eine eigene Installation, wie ein DB-Server. Damit sind dann alle Vorteile gegenüber einem richtigen DBMS zunichte.
Grüße |
AW: SQLite - Wie Multiuser Zugriff regeln?
Zitat:
|
AW: SQLite - Wie Multiuser Zugriff regeln?
Ja meine ich, den hinter der SOA werkelt immer noch eine Single Usr DB und die kümmert sich nicht um Caching. Diese Aufgabe der SOA-Schicht zu verpassen würde bedeuten, diese die Datenbankabfragen vergleichen zu lassen, um zu entscheiden ob exakt die Daten vorliegen, die neu angefordert werden. Also müßte man in der SOA ein eigenes DBMS integrieren. Das ist dann aber nicht mehr "SQLite" sondern was komplett neues.
Morgengrüße // Martin |
AW: SQLite - Wie Multiuser Zugriff regeln?
Also Geschwindigkeit ist für den Anwendungsfall sekundär.
Es soll kein allgemeiner Ersatz für einen optimierten Zugriff auf eine festgelegte SQL-Datenbank werden, sondern ist für kleinere Projekte (von der Datengröße) gedacht. Es soll ein von der Datenquelle unabhängiger Zugriff möglich sein. Je mehr ich bei den Datenquellen auf einen gemeinsamen Nenner bringen kann, desto weniger muss ich auf Applikationsseite berücksichtigen. Deshalb der Versuch... Mit eingeschränkter Funktionalität, weil noch etwas zu stark auf das aktuelle Projekt zugeschnitten, funktioniert es bereits wunderbar. Ich werde es die Tage zu einem allgemeineren System umbauen und dann vorstellen. |
AW: SQLite - Wie Multiuser Zugriff regeln?
Zitat aus
![]() Zitat:
SQL, LINQ, TDataSet/TDataSource usw. ...alles Lösungen, die den Datenaustausch mit Datenbanken/Datenspeicher entweder in Sprache oder Schnittstelle normieren. Ich versuche nur, die Schnittstelle näher (oder weiter weg?) an der Datenbank anzusiedeln, dass wirklich keine spezifischen Eigenschaften mehr beachtet werden müssen. Die nötigen Kompromisse sehe ich und nehme die in Kauf. Letztlich kann ich ein Zitat von Sir Rufio drehen: "Mein Projekt, Mein Problem" ;) |
AW: SQLite - Wie Multiuser Zugriff regeln?
Daß es möglich ist, hat niemand bezweifelt. Aber irgendwie geht mir hier unter, daß SQLite dafür einfach nicht das richtige Werkzeug ist.
Man kann einen Metzger sicher auch in einen OP-Saal stellen, aber die Ergebnisse werden zweifelhaft sein. Ähnliches gilt umgekehrt, daß man einen Hirnchirurgen in ein Schlachthaus oder eine Metzgerei stellen kann. Alles möglich, aber nicht zwangsläufig zweckmäßig. Man kann sicher auch bis zu einem gewissen Grad einen Hammer zu Reparaturen (das abstrakte Problem) einsetzen. Es handelt sich also für den Zweck um ein bedingt einsetzbares Werkzeug. Aber die hiesige Argumentation ist vergleichbar damit jetzt nicht etwa die Werkzeugkiste zu erweitern, sondern mehr Hämmer zu benutzen. Mir bleibt die Spucke weg. |
AW: SQLite - Wie Multiuser Zugriff regeln?
Allerdings kann man einen Gynäkologen hervorragend als Maler einsetzen.
Der kann den Flur streichen ohne dass ihm die Tür geöffnet wird. Alles nur durch den Briefschlitz. :mrgreen: |
AW: SQLite - Wie Multiuser Zugriff regeln?
Zitat:
SQLite muss nicht Multi-User fähig werden, es wurde nur die Frage gestellt ob es möglich wäre und wenn ja wie. SQLite passt natürlich auch als SingeUser Datenbank ins Konzept. Wer meine Idee genau angeschaut hätte, hätte vielleicht auch gesehen, das bei meinem "MultiUser"-Ansatz auch immer nur ein exlusiver Schreibzugriff erfolgt wäre. Das hat aber nichts mit der Gesamt-Idee zu tun, die jeder hier schon in spezialisierter Form bereits nutzt und von mir nur unspezifischer umgesetzt werden soll. Hier wird genauso banal kritisiert, obwohl es genau betrachtet nur einen Schritt neben bestehenden und bereits intensiv genutzten Systeme stehen soll. Wer DB Zugriffskomponenten wie ZEOS etc. nutzt, kann sich ja mal anschauen, wie er in einer einfachen Anwendung auf MSSQL, Firebird oder SQLite zugreift und welche Befehle er nutzt. Kann sich Fragen was der Sinn hinter SQL/SQL-92 war... und sich am Ende vielleicht wie ich fragen, warum hier zwingend so strickt unterschieden werden muss. *** Ich hab' keine Lust mehr das weiter zu verteidigen (man wird ja sowieso als bekloppt abgestempelt). Ihr findet es Mist und gut ist, wenn es in meinen Projekten gut arbeitet reicht mir das. |
AW: SQLite - Wie Multiuser Zugriff regeln?
Zitat:
Zitat:
|
AW: SQLite - Wie Multiuser Zugriff regeln?
Zitat:
*** Das Ausgangsproblem (Fragestellung in Post #1) habe ich gelöst, wie es alle lösen: Multi-User-Zugriff <> Parallel-Zugriff In einem Multi-User System können mehrere User eine Datei bearbeiten (nicht gleichzeitig, aber nacheinander). Liegt ein Bild/Dokument etc. auf einem Netzlaufwerk, dann kann ich es auf Client-PC #1 bearbeiten und danach auf Client-PC #2. Bearbeitungsprogramme setzen beim Öffnen das Bild auf ShareDenyWrite. Dadurch kann man sich während Client-PC #1 bearbeitet auf Client-PC #2 ein SnapShot holen, aber nicht parallel bearbeiten. Mit dem verwendeten Wrapper für SQlite3.dll hatte ich keine interne Lösung entdecken können. Deshalb löse ich das zumindest innerhalb meiner Anwendung mit einer parallel beiliegenden Datei. Somit stelle ich sicher, wenn auf die Datenbank von unterschiedlichen Usern/Client-PC zugegriffen wird, kein kollidierender Schreibzugriff herrscht. *** Das andere im Thread hochgekommene Thema (Uni-Zugriff auf mehrere DBMS) soll entsprechend den Forenregeln hier nicht weiter Thema sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz