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.