【问题标题】:Using Realm with Amazon DynamoDB [closed]将 Realm 与 A​​mazon DynamoDB 一起使用 [关闭]
【发布时间】:2017-02-21 18:20:01
【问题描述】:

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

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

【问题讨论】:

  • 我认为 DynamoDB(或任何其他数据库)将为您提供所需的灵活性。所以是的,我会使用自定义构建 API 来管理来自/到设备的数据。至于实时同步和通信,特别是聊天或其他东西,同步 API 方法可能并不理想。专注于实时 socket.io 将是一个更好的主意。
  • "没有冒犯 Realm 团队,但我被 Parse 搞砸了" --- 没有被采取,但是请注意 ROS 是一个自己托管的解决方案,所以即使我们要去渡渡鸟的方式,没有人能从你身上夺走它:)。

标签: swift realm amazon-dynamodb aws-lambda realm-object-server


【解决方案1】:

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

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

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

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

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

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

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

另一方面:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多