Folgendes habe ich gelernt, als ich herausgefunden habe, wie ich mit einigen meiner aktuellen App-Projekte am besten vorankommen kann.
Async-Speicher ("integriert", um Native zu reagieren )
Ich verwende AsyncStorage für eine In-Production-App. Der Speicher bleibt lokal auf dem Gerät, ist unverschlüsselt (wie in einer anderen Antwort erwähnt), verschwindet, wenn Sie die App löschen, sollte jedoch als Teil der Sicherungen Ihres Geräts gespeichert werden und bleibt während der Aktualisierungen erhalten (sowohl native Aktualisierungen als TestFlight als auch Code-Aktualisierungen über CodePush ).
Schlussfolgerung: Lokale Speicherung; Sie stellen Ihre eigene Synchronisierungs- / Sicherungslösung bereit.
SQLite
Andere Projekte, an denen ich gearbeitet habe, haben sqlite3 für die App-Speicherung verwendet. Dies gibt Ihnen eine SQL-ähnliche Erfahrung mit komprimierbaren Datenbanken, die auch zum und vom Gerät übertragen werden können. Ich habe keine Erfahrung mit der Synchronisierung mit einem Back-End, aber ich stelle mir vor, dass verschiedene Bibliotheken existieren. Es gibt RN-Bibliotheken für die Verbindung mit SQLite.
Die Daten werden in Ihrem herkömmlichen Datenbankformat gespeichert, wobei Datenbanken, Tabellen, Schlüssel, Indizes usw. in einem Binärformat auf der Festplatte gespeichert werden. Der direkte Zugriff auf die Daten ist über die Befehlszeile oder über Apps mit SQLite-Treibern möglich.
Schlussfolgerung: Lokale Speicherung; Sie liefern die Synchronisierung und Sicherung.
Feuerbasis
Firebase bietet unter anderem eine Echtzeit-NoSQL-Datenbank sowie einen JSON-Dokumentenspeicher (wie MongoDB), mit dem 1 bis n Clients synchronisiert werden können. In den Dokumenten wird über die Offline-Persistenz gesprochen, jedoch nur für nativen Code (Swift / Obj-C, Java). Googles eigene JavaScript-Option ("Web"), die von React Native verwendet wird, bietet keine zwischengespeicherte Speicheroption (siehe Update 2/18 unten). Die Bibliothek wird unter der Annahme geschrieben, dass ein Webbrowser eine Verbindung herstellen wird, sodass eine semi-persistente Verbindung besteht. Sie könnten wahrscheinlich einen lokalen Caching-Mechanismus schreiben, um die Firebase-Speicheraufrufe zu ergänzen, oder Sie könnten eine Brücke zwischen den nativen Bibliotheken und React Native schreiben.
Update 2/2018 Seitdem habe
ich React Native Firebase gefunden , das eine kompatible JavaScript-Oberfläche für die nativen iOS- und Android-Bibliotheken bietet (was Google wahrscheinlich hätte tun können / sollen) und Ihnen alle Extras der nativen Bibliotheken mit dem Bonus von React bietet Native Unterstützung. Mit der Einführung eines JSON-Dokumentenspeichers durch Google neben der Echtzeitdatenbank gebe ich Firebase einen guten zweiten Einblick in einige Echtzeit-Apps, die ich erstellen möchte.
Die Echtzeitdatenbank wird als JSON-ähnlicher Baum gespeichert, den Sie auf der Website bearbeiten und ganz einfach importieren / exportieren können.
Fazit: Mit der React-Native-Firebase bietet RN dieselben Vorteile wie Swift und Java. [/ update] Skaliert gut für Geräte mit Netzwerkverbindung. Niedrige Kosten bei geringer Auslastung. Kombiniert sich gut mit anderen Google Cloud-Angeboten. Daten sind über ihre Benutzeroberfläche gut sichtbar und können bearbeitet werden.
Reich
Update 4/2020
MongoDB hat Realm erworben und plant, es mit MongoDB Stitch ( siehe unten) zu kombinieren. Das sieht sehr aufregend aus .
Auch ein Echtzeit-Objektspeicher mit automatischer Netzwerksynchronisation. Sie preisen sich als "Gerät zuerst" an und das Demo-Video zeigt, wie die Geräte mit sporadischen oder verlustbehafteten Netzwerkverbindungen umgehen.
Sie bieten eine kostenlose Version des Objektspeichers, den Sie auf Ihren eigenen Servern oder in einer Cloud-Lösung wie AWS oder Azure hosten. Sie können auch In-Memory-Speicher erstellen, die nicht mit dem Gerät bestehen, Nur-Gerätespeicher, die nicht mit dem Server synchronisiert werden, Nur-Lese-Server-Speicher und die vollständige Lese- / Schreiboption für die Synchronisierung zwischen einem oder mehreren Geräten. Sie verfügen über professionelle und Unternehmensoptionen, die im Voraus mehr pro Monat kosten als Firebase.
Im Gegensatz zu Firebase werden alle Realm-Funktionen in React Native und Xamarin ebenso unterstützt wie in Swift / ObjC / Java (native) Apps.
Ihre Daten sind an Objekte in Ihrem Code gebunden. Da es sich um definierte Objekte handelt, verfügen Sie über ein Schema, und die Versionskontrolle ist ein Muss für die Code-Integrität. Der direkte Zugriff ist über die von Realm bereitgestellten GUI-Tools möglich. Gerätedatendateien sind plattformübergreifend kompatibel.
Fazit: Gerät zuerst, optionale Synchronisation mit kostenlosen und kostenpflichtigen Plänen. Alle in React Native unterstützten Funktionen. Horizontale Skalierung teurer als Firebase.
iCloud
Ich habe ehrlich gesagt nicht viel damit gespielt, werde es aber in naher Zukunft tun.
Wenn Sie eine native App haben, die CloudKit verwendet, können Sie CloudKit JS verwenden, um über eine Web-App (oder in unserem Fall React Native) eine Verbindung zu den Containern Ihrer App herzustellen. In diesem Szenario hätten Sie wahrscheinlich eine native iOS-App und eine React Native Android-App.
Wie bei Realm werden hier Daten lokal gespeichert und nach Möglichkeit mit iCloud synchronisiert. Es gibt öffentliche Geschäfte für Ihre App und private Geschäfte für jeden Kunden. Kunden können sogar einige ihrer Geschäfte oder Objekte für andere Benutzer freigeben.
Ich weiß nicht, wie einfach es ist, auf die Rohdaten zuzugreifen. Die Schemas können auf der Apple-Website eingerichtet werden.
Fazit: Ideal für Apple-Apps.
Couchbase
Großer Name, viele große Unternehmen dahinter. Es gibt eine Community Edition und eine Enterprise Edition mit den Standard-Supportkosten.
Sie haben ein Tutorial auf ihrer Website, um Dinge mit React Native zu verbinden. Ich habe auch nicht viel Zeit damit verbracht, aber es scheint eine praktikable Alternative zu Realm in Bezug auf die Funktionalität zu sein. Ich weiß nicht, wie einfach es ist, außerhalb Ihrer App oder der von Ihnen erstellten APIs auf Ihre Daten zuzugreifen.
[Bearbeiten: Es wurde ein älterer Link gefunden, der sich mit Couchbase und CouchDB befasst, und CouchDB ist möglicherweise eine weitere Option. Die beiden sind historisch verwandt, aber derzeit völlig unterschiedliche Produkte. Siehe diesen Vergleich .]
Fazit: Scheint ähnliche Fähigkeiten wie Realm zu haben. Kann nur für Geräte oder synchronisiert werden. Ich muss es ausprobieren.
MongoDB
Update 4/2020
Mongo hat Realm übernommen und plant, MongoDB Stitch (siehe unten) mit Realm (siehe oben) zu kombinieren .
Ich verwende diese Serverseite für einen Teil der App, der AsyncStorage lokal verwendet. Ich mag es, dass alles als JSON-Objekte gespeichert wird, was die Übertragung auf die Client-Geräte sehr einfach macht. In meinem Anwendungsfall wird es als Cache zwischen einem Upstream-Anbieter von TV-Programmdaten und meinen Clientgeräten verwendet.
Die Daten haben keine feste Struktur wie ein Schema, daher wird jedes Objekt als "Dokument" gespeichert, das leicht zu durchsuchen, zu filtern usw. ist. Ähnliche JSON-Objekte können zusätzliche (aber unterschiedliche) Attribute oder untergeordnete Objekte aufweisen, sodass a Viel Flexibilität bei der Strukturierung Ihrer Objekte / Daten.
Ich habe keine Client-zu-Server-Synchronisierungsfunktionen ausprobiert und sie auch nicht eingebettet verwendet. Reagieren Native Code für MongoDB existiert.
Fazit: Nur lokale NoSQL-Lösung, keine offensichtliche Synchronisierungsoption wie Realm oder Firebase.
Update 2/2019
MongoDB hat ein "Produkt" (oder eine Dienstleistung) namens Stitch. Da Clients (im Sinne von Webbrowsern und Telefonen) nicht direkt mit MongoDB kommunizieren sollten (dies erfolgt über Code auf Ihrem Server), haben sie ein serverloses Front-End erstellt, mit dem Ihre Apps eine Schnittstelle herstellen können, falls Sie sich für deren Verwendung entscheiden gehostete Lösung (Atlas). Ihre Dokumentation lässt den Eindruck entstehen, dass es eine mögliche Synchronisierungsoption gibt.
In diesem Artikel vom Dezember 2018 wird die Verwendung von React Native, Stitch und MongoDB in einer Beispiel-App erläutert. Weitere Beispiele sind im Dokument verlinkt ( https://www.mongodb.com/blog/post/building-ios-and-android-apps) -mit-dem-Mongodb-Stich-reagieren-native-SDK ).
Twilio Sync
Eine weitere NoSQL-Option für die Synchronisierung ist Twilios Sync. Von ihrer Website aus: "Mit Sync können Sie den Status auf einer beliebigen Anzahl von Geräten in Echtzeit in großem Maßstab verwalten, ohne eine Backend-Infrastruktur verwalten zu müssen."
Ich habe dies als Alternative zu Firebase für eines der oben genannten Projekte angesehen, insbesondere nachdem ich mit beiden Teams gesprochen hatte. Ich mag auch ihre anderen Kommunikationstools und habe sie zum Senden von SMS-Updates aus einer einfachen Web-App verwendet.
[Bearbeiten] Ich habe einige Zeit mit Realm verbracht, seit ich das ursprünglich geschrieben habe. Mir gefällt, dass ich keine API schreiben muss, um die Daten zwischen der App und dem Server zu synchronisieren, ähnlich wie bei Firebase. Serverlose Funktionen scheinen auch bei diesen beiden sehr hilfreich zu sein, da sie die Menge an Backend-Code begrenzen, die ich schreiben muss.
Ich mag die Flexibilität des MongoDB-Datenspeichers, sodass ich mich für die Serverseite von webbasierten und anderen verbindungspflichtigen Apps entscheide.
Ich habe RESTHeart gefunden , das eine sehr einfache, skalierbare RESTful-API für MongoDB erstellt. Es sollte nicht zu schwierig sein, eine React (Native) -Komponente zu erstellen, die JSON-Objekte liest und in RESTHeart schreibt, die sie wiederum an / von MongoDB weitergeben.
[Bearbeiten] Ich habe Informationen darüber hinzugefügt, wie die Daten gespeichert werden. Manchmal ist es wichtig zu wissen, wie viel Arbeit Sie während der Entwicklung und des Testens benötigen, wenn Sie die Daten optimieren und testen müssen.
Änderungen 2/2019 Ich habe im vergangenen Jahr (2018) mit mehreren dieser Optionen experimentiert, als ich ein Projekt mit hoher Parallelität entworfen habe. Einige von ihnen erwähnen in ihrer Dokumentation Hard- und Soft-Parallelitätslimits (Firebase hatte ein hartes Limit bei 10.000 Verbindungen, glaube ich, während Twilio ein weiches Limit war, das laut Diskussionen mit beiden Teams bei AltConf erhöht werden konnte).
Wenn Sie eine App für Zehntausende von Benutzern entwerfen, müssen Sie das Daten-Backend entsprechend skalieren.