2017-02-19 3 views
0

Wir haben eine mobile Anwendung, die derzeit eine Realm-Datenbank in Verbindung mit Fotos verwendet, die im Dokumentenordner des Geräts gespeichert sind.Verwenden von Realm Mobile Platform mit Fotos

Wir suchen nach einer Möglichkeit, unseren Nutzern die Nutzung der App und die gemeinsame Nutzung von Daten zwischen verschiedenen Geräten zu ermöglichen, die sich sehr für die neue Realm Mobile Platform interessieren. Eine Sache, die wir nicht genau herausfinden können, ist, wie es mit den Fotos funktionieren würde. Müssen wir diese manuell zwischen Geräten über einen anderen Dienst synchronisieren? Oder gibt es eine Möglichkeit, es mit Realm Mobile Platform arbeiten zu lassen? Irgendwelche Ideen, wie wir diese Arbeit machen könnten, würden sehr geschätzt werden.

Antwort

2

Das Speichern der Fotos in der Datenbank würde funktionieren, könnte aber die Größe stark erhöhen. Ich kann mir vorstellen, dass Sie auch Offline-Funktionen beibehalten möchten - z. Wenn ein Nutzer ein Bild offline hinzufügt, erwartet er, dass das Bild eventuell synchronisiert wird.

Eine Lösung wäre, ein Reich pro Gerät zu haben (dh gibt Ihnen einen eindeutigen Namen, aber die Server-Synchronisierung mit irgendetwas zu vermeiden), das als Bild-Upload-Warteschlange mit einer einzigen Klasse (Pseudo-Code) verwendet werden:

class Image : RealmObject { 
    byte[] Data 

    // Other properties to map this image to whatever 
    // object it belongs to. 
} 

Dann Ihre Objekte mit Bildern wie

class ObjectWithImage : RealmObject { 
    string ImageUrl 

    // Other properties 
} 

jetzt so aussehen wird, wenn Sie einen neuen ObjectWithImage hinzufügen, erhalten Sie eine entsprechende Image Objekt zum Bild Realm hinzuzufügen. Dann können Sie auf dem Server nach Änderungen auf dem Image Realm Ausschau halten (erfordert mindestens Professional Edition) und wenn eine neue Image synchronisiert wird, können Sie die Daten auf AWS S3/Azure Blob/anderes Hosting hochladen, aktualisieren Sie die entsprechenden ObjectWithImage ' s ImageUrl, und löschen Sie das verarbeitete Objekt Image. Dann können Sie auf dem Gerät eine Bild-Caching-Bibliothek, z.B. SDWebImage, um das Bild von der URL herunterzuladen und lokal zu speichern, damit es beim nächsten Mal schneller abgerufen werden kann.

Die Vorteile dieser Lösung sind:

  • Der gemeinsame Bereich wird URLs nur enthalten, sowohl Speicher- und Bandbreitenanforderungen reduziert somit die Synchronisation schneller.
  • Die App funktioniert im Offline-Modus und synchronisiert schließlich sowohl den freigegebenen Bereich als auch den Bildbereich, wenn die Verbindung wiederhergestellt wird.
  • Das Bild Realm wird nicht mit anderen Geräten synchronisiert, so dass kein unnötiger Datenverkehr entsteht.

Und wie jede Lösung geht, gibt es einige Nachteile:

  • Es wird nicht mit der Developer Edition arbeitet, wie es die Objekte Modifizieren auf dem Server erfordert.
  • Es kann etwas fortgeschrittenere Transaktionsfehlerbehandlung erfordern, da Sie zwei Transaktionen in zwei verschiedenen Realms in einer (vorzugsweise) atomaren Weise festschreiben wollen.
Verwandte Themen