Подтвердить что ты не робот

Реалистичный метод резервного копирования данных для Parse.com

Мы создаем приложение iOS с Parse.com, но до сих пор не можем найти правильный способ эффективного резервного копирования данных.

В качестве предпосылки мы имеем и будем иметь множество строк хранилища данных. Скажем, у нас есть класс с 1 миллионом строк, предположим, что мы его поддерживаем, а затем хотим вернуть его в Parse после опасной ситуации (например, потери данных при производстве).

Несколько рассмотренных нами решений следующие:

1) Используйте внешний сервер для резервного копирования

BackUp: - использовать REST API для постоянного резервного копирования данных на удаленный сервер MySQL (мы выбрали MySQL для индивидуальной цели аналитики, так как быстрее и проще обрабатывать данные с MySQL для нас)

ImportBack: a) - воссоздать объекты JSON из резервной копии MySQL и использовать REST API для отправки обратно в Parse. Предположим, что мы используем пакетную операцию, которая позволяет создать 50 одновременных объектов с 1 запросом, и предположим, что для каждого запроса требуется 1 секунда, 1 миллион наборов данных займет 5.5 часов для передачи в "Анализ".

b) - воссоздайте один файл JSON из резервной копии MySQL и используйте Dashboard для импорта данных вручную. Мы просто попробовали с 700 000 файлов записей с помощью этого метода: потребовалось около 2 часов для остановки индикатора загрузки и отображения количества строк на левой панели, но теперь он никогда не открывается в правой панели (в нем говорится "время работы",), и это за 6 часов с момента загрузки.

Таким образом, мы не можем полагаться на 1.b, а 1.a, похоже, слишком долго восстанавливается после катастрофы (если у нас 10 миллионов записей, это будет как 55 часов = 2,2 дня).

Теперь мы думаем о следующем:

2) Постоянно реплицируйте данные в другое приложение

Создайте в Parse следующее: - Производственное приложение: A - Репликационное приложение: B Таким образом, пока A находится в процессе производства, каждый запрос будет дублироваться в B (постоянно используя фоновые задания). Недостатком является, конечно, то, что он съедает предел всплеска A, поскольку он просто удвоит количество запросов. Поэтому не идеальное мышление о масштабировании.

Мы хотим что-то вроде AWS RDS, который дает возможность автоматически создавать резервные копии ежедневно. Интересно, как это может быть сложно для Parse, поскольку он основан на AWS-инфраструктуре.

Пожалуйста, дайте мне знать, если у вас есть идея по этому поводу, мы с удовольствием поделимся ноу-хау.

P.S:.

Weve заметил важный недостаток в вышеупомянутой идее.

Если мы реплицируем с использованием REST API, все объекты всех классов будут изменены, поэтому каждое отношение 1to1 или 1toMany будет нарушено.

Итак, мы думаем о том, чтобы поместить uuid для каждого класса объектов.

Есть ли какие-либо проблемы с этим методом? Одна вещь, которую мы хотим достичь, - это query.include( "ObjectName" ) (или в Obj-C "includeKey" ), но я полагаю, что это будет невозможно, если мы не основываем нашу логику приложения на objectId.

Ищете работу по этой проблеме; но будет ли управление на основе uuid функционировать под логикой Parses Datastore?

4b9b3361

Ответ 1

У parse есть никогда потерянные данные о производстве. Хотя в настоящее время мы не предлагаем автоматическое резервное копирование, вы можете запросить его в любое удобное для вас время, и мы работаем над тем, чтобы сделать все это еще приятнее. Кроме того, в большинстве случаев проще импортировать файл экспорта JSON через браузер данных, а не использовать пакет REST.

Ответ 2

Я могу подтвердить, что сегодня Parse потерял мои данные. Или, по крайней мере, это было так.

После нескольких ошибок, обнаруженных в нескольких приложениях (согласованных с помощью учетной записи twitter в Parse Status), мы не смогли получить данные для приложения без каких-либо ошибок.

Это произошло потому, что весь столбец одного из наших классов (указатель типа) исчез и данные больше не присутствовали на панели управления.

Мы используем этот столбец указателя для фильтрации/извлечения данных, поэтому возвращаемые запросы и коллекции были пустыми.

Итак, мы решили вручную создать столбец. Случайно, воссоздание столбца с тем же именем и типом решило проблему, и данные все еще были там... Я не могу это объяснить, но я действительно думал, и приложение реагировало так, как будто данные были потеряны.

Таким образом, автоматическое резервное копирование и восстановление является обязательным, это не вариант.

Ответ 3

В декабре 2015 года parse.com выпустил новую панель мониторинга с улучшенной функцией экспорта. Просто выберите свое приложение, нажмите "Настройки приложения" → "Общие" → "Экспорт данных приложения". Parse генерирует json файл для каждого класса вашего приложения и отправляет вам электронное письмо, если выполняется экспорт.

parse export


UPDATE:

Грустно, но true, parse.com отключается: http://blog.parse.com/announcements/moving-on/

Ответ 4

Для случайных удалений работа над облачной функцией "beforedelete" для резервного копирования текущей строки в другой класс будет работать.

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

Однако есть некоторые ограничения на облачный код, который вы должны рассмотреть, прежде чем вникать в него: https://parse.com/docs/cloud_code_guide#functions-resource

Ответ 5

У меня была такая же проблема с резервным копированием данных сервера разбора. Поскольку сервер синтаксического анализа использует mongodb, поэтому резервное копирование данных не является проблемой, которую я просто сделал просто. скачал резервную копию mongodb с сервера. А затем восстановил его, используя

mongorestore /path-to-mongodump (извлеченные файлы)

По мере того как синтаксический анализ был обращен к открытому исходному коду, мы можем принять эту технику.