Я начинаю свой первый проект PhoneGap, используя AngularJS. Это приложение, управляемое базой данных, с использованием REST API в качестве бэкэнд. Начнем с того, что я не собираюсь хранить данные локально вообще, поэтому он не будет работать без Интернета.
Однако в конечном итоге мне захочется, чтобы он хранили данные на локальном компьютере и синхронизировался, когда доступен Интернет, поскольку я знаю, что я лично время от времени отключаю подключения к Интернету на своем телефоне (воздушные самолеты, батарея с низким уровнем заряда) или не имеет баров. Мне было интересно, можете ли вы указать мне на некоторые хорошие ресурсы для такого типа синхронизации. Некоторые рекомендуемые библиотеки? Или, возможно, некоторые дискуссии о подводных камнях и о том, как их крутить вокруг. Я немного искал Google, но думаю, что сейчас, я не знаю вопросов, которые нужно задать.
Кроме того, мое намерение сначала создать интернет-зависимость, а затем добавить синхронизацию... Это хорошая идея, или я стреляю себе в ногу? Нужно ли мне синхронизировать его с самого начала?
У кого-то предлагалось создать приложение как локально только сначала, а только для части, доступной только для Интернета, которая имеет определенную логику. Удаленное хранилище очень важно для меня. Я знаю, что решение имеет много общего с моими задачами для приложения, но с точки зрения построения этого, с конечной целью является локальное хранилище + интернет-хранилище и двухсторонняя синхронизация, что будет проще? Или это даже имеет значение?
Для начала я подумываю использовать UUID, а не последовательные целые первичные ключи. Я также думал о назначении каждому устройству идентификатора, который имеет префикс на любых генерируемых им ключах, но это кажется деликатным. Кто-нибудь использовал любую технику? Мысли?
Я думаю, мне нужна хорошая система, чтобы рассказать, какие данные были синхронизированы. На стороне клиента, я думаю, любые записи, которые создаются/редактируются, могут быть помечены для синхронизации. Но на стороне сервера у вас несколько клиентов, поэтому это не сработает. Я предполагаю, что вы могли бы иметь last_updated timestamp и синхронизировать все обновленные синхронизировать последнюю успешную синхронизацию.
Как насчет записей, отредактированных в нескольких местах? Если два клиента редактируют, а затем хотят синхронизировать, у вас есть некоторая двусмысленность в отношении слияния, например, при объединении ветвей в git или других системах управления версиями. Как вы справляетесь с этим? Я предполагаю, что git делает это, сохраняя разности каждого коммита. Думаю, вы могли бы хранить отличия? Чем больше я думаю об этом, тем сложнее это звучит. Я передумал это или не думал об этом?
Как насчет хранилища на стороне клиента? Я думал о SQLite или о локальном хранилище PhoneGap (http://docs.phonegap.com/en/1.2.0/phonegap_storage_storage.md.html). Рекомендации? Синхронизация будет проходить через REST API, обмениваясь JSON, поэтому я думал о том, что на самом деле хранит данные как JSON, или что-то похожее на JSON, которое легко конвертировать, было бы неплохо. С другой стороны, если мне нужно будет обменять какой-то формат данных, возможно, что мне нужно хранить?