JSON как протокол кодирования в большом распределенном приложении - PullRequest
0 голосов
/ 07 января 2010

Я работаю над проектом, который обрабатывает и создает отчеты для больших наборов агрегируемых данных на основе строк. Существует первичная служба агрегирования, а затем множество клиентов, которые могут подписаться на различные представления данных с этого сервера. Объекты передаются взад и вперед между сервером Java и клиентами C #, закодированными в JSON. Мы замечаем, что синтаксический анализ объектов занимает много времени и требует много памяти. Использовали ли другие JSON для этой цели или видели подобное поведение?

Ответы [ 3 ]

1 голос
/ 07 января 2010

Мы привыкли использовать прямой XML по проводам и должны были использовать настраиваемую сериализацию (т. Е. Ручную) для множества объектов. Хотя не JSON, у нас были потери производительности из-за этого ограничения. Как только мы перевели все наши технологии на аналогичную архитектуру, мы смогли переключиться на двоичную сериализацию, которая работала намного лучше.

Однако на объектах, где у нас были проблемы с производительностью из-за размера, мы внесли некоторые изменения. Так как у нас был доступ к коду с обоих концов (и оба были c #), мы смогли двоично сериализовать полезную нагрузку, а затем закодировать ее с помощью base64, поскольку это должен был быть текст по проводам. Это помогло с точки зрения размера объекта, и сериализация прошла немного быстрее.

Поскольку вы переходите с Java на C #, у вас не будет такой роскоши. Таким образом, единственное, что я могу придумать в вашем случае, это попытаться оптимизировать анализ ответа JSON. Возможно, вы сможете использовать некоторые инструменты профилирования кода, чтобы помочь вам определить части, которые вызывают у вас проблемы с производительностью, а затем попытаться оптимизировать их. Кроме того, при десериализации в JSON убедитесь, что вы используете построитель строк для построения вашей окончательной строки. Если вы выполняете стандартные операции concat, это также снижает производительность.

Кроме того, вы можете проверить, что я видел в Интернете несколько сериализаторов JSON, написанных для c #, некоторые из них могут быть быстрее, чем то, что вы делаете, кто знает.

Не уверен, поможет ли это вам так сильно, но есть некоторая информация о вещах, которые мы видели при передаче сообщений на основе строк.

ОБНОВЛЕНИЕ: Только что видел это на dotnetkicks: JSON.Net это обновление от james для сериализаторов json.net. Может помочь.

0 голосов
/ 08 января 2010

JSON может быть дорогим для декодирования. Если производительность является проблемой, попробуйте использовать что-то вроде Hessian.

0 голосов
/ 07 января 2010

Я знаю, что для Java существует любое количество сериализаторов и десериализаторов JSON с открытым исходным кодом. Мы используем FlexJSON .

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