gpt4 book ai didi

swift - 将 Realm 与 A​​mazon DynamoDB 结合使用

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:13 25 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

4年前关闭。




Improve this question




我的应用程序是离线优先的,因此 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的 block 到我编写的 Lambda 函数,该函数将迭代更新并对 DynamoDB 执行必要的放置或更新命令。

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 移动平台提供的许多非常重要的功能。

主要是,我们有几千行代码来处理无冲突合并解决方案,如果您有多个客户端将数据写入同一个 Realm,而所有客户端都处于离线状态。此外:
  • 我们为您处理网络。您不必担心或关心设置连接、客户端和服务器之间的协议(protocol),也不必担心事情是否正确序列化。
  • 我们的协议(protocol)也非常轻量级,因为我们只能从 Realm 数据库传输事务日志;不是序列化对象或类似的东西。
  • 我们的同步非常快。当我们启动 RMP 时,您可能已经看过抽奖演示视频。因为我们的同步直接集成到 Realm 中,所以我们能够挤出额外的性能。我们已经构建了许多聊天应用程序以及一些不在内部的应用程序,人们不断对消息传输的速度感到惊讶。
  • 您在服务器和客户端上使用相同的 SDK 和 API(尽管使用不同的语言)。
  • 我们不断添加您不必手动构建的功能(例如经常请求的部分复制和对象级权限)。

  • 另一方面:

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

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

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

    关于swift - 将 Realm 与 A​​mazon DynamoDB 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42375009/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com