Вопрос немного общий, поэтому, чтобы помочь сузить фокус, я поделюсь своей текущей настройкой, которая мотивирует этот вопрос. У меня есть веб-служба LAMP, использующая API RESTful. У нас есть две клиентские реализации: один браузер на основе javascript-клиента (локальное хранилище) и один клиент на базе iOS (хранилище основных данных). Очевидно, что эти два клиента хранят данные по-разному, но сами данные должны храниться в двухсторонней синхронизации с удаленным сервером как можно чаще.Каков современный стандарт программирования для синхронизации данных между веб-сервисом и клиентом?
В настоящее время наш процесс «синхронизации» немного тупой (как в, не-умный). Концептуально это выглядит так:
- Клиент периодически запрашивает сервер для ВСЕХ самых последних данных.
- Сервер отправляет удаленные данные, которые перезаписывают текущий набор локальных данных в хранилище клиента.
- Любое локальное создание/обновление/удаление после этой точки рассматривается как золото и немедленно отправляется на сервер.
Данные сами сохраняются реляционно и периодически обновляются пользователями-клиентами. Клиенты в моем конкретном случае не слишком заботятся о самих взаимоотношениях (поэтому на данный момент мы можем уйти с локальным хранилищем в браузере).
Очевидно, что это не настоящая синхронизация. Я хочу перейти в систему, где, по сути, «diff» из последних изменений периодически отправляется на сервер, и сервер отправляет обратно «diff» из последних изменений, о которых он знает. Кажется очень трудно добраться до этого момента, но, может быть, я просто не очень хорошо понимаю проблему.
REST чувствует себя неплохо, но REST говорит только о том, как друг с другом разговаривают друг с другом, а не как синхронизировать данные. (Этот процесс синхронизации остается за разработчиком каждого магазина.) Каков наилучший способ реализации этого процесса? Существует ли современный набор шаблонов проектирования программ, которые применяются, чтобы сообщить конкретное решение этой проблемы? В основном меня интересует общий (технологический агностик) подход, если это возможно ... но конкретные рамки были бы полезны для того, чтобы смотреть, если они существуют.
Я чувствую, что это одна из больших проблем современного программирования, о которой я бы хотел узнать в школе. Общая проблема действительно кажется достаточно сложной, чтобы гарантировать весь семестр исследования. Я просто хочу знать, как это сделать правильно! – wxactly
Можете ли вы немного рассказать о самих данных ... как это структурировано? Как часто это меняется? Что подсказывает изменения (инициируется пользователем или приложение/сервер)? –
Данные сами хранятся реляционно и периодически обновляются пользователями-клиентами. Я обновил вопрос, чтобы добавить немного об этом. – wxactly