Сохранение фотографий в базе данных будет работать, но может увеличить размер на много. Я предполагаю, что вы также хотите сохранить автономные возможности - например, если пользователь добавляет изображение в автономном режиме, они ожидают, что изображение будет в конечном итоге синхронизировано.
Одним из решений будет иметь область на устройство (т.е. дать ему уникальное имя, чтобы избежать синхронизации с чем-либо, кроме сервера), которые могут быть использованы в качестве очереди на загрузки изображения с помощью одного класса (псевдокод):
class Image : RealmObject {
byte[] Data
// Other properties to map this image to whatever
// object it belongs to.
}
Тогда ваши объекты с изображениями будет выглядеть
class ObjectWithImage : RealmObject {
string ImageUrl
// Other properties
}
Так что теперь, когда вы добавляете новый ObjectWithImage
, вы добавить соответствующий Image
объект в Realm изображения. Затем на сервере вы можете прослушивать изменения на изображении Realm (требуется, по крайней мере, Professional edition), и когда синхронизируется новый Image
, вы можете загрузить данные в AWS S3/Azure blob/другой хостинг, обновить соответствующее значение ObjectWithImage
' s ImageUrl
и удалить обработанный объект Image
. Затем на устройстве вы можете использовать библиотеку кэширования изображений, например. SDWebImage, чтобы загрузить изображение с URL-адреса и сохранить его локально для более быстрого поиска в следующий раз.
Преимущества этого решения являются:
- Общая область будет содержать только URL, сокращение как хранение и требования к пропускной способности, таким образом, что делает синхронизацию быстрее.
- Приложение будет работать во время автономной работы, в конечном итоге синхронизируя как общую область, так и область изображения при восстановлении соединения.
- Изображение Realm не будет синхронизироваться с другими устройствами, поэтому никакого лишнего трафика не будет.
И, как любое решение идет, есть некоторые недостатки:
- Он не будет работать с Developer Edition, как это требует изменения объектов на сервере.
- Это может потребовать обработки более сложных транзакций, поскольку вы хотите совершить две транзакции в двух разных сферах в (предпочтительно) атомном режиме.