Das Problem:
Ich benötige eine geräteunabhängige (z. B. HTML5) Lösung zum Speichern und Abfragen von mehr als 250.000 Datenzeilen offline auf einem Gerät vom Typ Telefon oder Tablet (z. B. iOS / Android). Die Idee ist, dass ich Leute habe, die in abgelegenen Gebieten ohne zellulare Datenverbindung arbeiten und Abfragen zu diesen Daten ausführen und sie offline bearbeiten müssen. Teilweise wird es geostandortbasiert sein. Wenn sich also Assets in dem Gebiet befinden, in dem sie sich befinden (verwendet GPS), werden diese Assets angezeigt und können bearbeitet werden. Wenn sie ins Büro zurückkehren, können sie die Daten wieder mit dem Office-Server synchronisieren.
Der Grund, warum ich mich dem aus Sicht des Webstandards nähere, besteht im Grunde darin, Geld und Zeit zu sparen, indem ich es einmal in HTML5 schreibe und es dann plattformübergreifend funktioniert, anstatt es zweimal in Objective C und Java zu schreiben. Auch wenn Sie etwas schreiben, das plattformunabhängig ist, sind Sie nicht eingesperrt und gehen nicht mit dem Schiff unter, wenn alle zu einem neueren wechseln. Wir hatten eine ähnliche App für Windows Mobile 5 geschrieben, jetzt ist sie nutzlos, da diese Plattform tot ist.
Die Offline-Datenbank auf dem Gerät muss sein:
- schnell (Antworten unter 2 Sekunden)
- Führen Sie möglicherweise Verknüpfungen durch und haben Sie Beziehungen zu anderen Tabellen, die die Datenbank abfragen können
- Wählen Sie Daten innerhalb eines bestimmten Bereichs oder Kriterien aus, z. B. durch x & y-Koordinate basierend auf dem GPS-Messwert.
Optionen:
Lokaler HTML5-Speicher:
Gut für kleine Datenmengen <5.000 Schlüssel / Werte. Sie können sogar Arrays / Objekte darin speichern, wenn Sie sie in JSON konvertieren.
Nachteile:
- Bei mehr als 10.000 Zeilen verlangsamt der Browser selbst auf einem High-End-Computer das Crawlen.
- Es können keine komplexen Abfragen an den Daten durchgeführt werden, um die gewünschten Daten abzurufen, da Sie den gesamten Speicher durchlaufen und manuell danach suchen müssen.
- Einschränkungen mit der Speichermenge, die gespeichert werden kann
Web SQL-Datenbank:
- Entspricht den Anforderungen.
- Schnelle Ausführung einer Abfrage in 250.000 Zeilen (1-2 Sekunden)
- Kann komplexe Abfragen, Verknüpfungen usw. Erstellen
- Unterstützt von Safari, Android und Opera, funktioniert dies auch auf iOS- und Android-Geräten
Nachteile:
- Ab November 2010 veraltet
- Sicherheitslücke bei verzeichnisübergreifenden Angriffen. Kein wirkliches Problem, da wir kein Shared Hosting betreiben
IndexedDB:
Schlüssel- / Wertobjektspeicher ähnlich dem lokalen Speicher, außer mit Indizes.
Nachteile:
- Langsame Ausführung einer Abfrage in 200.000 Zeilen (15 bis 18 Sekunden)
- Komplexe Abfragen können nicht ausgeführt werden
- Verknüpfungen mit anderen Tabellen sind nicht möglich
- Wird von Haupttelefon- oder Tablet-Geräten, z. B. iPad / Android, nicht unterstützt
- Standard nicht vollständig
Dies lässt die einzige Möglichkeit, die veraltete Web SQL-Methode zu implementieren, die möglicherweise nur für ein weiteres Jahr oder so funktioniert. IndexedDB und lokaler Speicher sind derzeit unbrauchbar.
Ich bin mir nicht sicher, wie Mozilla und Microsoft den Standard der Web SQL-Datenbank veraltet haben und warum das W3C dies zulässt. Angeblich haben sie einen Anteil von 77% am Desktop-Browser-Markt. Auf fortschrittlichen Mobilgeräten haben Mozilla und Microsoft nahezu keinen Einfluss, da Safari, Opera und Android über 90% des Marktanteils haben . Wie Mozilla & Microsoft bestimmen können, welcher Standard auf dem Mobilfunkmarkt verwendet werden soll, auf dem am wahrscheinlichsten Offline-Speicher verwendet wird, macht keinen Sinn.
In den Kommentaren von Mozilla, warum sie stattdessen mit IndexedDB arbeiten wollten, geht es hauptsächlich um 'Entwicklerästhetik' und sie mögen die Idee, SQL in JavaScript auszuführen, nicht. Ich kaufe es nicht.
Derzeit ist der vorgeschlagene Standard minderwertig und eine äußerst grundlegende NoSQL-Implementierung, die langsam ist und nicht einmal die erweiterten Funktionen unterstützt, die Benutzer in einer Datenbank benötigen. Es gibt eine Menge Boilerplate-Code, um die Datenbank einzurichten und Daten herauszuholen, aber sie behaupten, dass die Leute darüber einige nette Abstraktionsbibliotheken schreiben werden, die erweiterte Funktionen bieten. Ab Oktober 2011 sind sie nirgends zu sehen.
Sie haben den vorhandenen Web SQL-Standard, der tatsächlich funktioniert und in den wichtigsten Browsern für Mobilgeräte / Tablets implementiert ist, abgelehnt. Während ihr "neuer" und "besserer" Standard in den großen mobilen Browsern nicht verfügbar ist.
Was sollen wir als Entwickler für die nächsten 3-5 Jahre verwenden, wenn die IndexedDB-Spezifikation möglicherweise standardisiert wird, mehr Funktionen hat, in den wichtigsten Browsern für Mobilgeräte / Tablets implementiert ist und es einige nette Bibliotheken gibt, die die Dinge einfacher machen?
Das W3C sollte den Standard der Web SQL-Datenbank parallel ausführen und nur die Probleme beheben. Es unterstützt bereits die wichtigsten mobilen Plattformen und funktioniert recht gut. Die Tatsache, dass Mozilla und Microsoft als die beiden Player mit der höchsten Desktop-Browser-Freigabe diesen Standard ausrangieren konnten, ist ziemlich zweifelhaft und könnte als Versuch angesehen werden, den Fortschritt auf den mobilen Webplattformen zu behindern, bis sie aufholen und anbieten können konkurrierende Lösungen gegen iOS / Safari und Android.
Zusammenfassend hat jemand eine Lösung für mein Problem, die für iOS / Android für Telefon / Tablet-Geräte funktioniert. Möglicherweise eine nette Wrapper-API, die mehrere Datenbankimplementierungen im Hintergrund mit Abfragefunktion verwenden kann und mit der Sie auswählen können, welche Datenbank Priorität hat. Ich habe Dinge wie Liegestühle gesehen, aber ich bin mir ziemlich sicher, dass Sie standardmäßig nur lokalen Speicher verwenden können und auf die anderen zurückgreifen. Ich denke, ich würde lieber Web SQL (standardmäßig) als die langsameren Optionen verwenden.
Jede Hilfe für eine Lösung sehr geschätzt, danke!