我们正在使用Parse.com构建iOS应用程序,但仍无法找到有效备份数据的正确方法。
作为前提,我们拥有并且将拥有大量数据存储行。 假设我们有一个100万行的类,假设我们备份它,然后想要在危险情况(如生产中的数据丢失)之后将其带回Parse。
我们考虑的几个解决方案如下:
1)使用外部服务器进行备份
备份: - 使用REST API不断将数据备份到远程MySQL服务器(我们选择MySQL进行自定义分析,因为使用MySQL处理数据的速度更快更容易)
ImportBack: a) - 从MySQL备份重新创建JSON对象,并使用REST API发送回Parse。 假设我们使用批处理操作,允许使用1个查询创建50个同时对象,并假设每个查询需要1秒,1百万个数据集需要5.5小时才能转移到Parse。
b) - 从MySQL备份重新创建一个JSON文件,并使用仪表板手动导入数据。 我们用这种方法尝试了700,000条记录文件:加载指示器停止并显示左侧窗格中的行数大约需要2小时,但现在它从未在右侧窗格中打开(它表示“操作超时” )自上传开始以来已超过6小时。
所以我们不能依赖1.b,而1.a似乎需要很长时间才能从灾难中恢复过来(如果我们有1000万条记录,那就像55小时= 2.2天)。
现在我们正考虑以下事项:
2)不断将数据复制到另一个应用程序
在Parse中创建以下内容: - 生产应用程序:A - 复制应用程序:B 因此,当A处于生产阶段时,每个查询都将复制到B(不断使用后台作业)。 缺点当然是它会消耗A的突发限制,因为它只会使查询量增加一倍。所以不是理想的扩大规模。
我们想要的是AWS RDS,它提供了每日自动备份的选项。 我想知道这对Parse来说有多难,因为它基于AWS的基础知识。
如果您对此有任何想法,请告诉我,我们很乐意分享诀窍。
P.S:
我们注意到上述想法中的一个重要缺陷。
如果我们使用REST API进行复制,则所有类的所有objectIds都将被更改,因此每个1to1或1toMany关系都将被破坏。
所以我们考虑为每个对象类设置一个uuid。
这个方法有什么问题吗? 我们想要实现的一件事是 query.include(“对象名”) (或在Obj-C“includeKey”), 但我想如果我们不将我们的app逻辑建立在objectId上,那将是不可能的。
寻找解决此问题的方法; 但是,基于uuid的管理是否可以在Parse的数据存储逻辑下运行?
答案 0 :(得分:5)
Parse 从不丢失了生产数据。虽然我们目前不提供自动备份,但您可以随时请求一个,我们正在努力使所有这些更好。此外,在大多数情况下,通过数据浏览器而不是使用REST批处理导入JSON导出文件更容易。
答案 1 :(得分:4)
我可以确认,今天,Parse确实丢失了我的数据。或者至少看起来是这样。
在多个应用上检测到多个错误(由Parse Status Twitter帐户同意)后,我们无法检索应用的数据,没有任何错误。
这是因为我们的一个类(类型指针)的整列都消失了,并且仪表板中的数据不再存在。
我们使用此指针列来过滤/检索数据,因此返回的查询和集合为空。
所以我们决定手动重新创建列。一个偶然的机会,重新创建具有相同名称和类型的列,解决了问题,数据仍然存在......我无法解释它,但我真的想,应用程序反应好像,数据丢失了。
因此,必须使用自动备份和还原选项,但这不是一种选择。
答案 2 :(得分:2)
2015年12月,parse.com发布了一个具有改进导出功能的新仪表板。 只需选择您的应用,点击"应用设置" - > "通用及#34; - > "导出应用数据"。如果导出进度完成,Parse会为您应用中的每个类生成一个json文件,并向您发送一封电子邮件。
更新:
伤心但真实,parse.com正在逐渐减少:http://blog.parse.com/announcements/moving-on/
答案 3 :(得分:0)
对于意外删除,在删除之前编写云函数以将当前行备份到另一个类将起作用。
对于常规备份,手动导出已更改的记录(使用过滤器)将非常有用。对于恢复,这需要您在数据浏览器中编写脚本/使用导入选项(不太确定)。您还可以在备份服务器上编写云功能复制数据(尚未尝试过)。
然而,在冒险进入之前您应该考虑云代码的一些限制: https://parse.com/docs/cloud_code_guide#functions-resource
答案 4 :(得分:0)
我有同样的问题,即备份解析服务器数据。由于解析服务器正在使用mongodb,这就是为什么备份数据不是问题我刚刚做了一件简单的事情。从服务器下载了mongodb备份。然后使用
恢复它 mongorestore /path-to-mongodump
(提取的文件)
因为解析已经转向开源。因此我们可以采用这种技术。