将领域与Amazon DynamoDB结合使用

Roc*_*ith 5 realm amazon-dynamodb swift aws-lambda realm-object-server

我的应用程序是脱机优先的,因此Realm对于持久化和访问数据非常有用。我喜欢它。但是,我也想将用户数据存储在云中(用于备份,也可以在以后添加Web支持的情况下使用)。我知道这正是Realm Object Server的目的,但我认为出于以下原因,我更愿意使用DynamoDB:

1)我已经投资了DynamoDB和Amazon的身份验证(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,我也想听听为什么。

对我来说,这是一个重大决定,因此,我将不胜感激!谢谢

teo*_*aki 3

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

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

如果你将 Realm 称为关系数据库,将会激怒众神。我们支持查询、链接等等,但我们与关系数据库非常非常不同;)。

另外,如果我应该重新考虑使用 Realm 对象服务器或其他东西来代替 DynamoDB,我很想知道原因。

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

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

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

另一方面:

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

总的来说,我对你们在 vanilla-Realm 之上构建所有这些内容印象深刻。如果有一天我们有机会,我很想看看你的整个堆栈。

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