2017-02-19 6 views
0

У нас есть мобильное приложение, которое в настоящее время использует базу данных Realm в сочетании с фотографиями, которые хранятся в папке документа устройства.Использование платформы Realm Mobile с фотографиями

Мы ищем способ позволить нашим пользователям использовать приложение и обмениваться данными между различными устройствами, были очень заинтересованы в новой платформе Realm Mobile. Одна вещь, которую мы не можем понять, это то, как она будет работать с фотографиями. Нужно ли нам вручную синхронизировать между устройствами через другую службу? Или есть способ заставить его работать с Realm Mobile Platform? Любые идеи о том, как мы могли бы сделать эту работу, получили бы большую оценку.

ответ

2

Сохранение фотографий в базе данных будет работать, но может увеличить размер на много. Я предполагаю, что вы также хотите сохранить автономные возможности - например, если пользователь добавляет изображение в автономном режиме, они ожидают, что изображение будет в конечном итоге синхронизировано.

Одним из решений будет иметь область на устройство (т.е. дать ему уникальное имя, чтобы избежать синхронизации с чем-либо, кроме сервера), которые могут быть использованы в качестве очереди на загрузки изображения с помощью одного класса (псевдокод):

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, как это требует изменения объектов на сервере.
  • Это может потребовать обработки более сложных транзакций, поскольку вы хотите совершить две транзакции в двух разных сферах в (предпочтительно) атомном режиме.
Смежные вопросы