ebody: JSON oder SQLite?

Hallo,

ich möchte in einer Webanwendung Daten aus einem Google Spreadsheet auslesen. Dafür gibt es eine spezielle URL mit der ich die Daten als JSON erhalte.

Ziel der Anwendung ist es die Daten aufzulisten und dabei Filter (aus bestimmten Spalten) verwenden zu können. Z.B. zeige alle Einträge Aus Spalte A, wo in Spalte B das Wort "Pizza" steht.

Der Nutzer kann in der Anwendung eine URL seiner Google Tabelle eingeben, die Daten werden ausgelesen und lokal im Browser des Nutzers gespeichert.

Bevor ich jetzt mit dem Script starte, überlege ich, ob ich nur mit den JSON Daten arbeite oder diese in einer SQLite Datenbank speichere, weil es damit evtl. deutlich einfacher ist Einträge anhand von Filtern auszugeben.

Da ich bisher noch nie mit einer SQLite Datenbank gearbeitet habe, wollte ich mal eure Meinung dazu hören und hätte auch noch ein paar andere Fragen:

  1. Würdet ihr JSON, SQLite oder etwas anderes für eine solche Anwendung verwenden?

  2. SQLite Datenbanken können im Browser des Nutzers gespeichert werden?

  3. Browser wie Chrome, Firefox, Safari haben SQLite bereits installiert, daher braucht der Nutzer oder ich für die Entwicklung nichts installieren?

Gruß ebody

  1. Hallo ebody,

    1. Würdet ihr JSON, SQLite oder etwas anderes für eine solche Anwendung verwenden?

    JSON oder etwas anderes. Je nach den Erfordernissen.

    Wenn Deine Webanwendung ein Google Spreadsheet ausliest, dann wird sie das Ergebnis vermutlich nicht speichern, sondern bei Bedarf neu auslesen. Und dann nach dem Auslesen direkt verarbeiten. Ich würde hier keinen Sinn darin sehen, die Daten überhaupt zu speichern.

    Einen Filter kannst Du auch anwenden wenn es ein JSON-Objekt ist - vermutlich enthält das ein Array aus Spreadsheet-Zeilen, und das kannst Du mit der [filter-Methode] auf die gewünschten Zeilen reduzieren.

    Wenn Du die Abfrage konservieren willst, kannst Du das im LocalStorage auch als JSON-String tun. Der sollte dann nur nicht zu groß sein (Megabyte-Bereich), weil die Browser dem Webstorage API Grenzen setzen (was komplexer ist als "maximal drölftausend Bytinos"). Die Alternative ist, den JSON String in Rows zu zerlegen und jede unter einem Key per IndexedDB abzulegen.

    SQLite? Nein, sorry. Das kannst Du nicht verwenden. WebSQL ist kein Standard und wird bspw. von Firefox nicht unterstützt. Ob Safari, weiß ich nicht, aber hier steht Chrome, Opera und Android Browser - also die Chromia. Edge gehört jetzt auch dazu.

    SQLite Datenbanken können im Browser des Nutzers gespeichert werden?

    Ich nehme an, dass Chrome und Firefox intern SQLite verwenden, um IndexedDB, LocalStorage, Cookies und Favoriten zu speichern. Du könntest sicherlich auch mit dem File API die Datei, die SQLite für eine Datenbank erzeugt, in den Browser laden und im LocalStorage ablegen. Aber Du kannst sie nicht browserübergreifend im Browser verwenden. Es sei denn, irgendwer baut SQLite.js als Library.

    Oh. Dieser Jemand ist schon fertig. SQLite crosscompiled nach Web Assembly, allerdings ohne eigenes Speicher-Backend. Dafür muss man die Daten wohl exportieren. Klingt umständlich…

    Browser wie Chrome, Firefox, Safari haben SQLite bereits installiert, daher braucht der Nutzer oder ich für die Entwicklung nichts installieren?

    Wie gesagt: Ja. Aber nur bei ausgewählten Browserherstellern für den Nutzer zugänglich. Firefox unterstützt WebSQL (die openDatabase Funktion) nicht.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hallo Rolf,

      vielen Dank für deine Meinung, Tipps und Infos!

      Ich denke, ich werde erstmal filter() probieren. Die Daten lokal zu speichern ist wahrscheinlich wirklich unnötig, da die aktuellen Daten aus der Google Tabelle regelmäßig abgerufen werden müssen. Die lokal gespeicherten Daten dann immer mit den neuen abzugleichen wäre unnötiger Aufwand.

      Gruß ebody

  2. ich möchte in einer Webanwendung Daten aus einem Google Spreadsheet auslesen. Dafür gibt es eine spezielle URL mit der ich die Daten als JSON erhalte.

    Bevor ich jetzt mit dem Script starte, überlege ich, ob ich nur mit den JSON-Daten arbeite oder diese in einer SQLite-Datenbank speichere, weil es damit evtl. deutlich einfacher ist Einträge anhand von Filtern auszugeben.

    Du (und Rolf irgendwie auch) scheinst hier ein paar Sachen durcheinanderzubringen.

    JSON ist eine Methode, Daten in Textform zu übertragen; bei dem Text handelt es sich dabei um eine Untermenge von Javascript.

    Du solltest JSON nicht mit den Objekten verwechseln, die du bekommst, wenn du den JSON-Text an JSON.parse() verfütterst. Diese Objekte haben mit JSON nichts mehr am Hut, sondern sind ganz normale Javascript-Objekte.

    SQLite ist eine freie Datenbankbibliothek, die SQL als Abfragesprache unterstützt. Sie ist gemeinfrei und schlank, wird direkt in das eigene Programm eingebunden (braucht also keinen separaten Server wie zB MySQL) und deshalb vielerorts zur Speicherung von umfangreichen Datenmengen benutzt. Auch Firefox speichert Cookies, Passwörter und Webseiteneinstellungen in SQLite-Dateien.

    SQLite hat aber nichts mit WebSQL zu tun. WebSQL ist (oder war) eine Möglichkeit, für Webseiten SQL zu benutzen. Ob der Browser die per WebSQL gespeicherten Daten in einer SQLite-Datei ablegt, eine Textdatei benutzt oder meinetwegen an eine CouchDB-Instanz sendet, ist völlig unerheblich.

    Daher:

    1. Würdet ihr JSON, SQLite oder etwas anderes für eine solche Anwendung verwenden?

    Für deinen konkreten Anwendungsfall behältst du die Daten erstmal als ganz normale Javascript-Objekte (vulgo: "Variablen"). JSON ist, weil nur ein Textklumpen, völlig fehl am Platze und SQLite kannst du nicht benutzen.

    Das Zwischenspeichern der Daten auf dem Computer des Anwenders ist nur sinnvoll, wenn sich deine Anwendung über mehrere Seiten erstreckt bzw. die Daten nach einem Neuladen der Seiten schnell wieder zur Verfügung stehen sollen – und Google ewig braucht, um die Daten zu liefern.

    1. SQLite-Datenbanken können im Browser des Nutzers gespeichert werden?

    Nein, SQLite ist eine völlig andere Baustelle. Zum lokalen Speichern kannst du Webstorage (Rohdaten) oder IndexedDB (komplexere Abfragen) benutzen.

    1. Browser wie Chrome, Firefox, Safari haben SQLite bereits installiert,

    Nein. Was Browser intern benutzen, ist für dich ohne Belang.

    Für solcherlei Fragen, Wer unterstützt was?, schaust du übrigens am besten unter https://caniuse.com/ nach.

    1. Hallo Ringelpietz,

      ich habe da sicher nichts durcheinander gebracht, höchstens nicht klar genug aufgeschrieben.

      Du solltest JSON nicht mit den Objekten verwechseln,

      Ich glaubte nicht, dass ebody ein derart blutiger Anfänger ist, dass er DAS tut. Dass JSON.parse() benutzt wird, habe ich als selbstverständlich vorausgesetzt. Du hast allerdinds recht damit, diese Selbstverständlichkeit auf den Prüfstand zu stellen. Ich bin vermutlich zu lange kein Anfänger mehr, um an solche Fehlermöglichkeiten zu denken.

      Rolf

      --
      sumpsi - posui - obstruxi
  3. Hi there,

    Da ich bisher noch nie mit einer SQLite Datenbank gearbeitet habe, wollte ich mal eure Meinung dazu hören und hätte auch noch ein paar andere Fragen:

    1. Würdet ihr JSON, SQLite oder etwas anderes für eine solche Anwendung verwenden?

    Daß das eine nichts mit dem anderen zu tun hat wurde ja schon erwähnt. Die prinzipielle Frage, ob man SQLite verwenden kann, hängt eigentlich vom Mengengerüst der geplanten Anwendung ab. In SQLite wird die gesamte Datenbank in einer einzigen Datei abgelegt, was ihren Verwendungsbereich in Bezug auf Größe und Geschwindigkeit der Abfrage dann doch einigermaßen einschränkt. Für wirkliche Projekte sollte man schon auf eine echte DB-Lösung wie Mysql oder MariaDB oder was auch immer setzen.

    Nachdem ich da bei Dir aber irgendetwas von Pizza gelesen habe, kann es gut sein, daß Du mit SQListe auskommst, das aber, anyway (zu Deinen anderen Fragen, wie eh schon erwähnt wurde) aber auf dem Server liegt und läuft und nichts mit dem Browser zu tun (der intern zwar zT ebenfalls auf eine SQLite-DB zugreift, aber davon hast Du nichts, damit werden nur Einstellungen, Browser-Cache und ähnliche Daten verwaltet).

    Der Browser stellt Dir aber Web-Storage zur Verfügung, da kannst Du Daten ablegen, die mußt Du aber selbst strukturieren (also keine DB mit Abfragesprache) und vor allem, die sind weg, sobald der Browser wieder geschlossen wird...

    1. Tach!

      Der Browser stellt Dir aber Web-Storage zur Verfügung, da kannst Du Daten ablegen, die mußt Du aber selbst strukturieren (also keine DB mit Abfragesprache) und vor allem, die sind weg, sobald der Browser wieder geschlossen wird...

      Nicht unbedingt. Der Local Storage bleibt erhalten. Der Session Storage ... bleibt auch erhalten, wenn der Browser Firefox heißt und die geöffneten Tabs wiederherstellt. Die Session endet erst mit Schließen aller Tabs der Website.

      dedlfix.

      1. Hallo,

        Der Session Storage ... bleibt auch erhalten, wenn der Browser Firefox heißt und die geöffneten Tabs wiederherstellt.

        was er aber seit ein paar Jahren nur noch tut, wenn man ihm auch erlaubt, über Browser-Sessions hinweg eine History zu schreiben. Davor war das Wiederherstellen der geöffneten Tabs z.B. nach einem Absturz auch ohne History möglich. Diese Änderung habe ich seinerzeit sehr bedauert.

        Live long and pros healthy,
         Martin

        --
        Webstuhl (m): Speziell für die Internet-Nutzung entwickeltes Sitzmöbel.
  4. Hallo ebody,

    vor dieser Frage, genauer nicht Json, sondern "txt vs. sqlite vs. mysql" stand ich schon oft.

    So war ich anfangs überzeugt mit sqlite die eierlegende Wollmilchsau gefunden zu haben, weil alle Vorteile einer richtigen DB und alle Vorteile einer textbasierten Db, die obendrein extrem schnell ist und leicht Backups etc. zu machen.

    Doch die Euphorie verflog dann leider als neue Versionen von Sqlite raus kamen und alles wieder umgestrickt werden musste. Hat mir gehörig den Spass daran versaut und auch das Interesse mich weiter damit zu beschäften, wenn vielleicht dann wieder mal grobe Änderungen kommen. Letztendlich handhabe ich das deshalb nun so: Datenbestände mit wenig Änderungen oder extrem komplexen Abfragen(aber auch ruhig mit riesigen Anfragevolumen), die auch nicht gigantisch gross sind, nehme ich textbasierte DB, wie json, csv oder eben eigene Formate. Andernfalls nehme ich Mysql.

    Gruss
    Henry

    --
    Meine Meinung zu DSGVO & Co:
    „Principiis obsta. Sero medicina parata, cum mala per longas convaluere moras.“