рассчитать объект дельта - PullRequest
3 голосов
/ 28 августа 2009

Я работаю над приложением, в котором клиент и сервер совместно используют объектную модель, и графики объектов могут стать довольно большими.

Чтобы сохранить объект с клиента на сервер, в идеале я хотел бы отправить только разницу по проводам, чтобы минимизировать сетевой трафик. Я могу вытащить исходный граф объектов на сервер и применить к нему дельту

Интересно, есть ли какие-либо инструменты или проекты там или кто-то имел опыт работы с такими вещами ..

большое спасибо

Ответы [ 3 ]

4 голосов
/ 28 августа 2009

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

Вместо отправки всей измененной модели, мы решили сериализовать операций с данными. Например, операция может быть {CUT plane: (pt1, pt2, pt3)} или {DRILLHOLE (точка, радиус, глубина)}. Это прекрасно работает для нашего приложения, хотя может не подходить для вашей модели.

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

1 голос
/ 28 августа 2009

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

0 голосов
/ 19 ноября 2013

Я планирую свою первую N-уровневую архитектуру и натолкнулся на этот вопрос, как раз когда собирался опубликовать аналогичную. Весь пример кода, который я видел до сих пор, каждый раз проходит весь объектный граф по проводам, независимо от того, какие изменения действительно были сделаны. Я решил вместо этого принять подход, описанный выше. Хотя, похоже, это менее пройденная дорога.

Мне нравится идея передавать только дельты для каждого измененного свойства. Для свойств коллекции это будет то, что было добавлено и удалено. Для однозначного свойства это может быть просто новое значение. Я мог бы реализовать это в общем виде, чтобы накопление этих дельт было прозрачным для всех объектов домена. И дельты будут отправляться по сети в общем виде, без использования классов DTO, специфичных для моей модели предметной области.

Это заставило меня задуматься, не смогу ли я развить эту идею, используя ту же структуру разностных данных общего назначения для связи в направлении сервера к клиенту. В конце концов, вы могли бы иметь дельту, которая в основном заполняет пустой объект. Тогда я мог бы полностью устранить жестко закодированные классы DTO. Я гуглил "общие DTO" (без кавычек) и нашел это и это . Похоже, другие уже применили эту идею на практике.

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