5

我的应用程序是离线优先的,因此 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,我很想知道为什么。

这对我来说是一个重大决定,所以我会感谢我能得到的所有帮助!谢谢

4

1 回答 1

3

免责声明:我是 ROS 的负责人,所以我显然有偏见。我发布这个不是作为答案,而是作为不适合评论格式的一般评论。

我喜欢 Realm 实际上是一个关系数据库,因为我确实需要从客户端运行复杂的查询。

将 Realm 称为关系数据库会激怒众神。我们支持查询、链接和所有这些,但我们与关系数据库非常非常不同;)。

此外,如果我应该重新考虑使用 Realm Object Server 或其他东西而不是 DynamoDB,我很想知道为什么。

通过自己重新实现同步,您错过了 Realm 移动平台提供的许多非常重要的功能。

主要是,我们有几千行代码来处理无冲突合并解决方案,如果您有多个客户端将数据写入同一个 Realm,而所有客户端都处于脱机状态。此外:

  • 我们为您处理网络。您不必担心或关心设置连接、客户端和服务器之间的协议,也不必担心事情是否正确序列化。
  • 我们的协议也非常轻量级,因为我们只能从 Realm 数据库中传输事务日志;不是序列化的对象或类似的东西。
  • 我们的同步速度非常快。当我们启动 RMP 时,您可能已经看过绘制演示视频。因为我们的同步直接集成到 Realm 中,所以我们能够通过压缩额外的性能。我们已经构建了许多聊天应用程序以及内部没有的应用程序,人们不断对消息传输的速度感到惊讶。
  • 您在服务器和客户端上使用相同的 SDK 和 API(尽管使用不同的语言)。
  • 我们不断添加您不必手动构建的功能(例如经常请求的部分复制和对象级权限)。

另一方面:

您构建的系统非常类似于我们用来向服务器后端发送订单/请求的技术。通常,我们FooRequest在客户端上创建对象,这些对象会被同步,然后事件处理程序会拾取这些FooResponse对象,处理它们,并创建一个同步回客户端的对象。

总体而言,您在 vanilla-Realm 之上构建了所​​有这些,这给我留下了深刻的印象。如果有一天我们有机会,我很想看看你的整个堆栈。

最后,我们正在制定定价,因为您对价格点的反馈不是唯一的(但它非常有帮助!)。

于 2017-02-23T10:30:02.273 回答