Каков наилучший способ резервного копирования данных в Google App Engine?

Google сам предлагает два решения.

http://code.google.com/appengine/docs/python/tools/uploadingdata.html

Один из них является новым и экспериментальным и требует, чтобы вы запускали отдельную команду (и отдельно вводили свое имя пользователя и пароль) для каждого типа данных, которые вы хотите создать резервную копию.

Другой требует, чтобы вы дважды записывали информацию о структуре всех видов ваших данных, информацию, которая уже неявна в вашем файле моделей. (У нас есть 25 различных типов данных, поэтому я чувствителен к подобным вещам. Плюс это будет означать, что будущие изменения должны быть сделаны в 3-х местах.)

Тогда есть решение Aral Balkan (google для "gaebar" ), но его код в Github не обновляется примерно через год, и он дополнительно сообщает людям о внесении некоторых изменений в внутренние компоненты App Engine (что кажется рискованным, поскольку они меняются в каждой версии).

Я думаю, что я склоняюсь к не экспериментальному решению Google, но все они кажутся довольно плохими.

Ответы

Ответ 1

Вот более явное описание bulkloader.py no-config для резервного копирования и восстановления. Я не знаю, когда возникает эта проблема (переполнение стека).

Удаление данных из fooapp в файл с именем dump1.bin:

python2.5 /usr/local/google_appengine/bulkloader.py  \
  --dump --url http://fooapp.appspot.com/remote-api-url \
  --filename dump1.bin

У вас должен быть включен удаленный API. remote-api-url может быть _ah/remote_api в зависимости от вашей конфигурации.

Загрузка данных из dump1.bin в локальный экземпляр dev:

python2.5 /usr/local/google_appengine/bulkloader.py \
  --restore --url http://localhost:8080/remote-api-url \
  --filename dump1.bin --application fooapp

Это предполагает UNIX-подобную систему и что appengine устанавливается в /usr/local/google _appengine.

Я не знаю, работает ли он с Java, но это может быть.

Ответ 2

Посмотрите AppRocket (механизм репликации с открытым исходным кодом, который синхронизирует хранилище данных Google App Engine и базу данных MySQL). Проект кажется активным.

Ответ 3

Что не так с функциональностью --dump? Да, вы должны загружать каждый вид отдельно, но это будет иметь место с любым решением. Если вам просто нужны резервные копии, это точно соответствует вашим требованиям.