Различение документа JSON - PullRequest
4 голосов
/ 26 июня 2010

Ну, мой вопрос немного сложен, но здесь идет речь:

У меня есть сервер Python, который хранит клиентские (написанные на JavaScript) сеансы и полностью знает, что клиент в настоящее время хранит в своемstate.

Сервер будет постоянно извлекать данные из базы данных и проверять наличие изменений в состоянии клиента.Данные в формате JSON;состоящий в основном из списков и диктов.Мне нужен способ отправить ответ клиенту с указанием изменить свои данные в соответствии с тем, что имеет сервер.

Я рассмотрел:

  • Отправка JSON-сериализованной рекурсивно разнесенной версиидиктовать измененные элементы и никогда не использовать списки - неплохо, но я не могу использовать списки
  • Отправить клиенту полную версию сервера о состоянии клиента - дорого и неэффективно
  • Найти некоторыеизвилистый способ сравнения списков - болезненный и грязный
  • Различение текста на основе двух после вывода в виде JSON - просто глупо

Я довольно озадачен этим, и я быпризнателен за любую помощь в этом.

ОБНОВЛЕНИЕ

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

1 Ответ

3 голосов
/ 26 июня 2010

Смежный вопрос

См

Существует несколько возможных подходов:

  1. Выполнить рекурсивный анализ различий между деревьями;
  2. Инкапсулируйте ваши обновления JSON так, чтобы они одновременно генерировали diff;
  3. Генерация JSON только для изменений непосредственно из ваших данных.

Каковы ваши ожидаемые средние и максимальные размеры для состояния клиента JSON?

Каковы ваши ожидаемые средние и максимальные размеры для обновлений diff?

Как часто будут запрашиваться обновления?

Как быстро меняются базовые данные?

Почему вы не можете использовать списки?

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

Может быть полезно увидеть некоторые примеры данных - два набора данных о состоянии клиента JSON и разницу между ними.

...