我的应用程序是离线优先的,因此Realm非常适合持久化和访问数据.我喜欢它.但是,我还想将用户数据存储在云中(用于备份,以防我稍后添加Web支持).我知道这正是Realm Object Server的用途,但我认为我更喜欢使用DynamoDB,原因如下:
1)我已经投资了DynamoDB和亚马逊的身份验证(Cognito).
2)我喜欢Realm实际上是一个关系数据库,因为从客户端我需要运行复杂的查询.但是,在后端我主要只想以一种我可以轻松访问它的方式备份所有数据,并在需要时通过Lambda函数进行操作.我完全没有这方面的NoSQL解决方案,我的理解是DynamoDB是一个具有水平扩展的经济高效的数据库,这对我很有吸引力.如果我想用Realm Object Server以这种方式访问数据,我的理解是它每月至少要花费1,500美元.
3)对Realm团队没有任何冒犯,但我被Parse关闭所搞砸了,所以我想使用一些我可以信赖的东西作为我的后端5年左右.
无论如何,有了这个,这就是我目前正在做的工作:
1)每当我创建或编辑Realm对象时,我都有逻辑将该更改映射到我的DynamoDB模式(由比Realm少得多的表组成).
2)我将这些更新称为UpdateTasks并将其排队并根据需要合并它们(例如,如果您多次更改同一属性).
3)我浏览队列并将UpdateTasks块传递给我编写的Lambda函数,该函数将迭代更新并对DynamoDB执行必要的put或update命令.
4)我有重试逻辑,以防你离线或请求失败
5)如果你有一部新手机并且已登录,假设所有内容都已正确同步,我有一个单独的Lambda函数,可以获取所有用户的数据并像以前一样填充Realm文件.
就像我说的那样,所有这一切现在都在发挥作用,但它感觉很脆弱,我不禁觉得我这样做是错误的.此外,如果我想添加一些社交功能,它不支持双向同步或实时通信
所以我的问题是,如果这是使Realm与DynamoDB同步的合理方法,或者是否有更好/更强大的方法?此外,如果我应该重新考虑使用Realm Object Server或其他东西而不是DynamoDB,我会有兴趣听到原因.
对我来说这是一个重大的决定,所以我很感激能得到的所有帮助!谢谢
最佳答案 免责声明:我是ROS的领头羊,所以我显然有偏见.我发布这不是一个答案,而是作为一般评论,不适合评论格式.
I like that Realm is effectively a relational database because from the client I do need to run complex queries.
你会通过将Realm称为关系数据库来激怒众神.我们支持查询和链接,以及所有这些,但我们与关系数据库非常非常不同;).
Also if I should reconsider using Realm Object Server or something else instead of DynamoDB, I’d be interested to hear why.
您通过自己重新实现同步,错过了Realm Mobile Platform提供的许多非常重要的功能.
主要是,我们有几千行代码来处理无冲突的合并解决方案,在这种情况下,您有多个客户端将数据写入同一个Realm,而所有客户端都处于脱机状态.此外:
>我们为您处理网络.您不必担心或不关心设置连接,客户端和服务器之间的协议,以及是否正确地序列化.
>我们的协议也非常轻量级,因为我们只能从Realm数据库传输事务日志;不是序列化的对象或类似的东西.
>我们的同步非常快.当我们推出RMP时,您可能已经看过了绘制演示视频.因为我们的同步直接集成到了Realm中,所以我们可以通过它来挤出额外的性能.我们已经构建了许多聊天应用程序,而不是内部的应用程序,人们对邮件传输的速度一直感到惊讶.
>您在服务器和客户端上使用相同的SDK和API(尽管使用不同的语言).
>我们不断添加您不必手动构建的功能(例如经常请求的部分复制和对象级权限).
另一方面:
您构建的系统非常类似于我们用于向服务器后端发送订单/请求的技术.通常,我们在客户端上创建FooRequest对象,进行同步,然后事件处理程序选择它们,处理它们,并创建一个FooResponse对象,该对象将同步回客户端.
总的来说,我对你在vanilla-Realm之上构建了所有这些东西印象非常深刻.如果有一天我们有机会,我很乐意看看你的整个筹码.
最后,我们正在制定定价,因为您对价格点的反馈并不是唯一的(但它非常有用!).