Я заинтересован в разработке библиотеки, которая будет синхронизировать базовую модель данных между устройствами через мобильный сервер Parse. Я хочу отразить функциональность, которую пытается обеспечить синхронизация данных ядра iCloud.Синхронизация основных данных с помощью Parse
Почему бы не использовать iCloud или Ensembles? В настоящее время я использую синхронизацию данных ядра iCloud в производственном приложении, и это not working well for me. Я также хочу предоставить аутентификацию, независимую от Apple ID, что является еще одной причиной, по которой я хочу уйти от iCloud. Что касается Ensembles, я не уверен, будет ли это работать с Dropbox из-за deprecation of the dropbox sync API.
Я еще не начал разрабатывать библиотеку. Я ищу отзыв о своем плане, который излагается ниже. Эта конструкция основана на this SO answer.
Общей конструкция библиотеки:
Библиотека обеспечит стандартный базовый стек данных, которые бы создать сохраняющийся координатор магазина и контекст управляемого объекта. Все стандартные операции CRUD с данными ядра будут проходить через интерфейс, предоставляемый библиотекой.
Каждый раз, когда выполняется операция CUD, объект синхронизации будет сохранен в Parse в фоновом режиме, который включает всю информацию, необходимую для воспроизведения операции. Это включает в себя: тип операции, который имел место, уникальный идентификатор для объекта, на котором работал, и в случае операции создания будет предоставлен родительский объект и отношения.
- Каждая операция будет иметь связанный с ней номер change_id. Каждый раз, когда устройство загружает и выполняет операцию, в нем будет храниться последняя переменная, связанная с этой операцией.
- Перед загрузкой каждой операции синхронизации устройство отправит запрос на сервер, чтобы гарантировать, что номер измененного номера совпадает с сохраненным локально. Если change_id на сервере выше, он сначала загрузит все операции синхронизации и выполнит их, а затем загрузит свои собственные операции синхронизации.
- Конфликты (два устройства, редактирующих одно и то же значение в автономном режиме), будут разрешены путем определения того, какое устройство изменило последнее значение.
Я ничего не теряю здесь? Каковы некоторые возможные проблемы с этим подходом? Я слышал, что синхронизация сложна, если этот тип обязательств остался до самых опытных разработчиков?
Дрю, большое спасибо за то, что нашли время, чтобы предоставить подробный и продуманный ответ на мой вопрос! Замечательно услышать от человека, который на самом деле успешно разработал библиотеку синхронизации. Ансамбли выглядят как интересный вариант, однако я склоняюсь к разработке собственной библиотеки, потому что будет легче сделать это для моих собственных потребностей и требований. С учетом сказанного, если у вас есть готовое решение, которое использовало Parse в качестве бэкэнд, для которого не требовался большой код, я бы определенно приобрел его в вашей текущей ценовой категории. Если я так чувствую, должны быть и другие, которые тоже так чувствуют :) – ChemDev
Возможно, слишком поздно для вас, но я посмотрю на добавление бэкэнда parse.com. –
@ChemDev Я говорю как кто-то, кто очень хорошо разбирается в Core Data, и у которого также было разработано собственное решение для синхронизации ... и затем понял, что я не сделал его таким же общим, как я хотел, когда у меня был проект, который мне нужен использовать S3 в качестве хранилища резервных копий. Я был настолько впечатлен Ensembles, что заплатил за версию 2, и это были лучшие деньги, которые я потратил годами. У вас есть доступ к исходному коду, поэтому вы можете изменять и адаптировать по своему усмотрению, но вам, вероятно, нужно только писать бэкэндовые плагины - вот что я сделал - и теперь мое приложение OS X напрямую синхронизируется с AWS S3 (с несколько пользователей). –