SQLite JournalMode "WAL" vs "PERSIST"

  • VB.NET
  • .NET (FX) 4.0

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    SQLite JournalMode "WAL" vs "PERSIST"

    Hallo Zusammen.

    Da mir mein English immer wieder Schwierigkeiten macht, und allen Rechergen zum trotz ich nicht ganz zurecht komme damit, brauche ich hier Hilfe von SQLite Langzeiterfahrenen Programmierern.

    Wenn ich die SQLIte Datenbank im JournalMode "WAL" öffne, dann werden ja die entsprechenden Dateien (wal/shn) prarallel zur DB angelegt, die das ausgelagerte Datenhandling abseits der Echtdaten behandelt. Soweit so gut.

    Aber folgende Schwierigkeiten habe ich damit. Und bitte Antwortet mir nicht mit links zu den SQLite Seiten wo WAL beschrieben wird. Denn folgende Problematik konnte ich damit nicht lösen. Nicht zuletzt wegen meiner schwachen Englishkenntnisse.

    1) Ich öffne die DB im WAL-Mode und setze SQL Kommandos ab, z.B. INSERTS. Zuvor aber "BEGIN TRANSACTION;" und nach erfolgreichem Execute noch ein "COMMIT;".
    • Leider werden die Datensätze aber trotz COMMIT; oder auch trotz END TRANSACTION; - nicht in die Database übertragen! - Warum?
    • Wenn ich die Connection mit .close() schliesse. Auch noch nicht. 8|
    • Erst wenn ich mein VB.Net Anwendung als ganzes Schliesse, wird das WAL File in die Database übertragen und entfernt. Warum?
    ?(
    PS: Ich betone: Ich schliesse die DB Connection definitiv schon vorher. Die Kommandos sind all in Ordnung. Keine Ausnahmefehler. Und nach geschlossener Anwendung sind meine Datensätze ja auch alle in der DB sichtbar!

    Ja und wenn ich "PERSIST" anstelle von "WAL" verwende, ist gleich alles in der richtigen DB. Was ja auch richtig ist. Aber irgendwas habe ich beim WAL Mode nicht so richtig im Griff!
    Diesem Zitat:
    WAL can be growing and adding new commit records while various readers connect to the database, each reader can potentially have its own end mark
    entnehme ich aber durchaus Netzwerktauglichkeit!

    Dies ist übrgigens ein völlig eigenständiger Thread. Mittlerweile betrachte ich SQLite unter all den Datenbanken nach wie vor als die billigste aller SQL Datenbanken, oder sagen wir "als recht einfach gestrickt". Ich beschloss jedoch dass es für meine Anwendung die richtige ist.

    Nun muss ich noch den WAL Mode testen. Commits und Rollbacks damit ausprobieren. Wie bereits gefragt: "Warum wird die WAL Datei erst nach schliessen der VB.Net Anwendung eingetragen - obwohl zuvor die Verbindung schon geschlossen wurde"?
    Und wo steht in deinem Zitat was von Netzwerk?

    http://www.sqlite.org/wal.html schrieb:

    But there are also disadvantages:
    [...]
    2. All processes using a database must be on the same host computer; WAL does not work over a network filesystem.


    Ich sage ja auch nichts gegen deine Entscheidung etc. In dem anderen Thread hattest du angedeutet, dass mehrere Rechner auf die DB zugreifen sollen. Und wenn du dabei gedacht hast, einfach die SQLite-Datei auf ein Netzlaufwerk o.ä. zu packen, kannst du m.M.n. den WAL-Mode vergessen.
    Wenn dir dein Englisch Schwierigkeiten macht, solltest du etwas zurückhaltender mit englischen Zitaten sein ; )
    Frei übersetzt: Alle Prozesse, welche die Datenbank verwenden, *müssen* auf dem selben Rechner laufen; WAL funktioniert *nicht* über ein Netzwerkdateisystem.

    Welchen JournalMode ich empfehlen kann? Keine Ahnung.
    Das hängt stark von deinen Anforderung bzw. der späteren Umgebung ab.
    PERSIST kann eine gute Wahl sein, vielleicht reicht auch DELETE oder TRUNCATE. MEMORY würde ich zumindest nicht verwenden.
    Na dann sei doch bitte mal so lieb und fass in kurzen Wörtern zusammen, was so die markanten Unterschiede sind?
    (Richtungsweisend X/ )

    ...bevor ich wieder anfange zu übersetzen :cursing:

    ----NACHTRAG: ach quatsch, habs gerade rausgefunden. Nur eine Frage noch. Wenn da steht: "Default Mode: uses the SQLite Deafult JournalMode" - ist dann gemeint, dass es einer der Modes: Truncate, Delete, Wall oder Persist ist? oder ist das ein völlig eigener Mode (der Default Mode)?
    Ich suche immer noch nach einer Antwort, warum die DB nach öffnen mit .open und anschliessendem .close - nicht wieder zur gänze so freigegeben wird, wie sie noch vor dem .open war.

    Denn erst nach dem schliessen der VB.Net Anwendung ist sie die DB Datei wieder im gleichen "freien" Zustand!
    Hat irgendjemand wer eine Idee dazu?