【发布时间】: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