Поиск и оптимальный способ распространения изменений словаря по сети - PullRequest
2 голосов
/ 05 апреля 2011

Проблема: у вас есть большой словарь на сервере, и вы распространяете его среди большого количества клиентов.

Словарь обновляется только на стороне сервера, но вы хотите разрешить клиентам обновлять словарь, сводя к минимуму передаваемые данные.

Также можно предположить, что у вас огромное количествоклиенты, запрашивающие обновления, возможно, ежедневно или около того.

Если ключ удален с сервера, вы ожидаете, что он будет удален с клиента при синхронизации.

Как бы вы решили эту проблему?

Дополнительный запрос: решение должно быть простым в реализации на различных платформах , включая настольные (Windows, Linux, OS X) и мобильные (iOS, Android, ...).Если этот запрос на использование сторонней библиотеки, их лицензия должна быть очень либеральной, как BSD.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

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

Я предлагаю вам взглянуть на CouchDB.Он имеет следующие функции, которые делают его актуальным для вашей проблемы imo:

  • Это хранилище значений ключей = словарь, поэтому должно легко соответствовать вашей модели данных.
  • Поддерживает репликацию с компьютерак машине (или нескольким машинам) в случайно подключенной среде.Это должно соответствовать вашему сценарию использования клиентов, время от времени подключающихся к серверу для получения всех обновлений.
  • Хорошо работает в распределенной среде, поэтому вы сможете обрабатывать огромное количество клиентов, например, за счет обслуживания нескольких серверов.
  • Хорошее масштабирование - работает на серверах и любых клиентах (в том числе мобильный).Кроме того, работает на нескольких ОС.
  • Он имеет довольно эффективный протокол данных для процесса репликации.
  • Это бесплатно.
0 голосов
/ 05 апреля 2011

Если это на уровне файла, вы используете rsync (или удивительное bsdiff или xdelta или подобное).

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

Если словарь большой, а количество запросов низкое, клиенты могут просто подключаться к серверу для каждого поиска и всегда получать новейший ключ. Это часто масштабируется лучше, чем вы думаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...