将领域与 Amazon DynamoDB 结合使用

Using Realm with Amazon DynamoDB

我的应用程序是离线优先的,因此 Realm 非常适合保存和访问数据。我喜欢它。但是,我还想将用户数据存储在云中(用于备份,以防我以后添加网络支持)。我知道这正是 Realm 对象服务器的用途,但我认为我更愿意使用 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 执行必要的放置或更新命令。

4) 我有重试逻辑以防您离线或请求失败

5) 如果您有一个新的 phone 并登录,假设一切都已正确同步,我有一个单独的 Lambda 函数,它将获取所有用户的数据并像以前一样填充 Realm 文件.

就像我说的,所有这些现在都在工作,但感觉很脆弱,我忍不住觉得我在做这件事是错误的。如果我想添加一些社交功能,它不支持双向同步或实时通信

所以我的问题是,这是否是使 Realm 与 DynamoDB 同步的合理方法,或者是否有 better/more 可靠的方法?另外,如果我应该重新考虑使用 Realm 对象服务器或其他东西而不是 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 数据库传输事务日志;不是序列化对象或类似的东西。
  • 我们的同步速度非常快。当我们推出贼法牧时,您可能已经看过绘制演示视频。因为我们的同步直接集成到 Realm 中,所以我们能够挤出额外的性能。我们已经构建了许多聊天应用程序和其他非内部应用程序,人们不断对消息传输的速度感到惊讶。
  • 您在服务器和客户端(尽管使用不同的语言)上使用相同的 SDK 和 API。
  • 我们不断添加您无需手动构建的功能(例如经常请求的部分复制和对象级权限)。

另一方面:

您构建的系统与我们用来将 orders/requests 发送到服务器后端的技术非常相似。通常,我们在客户端创建 FooRequest 个对象,这些对象被同步,然后事件处理程序选择这些对象,处理它们,并创建一个 FooResponse 对象,该对象被同步回客户端。

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

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