Luzi: Welches Datenbanksystem für On- und Offline-Storage

Hallo zusammen

Ich habe folgendes Problem:
Ich habe auf meiner Webseite ein Datenbank (bisher mit MySQL programmiert). Da ich jetzt einen Offline-modus für meine Webseite einrichten möchte, muss ich diese Datenbank irgendwie auf den Client-Rechner bekommen.

Da ich sowieso eine von Grund auf neue Version programmiere, muss ich mir am Anfang über die verwendeten Systeme klar werden.

Welche Datenbank verwende ich am besten, wenn ich sie möglichst einfach auf den Clientrechner downloaden und anschliessend (falls Änderungen an der lokalen Datenbank vorgenommen wurden) wieder hochgeladen werden, sobald wieder Internet zu Verfügung steht.

Am Besten wäre es dabei, wenn ich nur eine "Schnittstelle" brauchen würde und nicht am Anfang entscheiden muss, ob eine Internetverbindung besteht ( => dann PHP und MySQL und bei Bedarf die benötigten MySQL-Tabellen in einem umgewandelten Format (keine Ahnung was für ein Format) downloaden) oder ob keine Internetverbindung besteht ( => lokale Files suchen und von dort laden)
Diese Möglichkeit würde sehr "zusammengebastelt" sein.

Ich habe mir eine folgende Lösung vorgestellt, jedoch weiss ich nicht, welche Systeme dazu am besten geeignet sind:
Auf dem Internet ist die Datenbank in einem (oder mehreren) Files gespeichert. Diese Datei wird, wenn man Internet hat, vorsorglich auf den Clientrechner runtergeladen. Am besten wäre, wenn dann die beiden Datenbanken (lokal und online) das gleiche Datenbanksystem haben und ich nur entscheiden muss:
Mit Internet => öffne Datenbank-Datei mit URL, welche auf den Webserver verweist
Ohne Internet => öffne Datenbank-Datei, welche lokal gespeichert ist (oder, wenn das geht, öffne die Datenbank-Datei mit URL, welche auf den Client-rechner verweist)

Ich hoffe ich konnte mich genug klar ausdrücken.

Vielen Dank für eure Rückmeldungen.

Gruss.

  1. Hallo!

    WebSQL auf Basis von sqlite ist in manchen Browsern verfügbar, ist aber als Standard gescheitert, weil es keine Referenzimplementierung auf Basis einer anderen DB gab - zudem dürfte localStorage schon bald deutliche bessere Verbreitung haben.

    In diesem JS-Objekt kann man nur flat Strings abspeichern, was jedoch angesichts von JSON.stringify nur ein untergeordnetes Problem darstellt und wieder zu der Frage führt, wie man die Daten organisieren möchte.

    Was nun den Abgleich mit den Online-DB betrifft, so sollte man diesen Asynchron durchführen, damit die Web-Anwendung nutzbar bleibt. Eine Möglichkeit, dies noch zu beschleunigen, bieten WebWorker.

    Gruß, LX

    --
    RFC 2324, Satz 7 (Sicherheit): Jeder, der zwischen meinem Kaffee und mir steht, gilt als unsicher.
  2. Hallo,

    ich glaube, da überschätzt, was der Client ohne den Server kann. Zugriff auf Datenbanken wie MySQL ist nur auf dem Server mit einer serverseitigen Programmiersprache und der entsprechenden nativen Bibliotheken möglich. Ohne Internetverbindung ist der Browser auf sich gestellt, unterstützt also nur HTML, CSS und JavaScript und evtl. Flash, Java und ActiveX. Er kann nicht ohne weiteres mit Datenbank-Daemons kommunizieren, er kann keine beliebigen Dateien lesen und schreiben. Zumindest wenn du den HTML5 Offline Storage verwendest.

    Wenn du andere Weisen verwendest, deine Site herunterzuladen, könntest du natürlich auch ausführbaren Code einschließen - aber dann wärst du im Bereich der Desktop-Anwendungen und deren Programmierung, die natürlich viel mehr können als eine Offline-Webanwendung im Browser mit HTML/CSS/JavaScript.

    Über JavaScript hast du verschiedene Möglichkeiten, auf Browser-interne Datenbanken zuzugreifen. Wie gesagt unterstützen einige Browser localStorage, das ist aber nur ein einfacher Key-Value-Store mit Strings, der dir keine Möglichkeiten bietet, wie du sie von MySQL gewöhnt bist. Andere Browser kennen SQLite-Datenbanken, was schon näher an MySQL ist. Eine weitere zukünftige Technik ist indexedDB. Die Browserunterstützung dieser Techniken ist sehr unterschiedlich. Wenn du den JavaScript-Weg wählst, welche Browser willst du unterstützen?

    In all diesen Fällen wird ein anderes Format als MySQL verwendet, d.h. du müsstest die Synchronisation selbst implementieren und kannst nicht einfach Datenbank-Dateien hoch- und herunterladen. Als Übertragungsprotokoll kommt nur HTTP infrage, d.h. der Client müsste die geänderten Datensätze (Deltas) zum Server senden.

    So, wie du dir den Workflow vorstellst, geht es nur sehr schwierig mit JavaScript als clientseitiger Sprache. Vielleicht wird es letztlich einfacher sein, eine native Desktop-Anwendung zu programmieren, die bspw. auf SQLite aufsetzt. Darin könntest du tatsächlich Datenbank-Dateien austauschen. SQLite lässt sich sehr einfach client- sowie serverseitig verarbeiten, eine native Desktop-Anwendung vorausgesetzt.

    Mathias