Search code examples
google-app-enginegoogle-cloud-datastoredatabase-backups

Is copying entities from one app to another to backup your data recommended?


I'm referring tothe datastore admin tool explained here: http://code.google.com/appengine/docs/adminconsole/datastoreadmin.html

One way of backing up locally is by using bulkloader.py, but I'm liking this solution better as your data stays in Google's cloud and can be easily transferred from one app to the other using a button in the admin console on an entity by entity basis. thinking of having two apps, one that i can manually back up to every week, and another that actually serves users. The backup app might incur some storage costs but overall costs would be minimal as no front/backend instances would be used except as needed for the backups...


Solution

  • Backing up one GAE app's data to another app is certainly not recommended by me. To me, there are a handful of reasons to backup:

    1. To safeguard against a catastrophic outage on Google's part.
    2. To safeguard against a programming error on your part that results in significant data loss.
    3. To safeguard against your Google account being revoked.

    Backing up to another GAE app does relatively little on each of these.

    1. If you use the High Replication datastore, you're already distributing your data all across Google's cloud, so doing that again just seems redundant -- but not in the high availability sense of the word. The only way Google is going to lose your data is through some catastrophic disaster, in which case both of your apps may be in peril.
    2. If you backup your data locally, you can store historic snapshots. Whereas if you're simply backing up to another app, you aren't storing historic data, so you have little protection against programmer error unless you catch it in between the time the error happens and when you're going to do your next backup.
    3. In the event that Google, for whatever reason, kills your account, you lose both apps and all your data.

    Ultimately, by backing up to another GAE, you still have all your eggs in one basket. You've just partitioned your basket. If your data is important enough to be backed up outside of your app, it's important enough to backup locally or to another provider entirely. That's my opinion anyway.