【问题标题】:Using Realm Mobile Platform with photos将 Realm 移动平台与照片一起使用
【发布时间】:2017-02-19 00:06:30
【问题描述】:

我们有一个移动应用程序,它当前使用 Realm 数据库以及存储在设备文档文件夹中的照片。

我们正在寻找一种方法,让我们的用户能够使用该应用并在不同设备之间共享数据,他们对新的 Realm 移动平台非常感兴趣。不过,我们无法完全弄清楚的一件事是它如何处理照片。我们是否需要通过其他服务在设备之间手动同步它们?或者有没有办法让它与 Realm 移动平台一起工作?任何关于我们如何使这项工作的想法都将不胜感激。

【问题讨论】:

    标签: ios swift database mobile realm


    【解决方案1】:

    将照片存储在数据库中是可行的,但可能会大大增加大小。我想您还想保留离线功能-例如如果用户在离线时添加图片,他们会期望该图片最终会同步。

    一种解决方案是为每个设备设置一个领域(即给它一个唯一的名称以避免与服务器以外的任何东西同步),它可以用作具有单个类(伪代码)的图像上传队列:

    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 上的变化(至少需要专业版),当一个新的Image 同步时,你可以将数据上传到 AWS S3/Azure blob/其他主机,更新相应的ObjectWithImageImageUrl,并删除处理后的Image对象。然后在设备上,您可以使用图像缓存库,例如SDWebImage从url下载图片并存储在本地,以便下次更快检索。

    此解决方案的好处是:

    • 共享领域将仅包含 url,从而减少存储和带宽需求,从而加快同步速度。
    • 该应用将在离线时运行,最终在连接恢复时同步共享领域和图像领域。
    • 镜像Realm不会同步到其他设备,所以不会有不必要的流量。

    而且,任何解决方案都存在一些缺点:

    • 它不适用于开发版,因为它需要修改服务器上的对象。
    • 它可能需要一些更高级的事务错误处理,因为您希望以(最好)原子方式在两个不同领域提交两个事务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多