如果我想在用户之间共享一些数据,那么Realm Object Server的最佳策略是什么.例如,5个用户想要分享他们最喜欢的电影.每个人分享3部电影,他们应该看到15部电影的清单.
我的应用程序是脱机优先的,因此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,我也想听听为什么。
对我来说,这是一个重大决定,因此,我将不胜感激!谢谢
我在登录时在对象服务器控制台上收到此错误,无法再同步。同一个用户帐户以前工作过。
2016-12-13T13:20:52.858Z - 错误:同步服务器:连接 [6]:会话 [1]:收到错误变更集:断言失败:left().link_target_table_ndx == right().link_target_table_ndx (message_type='上传')
2016-12-13T13:20:52.858Z - 信息:同步服务器:连接[6]:会话[1]:会话终止(session_ident=1)。
2016-12-13T13:20:52.858Z - 信息:同步服务器:连接 [6]:发送:错误(错误代码 = 212,消息大小 = 22,尝试再次 = 0,会话标识 = 1)
2016-12-13T13:20:52.859Z - 信息:同步服务器:连接 [6]:客户端关闭连接:输入结束
这是什么意思?我如何解决它?
编辑:我尝试增加架构版本,然后我得到:
重要提示:如果您看到此错误,请将此日志发送至 help@realm.io。
2016-12-13 14:37:07.407848 proj[34851:10576594] 同步:打开领域文件:/var/mobile/Containers/Data/Application/65681835-AE09-4E4C-830A-BA7A8-objectADF0s/ /b77ccd68258d68251aafb1bac5d8d653/realm%3A%2F%2F192.168.0.12%3A9080%2F%7E%2Fz
2016-12-13 14:37:07.408088 proj[34851:10576378] /Users/x/y/z/Pods/Realm/Realm/RLMClassInfo.mm:97: [realm-core-2.2.0] 断言失败:rlmSchema .objectSchema.count == schema.size()
(发送到 help@realm.io)
我似乎无法运行我的Realm Object Server的https代理.我已经按照文档中的每一步,包括编辑configuration.yml文件进行更改:
proxy.https.enable: true
proxy.https.listen_address: ::
proxy.https.listen_port: 9443
proxy.https.certificate_path: 'cert_path'
proxy.https.private_key_path: 'private_key_path'
Run Code Online (Sandbox Code Playgroud)
当我访问http://example.com:9080时没关系,但访问https://example.com:9443不起作用 - 我已经验证了路径是正确的,并且证书/私钥组合是有效的.
任何帮助配置这将非常感激,因为我试图让应用程序符合Apple的ATS要求!