Есть иерархическая структура,
строится на сервере, потом передаётся клиентам,причём,изменния происходят на сервере,но клиентам передается вся структура полностью, если клиентов много, то это ощутимая нагрузка на сервер, так т.к структура состоит из 15000-20000 элементов.Идея состоит в том что клиент хранит свою локальную копию структуры, если происходит изменние на сервере, то клиенту передается только изменение, а не вся структура. Также необходимо сохранять изменения на серверной стороне для тех клиентов, которые не подключены к серверу в данный момент.
Какие есть идеи как для такой структуры хранить изменения?
Спасибо
Premature optimization is the root of all evil in programming. Donald Knuth
надо каждому элементу присобачить уникальный идентификатор.
вместо указателей, при передаче между клиентом и сервером, передавать эти идентификаторы.
тогда нужно будет просто обмениваться списками добавленных, удаленных и измененых элементов.
чтобы решить проблему номер два надо присабачить ид к каждой транзакции. когда клиент подключаеться он передает номер последней версии. сервер собирает историю изменений с этого момента (попутно оптимизируя ее: например если элемент изменился дважды, то посылаеться только последняя копия)
Здравствуйте, pigeon, Вы писали:
P>Да спасибо, так и хотел, вопрос был в том как идентифицировать элементы.
завести в них поле типа int держать там уникальное значение.
P>Например если было изменение P> P>то передавать как-то так
P>-(9,4) изменение P>-(9,5) изменение P>... P>-(11,5) изменение
Здравствуйте, pigeon, Вы писали:
P>Какие есть идеи как для такой структуры хранить изменения?
Да элементарно. Для каждого изменения сохраняй само изменение и версию структуры, которая получилась после измненения. Клиент будет сообщать серверу последнюю версию своей струкруры, а сервер будет слать измненения, произошедшие после этой версии...
Здравствуйте, pigeon, Вы писали:
P>Добрый день
P>Есть иерархическая структура, P>... P>строится на сервере, потом передаётся клиентам,причём,изменния происходят на сервере,но клиентам передается вся структура полностью, если клиентов много, то это ощутимая нагрузка на сервер, так т.к структура состоит из 15000-20000 элементов.Идея состоит в том что клиент хранит свою локальную копию структуры, если происходит изменние на сервере, то клиенту передается только изменение, а не вся структура. Также необходимо сохранять изменения на серверной стороне для тех клиентов, которые не подключены к серверу в данный момент. P>Какие есть идеи как для такой структуры хранить изменения?
про идентификаторы и версии уже сказали.
Можно еще высылать клиенту не всю структуру целиком, а только те элементы, какие он видит в начальном положении — потом по его переходе на какой-то узел — подгружать всех его потомков.
Если к каждому узлу привязана какая-то информация — можно не передавать ее сразу, а подгружать при обращении к нему.
Здравствуйте, pigeon, Вы писали:
P>еще варианты есть?
Добавляешь к каждой записи TimeStamp и меняешь его при каждом изменении. При синхронизации клиент отдает свой максимум в колонке с TimeStamp а сервер выбирает из таблицы записи в которых TimeStamp больше переданного. Если обновление надо инициировать со стороны сервера, то на каждого пользователя надо хранить TimeStamp последней синхронизации.