синхронизировать структуры данных между ненадежным клиентом и сервером, когда данные слишком велики для клиента - PullRequest
0 голосов
/ 15 мая 2011

Резюме:

Как мне синхронизировать очень большой объем данных с клиентом, который не может хранить все данные в памяти и постоянно отключается?

Пояснение:

У меня есть приложение в режиме реального времени (ajax / comet), которое будет отображать некоторые данные в Интернете. Мне нравится думать об этом как о представлении в Интернете и модели на сервере.

Скажем, у меня есть большое количество записей на сервере, все они добавляются / удаляются / изменяются все время. Вот проблемы:

-Это Интернет, клиент, вероятно, имеет много подключений / отключений. Пока клиент отключен, данные могут быть изменены, и клиент должен будет обновляться при повторном подключении. Однако клиент не может отправлять ВСЕ данные каждый раз, когда происходит повторное подключение, так как данные очень велики.

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

Я понимаю, что первоначально полный снимок некоторого релевантного подмножества данных будет отправляться клиенту, а после этого только инкрементные обновления. Скорее всего, это будет сделано через какие-то порядковые номера ... клиент скажет "последнее полученное мной обновление # 234", и клиент будет отправлять все сообщения между # 234 и # текущим.

Я также понимаю, что представление клиента уведомит сервер о том, что оно «отображает» записи 100–200 «поэтому отправляйте только те» (возможно, 0–300, независимо от стратегии).

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

Я хочу сделать это либо на Java, либо на node.js. Если решения доступны на других языках, я буду готов переключиться.

1 Ответ

1 голос
/ 17 июня 2013

Попробуйте паб / суб решение.Подпишите клиента в указанное время начала на события вашего сервера.Сервер регистрирует все события изменения данных в зависимости от времени их возникновения.После определенного времени повторного подключения вашего клиента клиент запрашивает список всех измененных строк данных с момента последней синхронизации.Вы можете сохранить всю логику на сервере и просто синхронизировать изменения.Результатом будет типичная инструкция «select * from table, где id in (select id from changes_rows where change_date> Given_date)» на сервере, которая может быть оптимизирована.

...