Realistic Data Backup method for Parse.com

余生长醉 提交于 2019-12-20 09:37:02

问题


We are building an iOS app with Parse.com, but still can't figure out the right way to backup data efficiently.

As a premise, we have and will have a LOT of data store rows. Say we have a class with 1million rows, assume we have it backed up, then want to bring it back to Parse, after a hazardous situation (like data loss on production).

The few solutions we have considered are the following:

1) Use external server for backup

BackUp: - use the REST API to constantly back up data to a remote MySQL server (we chose MySQL for customized analytics purpose, since it's way faster and easier to handle data with MySQL for us)

ImportBack: a) - recreate JSON objects from MySQL backup and use the REST API to send back to Parse. Say we use the batch operation which permits 50 simultaneous objects to be created with 1 query, and assume it takes 1 sec for every query, 1million data sets will take 5.5hours to transfer to Parse.

b) - recreate one JSON file from MySQL backup and use the Dashboard to import data manually. We just tried with 700,000 records file with this method: it took about 2 hours for the loading indicator to stop and show the number of rows in the left pane, but now it never opens in the right pane (it says "operation time out") and it's over 6hours since the upload started.

So we can't rely on 1.b, and 1.a seems to take too long to recover from a disaster (if we have 10 million records, it'll be like 55 hours = 2.2 days).

Now we are thinking about the following:

2) Constantly replicate data to another app

Create the following in Parse: - Production App: A - Replication App: B So while A is in production, every single query will be duplicated to B (using background job constantly). The downside is of course that it'll eat up the burst limit of A as it'll simply double the amount of query. So not ideal thinking of scaling up.

What we want is something like AWS RDS which gives an option to automatically backup daily. I wonder how this could be difficult for Parse since it's based on AWS infra.

Please let me know if you have any idea on this, will be happy to share know-hows.

P.S.:

We’ve noticed an important flaw in the above 2) idea.

If we replicate using REST API, all the objectIds of all Classes will be changed, so every 1to1 or 1toMany relations will be broken.

So we think about putting a uuid for every object class.

Is there any problem about this method? One thing we want to achieve is query.include(“ObjectName”) ( or in Obj-C “includeKey”), but I suppose that won’t be possible if we don’t base our app logic on objectId.

Looking for a work around for this issue; but will uuid-based management be functional under Parse’s Datastore logic?


回答1:


Parse has never lost production data. While we don't currently offer automated backups, you can request one any time you like, and we're working on making all of this even nicer. Additionally, it's easier in most cases to import the JSON export file through the data browser rather than using the REST batch.




回答2:


I can confirm that today, Parse did lost my data. Or at least it appeared to be so.

After several errors where detected on multiple apps (agreed by Parse Status twitter account), we could not retrieve data for an app, without any error.

It was because an entire column of one of our class (type pointer) disappeared and data was not present anymore in the dashboard.

We are using this pointer column to filter / retrieve data, so the returned queries and collections were empty.

So we decided to recreate the column manually. By chance, recreating the column, with the same name and type, solved the issue and the data was still there... I can't explain it but I really thought, and the app reacted as if, data were lost.

So an automated backup and restore option is mandatory, it is not an option.




回答3:


On December 2015 parse.com released a new dashboard with an improved export feature. Just select your app, click on "App Settings" -> "General" -> "Export app data". Parse generates a json-file for every class in your app and sends an email to you, if the export-progress is done.


UPDATE:

Sad but true, parse.com is winding down: http://blog.parse.com/announcements/moving-on/




回答4:


I had the same issue of backing up parse server data. As parse server is using mongodb that is why backing up data is not an issue I have just done a simple thing. downloaded the mongodb backup from the server. And then restored it using

mongorestore /path-to-mongodump (extracted files)

As parse has been turned to open source.Therefore we can adopt this technique.




回答5:


For accidental deletes, writing a cloud function 'beforedelete' to backup the current row to another class would work.

For regular backups, manual export of changed records (use filter) will be useful. For recovery this requires you to write scripts / use import option (not so sure) in data browser. You could also write a cloud function replicate data on your backup server (haven't tried this yet).

However there are some limitations to cloud code that you should consider before venturing into it: https://parse.com/docs/cloud_code_guide#functions-resource



来源:https://stackoverflow.com/questions/24648784/realistic-data-backup-method-for-parse-com

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!