Warum ist die Web SQL-Datenbank veraltet?

86

Ich mache eine hybride Android-App.

Zuerst habe ich mich für localStorage entschieden und nach 2 Tagen festgestellt, dass es sehr seltsam ist.

Dann habe ich indexedDB aufgegriffen, nachdem ich den ganzen Tag mit der Ausgabe in Google Chrome verbracht habe und sie tatsächlich erhalten habe, läuft sie nicht in einem WebView der Android-App.

Und ich habe nie eine Web-SQL-Datenbank verwendet, weil sie veraltet war. Jedenfalls ist mir aufgefallen, dass PhoneGap immer noch Web SQL verwendet und von den Browsern von Android unterstützt wird.

Warum wurde Web SQL überhaupt nicht mehr weiterentwickelt? Und ist es eine gute Idee für mich, jetzt mit Web SQL zu arbeiten?

Mücke
quelle
3
Was fanden Sie an localStorage seltsam? Es ist nur ein Schlüssel / Wert-Paar-Geschäft. Ich bin gespannt, was dir daran nicht gefallen hat und auf welche Probleme du gestoßen bist. Ich verwende es in einem Projekt und würde gerne wissen, auf welches Problem Sie gestoßen sind.
1.
1
@oligofren, Wenn Sie in Web-SQL mehr als nur hirntot einfaches SQL verwenden, können Sie dies nicht genau in localStorage und so weiter übersetzen.
Pacerier
2
Aber ersparen Sie sich den Aufwand, eine Abstraktionsschicht zu erstellen (was ich getan habe), und verwenden Sie YDN-DB jetzt nur für dev.yathit.com/ydn-db/index.html . Es wird die beste verfügbare Technologie für dieses Gerät verwenden.
Oligofren
2
Sie verwenden immer eine Art Abstraktionsebene. Das ist Programmierung und wie Sie ein konsistentes Verhalten erreichen, unabhängig von Implementierungsfehlern im Browser. Dummy-Js-Aufrufe überschreiten 5000 pro ms. Wenn der Autor von YDN-DB also nicht etwas Lächerlich Dummes getan hat, sollten Sie keinen Performance-Hit in der Größenordnung von 100 ms erzielen. Eher wie 1 ms für 1: 1-Operationen auf Plattformen, die IndexedDB nicht nativ unterstützen. Was im Moment nur ältere Versionen sind. Alle aktuellen Browser unterstützen IndexedDB. WebSQL ist veraltet.
Probieren
4
@oligofren, Du verpasst den Punkt meines Kommentars. Ich spreche nicht über den Overhead einer Funktion, die eine andere aufruft, und umgekehrt. Ich sage, wenn Sie eine DB-Abstraktionsschicht verwenden, beschränken Sie sich auf eine Teilmenge von SQL-Abfragemustern , die Sie verwenden können, ohne unter Leistungseinbußen zu leiden. Sie können keine Optimierung vornehmen, da die Bibliothek dies automatisch für Sie erledigt und es nicht immer richtig macht. Es wird nicht 1 ms sein, es sei denn, Sie speichern nur eine Datenzeile.
Pacerier

Antworten:

99

Kurzversion: Web SQL war veraltet, weil Standards wirklich wichtig sind und es unerschwinglich gewesen wäre, Web SQL in einen richtigen Standard zu verwandeln.

Da vorhandene Implementierungen von Web SQL im Grunde genommen Wrapper für SQLite sind, war jeder Versuch, einen Standard dafür zu definieren, im Grunde "das zu tun, was SQLite tut". Das ist nicht gut genug; Ein echter Standard muss in sich geschlossen sein, um die Schnittstellen- und Eckfälle und Ausnahmen selbst zu definieren, anstatt auf eine vorhandene Implementierung zu verweisen (insbesondere eine Implementierung eines Drittanbieters wie SQLite). Andernfalls laufen Sie Gefahr, die Macken einer bestimmten Implementierung als Standard festzulegen. Nach allem, was ich gelesen habe, bevorzugt das W3C mehrere unabhängige Implementierungen der vorgeschlagenen Standards, um sicherzustellen, dass dies geschieht. Da Web SQL so stark an SQLite gebunden war, würde das einfach nicht passieren.

Mozillas Blog enthält weitere Informationen zu ihren Argumenten, insbesondere, dass Web SQL nicht unterstützt wird. Anscheinend waren sie eine der Hauptstimmen, die dafür sorgten, dass Web SQL veraltet war.

Sollten Sie jetzt mit Web SQL arbeiten? Ich erwarte nicht, dass die Hersteller, die es derzeit unterstützen (wie Google und Apple), es bald einstellen, aber IE und Firefox werden es nicht hinzufügen. (Zum Beispiel empfiehlt Ido Green mit Google Developer Relations die Verwendung nicht.)

Josh Kelley
quelle
8
Dieser Beitrag von Ido ist super einfach und kratzt nicht einmal an der Oberfläche, warum man den einen oder anderen verwenden sollte. Tatsache ist, dass noSQL-Datenbanken mit Blick auf große Datenmengen entwickelt wurden und dies nicht für Datenbanken gilt, die auf einem einzelnen Computer eines Benutzers ausgeführt werden. Sie können einige Vorteile gewinnen, die für Big Data relevant sind, aber Sie verlieren Dinge wie JOINs. Ich hätte meine Open-Source-Chrome-Erweiterung "Plus for Trello" auf keinen Fall entwickeln können, wenn ich indexedDb verwenden müsste (und ich verwende noSQL-Datenspeicher in Appengine), also habe ich mich für Web-SQL entschieden.
Zig Mandel
2
Weil der Konkurrent von Google GMail MS-Outlook dann eine Volltextsuche durchführen könnte und weil "Umarmen, Erweitern, Vernichten" nicht möglich ist, wenn es nur eine SQLite-Implementierung (MS) gibt und Jonas Sicking (Mozilla) SQL nicht mag. Schlüsselwertspeicher mit einer überkomplizierten Benutzeroberfläche sind natürlich viel besser (auch als Hyphe bezeichnet), zumal jedes JavaScript-Objekt bereits ein assoziatives Array ist. Und seien wir ehrlich, Daten-Normalisierung, referenzielle Integrität und satzbasierte Operationen sind für jemanden, der SQL nicht versteht (will), wirklich empörend, auch bekannt als "Die Benutzer wollen kein SQL".
Quandary
3
Ironischerweise ist WebSQL perfekt für die Interaktion mit SQLite, wenn Sie genau das möchten (und kein PRAGMA benötigen).
Michael
4
Mozilla tötete also ein Projekt und eine Technologie, die in vielen Situationen äußerst nützlich war, da es einigen Leuten dort nicht gefiel und die Leute sie verteidigten. Warum? Sie könnten sowohl IndexedDB als auch
WebSQL
1
Safari 13 hat jetzt die Unterstützung für WebSQL entfernt , die in früheren Versionen verfügbar war.
Thunderforge
17

Josh Kelleys Antwort ist bis jetzt die BESTE Antwort, die ich je über den Grund gefunden habe, warum das Standardwerk gestoppt werden muss. Ich denke jedoch, dass es eine zusätzliche Perspektive gibt, die in Bezug auf die Nutzerbasis berücksichtigt werden muss.

Trotzdem bin ich nicht einverstanden mit der Herangehensweise von Ido Green an das Thema ("Dies ist eine Empfehlung für Webentwickler, die Technologie nicht mehr so ​​effektiv einzusetzen") ...

Ich glaube (wie vi4m in den Kommentaren von Ido Green's Artikel feststellt):

Wir (Entwickler) können diese Technologie weiterhin verwenden. Kein Browser-Anbieter hat die Entfernung dieser Technologie angefordert und auch nicht geplant, sie zu entfernen. Entwickler sind die Stimme des Webs. Wir können es einfach noch benutzen, vielleicht wird Mozilla es sich anders überlegen ;-)

Und ich möchte einen anderen logischen Ansatz hinzufügen: Wenn Sie für mobile Umgebungen entwickeln ... ¿Welche Umgebungen sind in mehr Händen? Antwort: iOS und Android ... Also, wenn BEIDE webSQL unterstützen und Ihr Ziel MASSIVE MOBILE ist, probieren Sie es aus!

Denken Sie, wie es große Apps fast immer am Anfang getan haben, holen Sie sich zuerst die MOST und erstellen Sie dann (sobald Sie Erfolg haben) die Arbeit neu, um die verbleibenden weniger zu bekommen (wenn Sie sie wirklich erreichen wollen oder dazu aufgefordert werden). Ist nicht immer Erfolg, wer den Weg kennzeichnet?


Nachdem ich Nolan Lawsons Artikel gelesen habe (in dem klar ist, dass er beabsichtigt, seiner Erfindung eine Chance zu geben), glaube ich, dass diese Angelegenheit zu einem neuen Kalten Krieg zwischen Technologiegiganten wurde, der es eigentlich gar nicht geben sollte. Ich glaube, die Spezifikationen sollen erhalten bleiben (je länger und je unberührter sie sind, desto besser für eine kundenorientierte Leistung). Ironischerweise besteht die Aufgabe der "specs guys" darin, NEUE Spezifikationen zu generieren (manchmal, wo keine benötigt werden, damit er mehr zu tun hat), und ebenso konzentrieren sich Programmierer-Jobs manchmal darauf, das, was bereits funktioniert, zu ändern und neu zu schreiben, anstatt Lösungen für neue Probleme zu finden und neue Tendenzen.

Bei clientseitigen Datenbanken ging es für mich lediglich darum, Parallelen (zwischen Server- und Clientseite) herzustellen, damit wir auf einfache Weise Daten erstellen, speichern, hochladen und herunterladen können. Unter diesem Ansatz ist es einfach und logisch, die gleichen Sprachen und Strukturen zu haben (zumindest für uns OpenSource-Entwickler von LAMP).

Ich glaube, dass die Absicht von IndexedDB, eine Alternative mit breiteren und neueren Möglichkeiten zu sein, immer gut ist, aber irgendwie ähnelt es mir der Notwendigkeit, Software zu entwickeln, die installiert werden muss (auch wenn die Kernlösung in der Cloud verbleiben kann). In einer Welt, die dazu neigt, in Verbindung zu bleiben, hört es sich an wie A) eine Frage der Kontrolle und des Besitzes oder B) sich darauf zu konzentrieren, Monster für die Kundenseite zu entwickeln ... aber für diese Art von Anforderungen existieren Apps (in der mobilen Welt) und Software (in der PC-Welt). Meines Erachtens sollte das Ziel von Webapps in erster Linie darin bestehen, das Web unabhängig vom Gerät zu erweitern.

Ich glaube, aus diesem Ansatz könnte eine schöne Infografik entstehen.

DavidTaubmann
quelle
Bitte beachten Sie, dass die neuesten Firefox-Versionen und der IE WebSQL überhaupt nicht unterstützen.
ocodo
1
Soweit ich weiß, haben sie WebSQL noch nie unterstützt. Sie können dies hier überprüfen: [link] caniuse.com/#feat=sql-storage . Der einzige, der mich überrascht, ist Opera Mini, sie verlieren auf diese Weise Markt. Jedenfalls sind für mich als Entwickler nur iOS und Android für WebApps von Bedeutung und auch das WebKit, von dem ich glaube, dass es die System-Engine beider ist.
DavidTaubmann
1
Dennoch wurde kein clientseitiger Speicherstandard von allen kommerziellen Browsern übernommen: html5rocks.com/en/features/storage
DavidTaubmann
1
Safari 13 hat jetzt die Unterstützung für WebSQL entfernt , die in früheren Versionen verfügbar war. "Kein Browser-Anbieter hat die Entfernung dieser Technologie angefordert oder plant, sie zu entfernen" ist daher nicht mehr gültig.
Thunderforge
@Thunderforge Danke für die Information! Wirklich gut zu wissen! Wenn ich ein bisschen nachdenke, weiß ich nicht, ob dies schlecht für Entwickler oder schlechter für iOS sein wird, da dieses Tool seit so vielen Jahren vollständig und nützlich für uns ist. Wir können unseren Benutzern empfehlen, keine Mac- oder iOS-Geräte mehr zu verwenden oder zu kaufen, es sei denn, jemand zahlt die Kosten für die Neuprogrammierung der Projekte in indexedDB.
DavidTaubmann
1

Die Realität ist, dass die beitragenden Parteien eine Sackgasse in der Richtung der Norm erreichten. Kurz gesagt, niemand konnte zustimmen.

Die W3C-Site erklärt dies.

Die Spezifikation geriet in eine Sackgasse: Alle interessierten Implementierer haben dasselbe SQL-Backend (Sqlite) verwendet, aber wir benötigen mehrere unabhängige Implementierungen, um auf einem Standardisierungspfad voranzukommen.

WSC Seite

htm11h
quelle
2
Für mich bedeutet das irgendwie, dass sie sich einig sind, dass es in diesem Pfad nichts anderes zu standardisieren gibt ... Es funktioniert einwandfrei, weil es den Pfad des Standards mit einer vorhandenen Technologie von Drittanbietern verbindet, die von ihnen standardisiert werden sollte / darf.
DavidTaubmann
Für mich klingt das so: Sie waren sich nicht einig, weil es keine herstellerspezifischen Funktionen zulässt (umarmen, erweitern, ausrotten?).
Quandary,
Ich glaube, es ist eine Art herstellerspezifische Präferenz, der nächste Satz besagt, dass die Forschung fortgesetzt wird. Daher bin ich nicht sicher, ob alle Parteien mit dem aktuellen Stand zufrieden waren ... "Die Arbeitsgruppe für Webanwendungen arbeitet weiterhin an zwei weiteren speicherbezogenen Spezifikationen: Web Storage und API für indizierte Datenbanken."
htm11h