Изменния иерархической структуре
От: pigeon Великобритания
Дата: 18.04.07 12:57
Оценка:
Добрый день

Есть иерархическая структура,

строится на сервере, потом передаётся клиентам,причём,изменния происходят на сервере,но клиентам передается вся структура полностью, если клиентов много, то это ощутимая нагрузка на сервер, так т.к структура состоит из 15000-20000 элементов.Идея состоит в том что клиент хранит свою локальную копию структуры, если происходит изменние на сервере, то клиенту передается только изменение, а не вся структура. Также необходимо сохранять изменения на серверной стороне для тех клиентов, которые не подключены к серверу в данный момент.
Какие есть идеи как для такой структуры хранить изменения?
Спасибо
Premature optimization is the root of all evil in programming. Donald Knuth
Re: Изменния иерархической структуре
От: cvetkov  
Дата: 18.04.07 13:23
Оценка: 1 (1)
а все элементы одинаковые?
хотя это не важно.

надо каждому элементу присобачить уникальный идентификатор.

вместо указателей, при передаче между клиентом и сервером, передавать эти идентификаторы.

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

чтобы решить проблему номер два надо присабачить ид к каждой транзакции. когда клиент подключаеться он передает номер последней версии. сервер собирает историю изменений с этого момента (попутно оптимизируя ее: например если элемент изменился дважды, то посылаеться только последняя копия)
Re[2]: Изменния иерархической структуре
От: pigeon Великобритания
Дата: 18.04.07 14:29
Оценка:
Да спасибо, так и хотел, вопрос был в том как идентифицировать элементы.

Мне в голову приходит только что-то типа как в матрице (не в фильме )

1 0 0 0 0 0
0 1 1 0 0 0
0 1 1 0 0 0
0 1 1 1 0 0
0 1 1 1 0 0
0 0 1 1 0 0
0 0 0 1 1 1
0 0 0 0 1 1
0 0 0 0 1 1
0 0 0 0 1 1
0 0 0 0 0 1

Например если было изменение

то передавать как-то так

-(9,4) изменение
-(9,5) изменение
...
-(11,5) изменение
Premature optimization is the root of all evil in programming. Donald Knuth
Re[3]: Изменния иерархической структуре
От: cvetkov  
Дата: 18.04.07 15:15
Оценка:
Здравствуйте, pigeon, Вы писали:

P>Да спасибо, так и хотел, вопрос был в том как идентифицировать элементы.


завести в них поле типа int держать там уникальное значение.

P>Например если было изменение

P>
P>то передавать как-то так

P>-(9,4) изменение

P>-(9,5) изменение
P>...
P>-(11,5) изменение

ну можно и так.
Re[3]: Изменния иерархической структуре
От: pigeon Великобритания
Дата: 18.04.07 17:59
Оценка:
Здравствуйте, pigeon, Вы писали:

[]

еще варианты есть?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Premature optimization is the root of all evil in programming. Donald Knuth
Re: Изменния иерархической структуре
От: ArtDenis Россия  
Дата: 19.04.07 03:11
Оценка:
Здравствуйте, pigeon, Вы писали:

P>Какие есть идеи как для такой структуры хранить изменения?

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

Хе-хе да тебе же уже примерно так и ответили
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: Изменния иерархической структуре
От: CrazyRoger  
Дата: 19.04.07 07:49
Оценка: +1
Здравствуйте, pigeon, Вы писали:

P>Добрый день


P>Есть иерархическая структура,

P>...
P>строится на сервере, потом передаётся клиентам,причём,изменния происходят на сервере,но клиентам передается вся структура полностью, если клиентов много, то это ощутимая нагрузка на сервер, так т.к структура состоит из 15000-20000 элементов.Идея состоит в том что клиент хранит свою локальную копию структуры, если происходит изменние на сервере, то клиенту передается только изменение, а не вся структура. Также необходимо сохранять изменения на серверной стороне для тех клиентов, которые не подключены к серверу в данный момент.
P>Какие есть идеи как для такой структуры хранить изменения?
про идентификаторы и версии уже сказали.

Можно еще высылать клиенту не всю структуру целиком, а только те элементы, какие он видит в начальном положении — потом по его переходе на какой-то узел — подгружать всех его потомков.
Если к каждому узлу привязана какая-то информация — можно не передавать ее сразу, а подгружать при обращении к нему.
Re[4]: Изменния иерархической структуре
От: Дьяченко Александр Россия  
Дата: 19.04.07 08:11
Оценка: +1
Здравствуйте, pigeon, Вы писали:

P>еще варианты есть?


Добавляешь к каждой записи TimeStamp и меняешь его при каждом изменении. При синхронизации клиент отдает свой максимум в колонке с TimeStamp а сервер выбирает из таблицы записи в которых TimeStamp больше переданного. Если обновление надо инициировать со стороны сервера, то на каждого пользователя надо хранить TimeStamp последней синхронизации.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.