我的应用程序是离线优先的,因此 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,我很想知道为什么。
这对我来说是一个重大决定,所以我会感谢我能得到的所有帮助!谢谢