2010-07-29 2 views
1

Наконец-то я смог написать протокол буферов протокола через REST и сделал некоторое сравнение с XStream, который мы в настоящее время используем. Все кажется замечательным, только спотыкайтесь с одной вещью.Буферы протокола, обрабатывающие очень большое сообщение String?

У нас есть очень большие сообщения в одном конкретных атрибутов, что-то вроде этого

message Data { 
    optional string datavalue=1; 
} 

DataValue выше чрезвычайно большие текстовые сообщения. Размер составляет 512kb - 5 Mb.

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

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

Мне было интересно, есть ли у кого-нибудь мнение или, может быть, решение из моего дела выше?

Благодаря

ответ

2

Я бенчмаркинга различные инструменты сериализации некоторое время назад и заметил, что библиотека Protobuf Java занимает около 1.7x до тех пор, сериализовать строки как java.io.DataOutputStream сделал. Когда я заглянул в нее, это, казалось, связано с странным артефактом того, как JVM оптимизирует определенные пути кода. Однако в моем бенчмаркинге XStream всегда был медленнее, даже с очень длинными строками.

Одной из быстрых попыток является форматно-совместимая библиотека Protostuff вместо библиотеки Protobuf Google.

0

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