Мы создаем приложение 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?