У меня есть веб-приложение (приложение ASP .NET), размещенное на веб-сервере (IIS) и клиентском настольном приложении (служба Windows). Веб-приложение имеет древовидную структуру в таблицах базы данных. Так, например, есть таблица [Дерево] с столбцами (NodeId, NodeName, ParentNodeId). Таким образом, у вас есть рекурсивная древовидная структура. На стороне клиента есть структура папок, соответствующая структуре дерева сервера. Так, например, если вы следующие записи в таблице Tree на стороне сервераКак синхронизировать две древовидные структуры?
NodeId NodeName ParentNodeId
------ -------- ------------
1 Folder1 NULL
2 Folder2 1
3 Folder3 1
Тогда у вас есть структура папок на стороне клиента, как
Folder1 > Folder2
Folder1 > Folder3
Теперь, когда структура дерева обновляется на сервере мне нужно обновить структуру папок на клиенте. Для этого у меня есть веб-сервис, который клиент вызывает с фиксированным интервалом и извлекает всю структуру дерева, а затем соответственно обновляет структуру папок. Однако отправка всей древовидной структуры на каждый вызов кажется мне неэффективной.
Есть ли какой-либо другой подход, эффективный, который может быть использован для решения этой проблемы? Как используя другую структуру данных для хранения иерархии
Edit 1: На стороне сервера может быть любое изменение, как, например, дл перемещение/копирование всего подмножества узлов на новый родительский узел или удаление всего подмножества узлов
Вы можете отправить информацию о том, что изменилось с данного времени; отправка diff, а не весь набор данных, применима независимо от структуры этих данных. – Servy
Другой вариант - запомнить последовательность операций модификации (добавленный узел, удаление узла, обновленный узел), которые были применены к дереву и корму, которые предназначены для клиентов, чтобы они могли реплицировать их с их конца. – serhiyb