Intereting Posts

Ограничения протобуферов – загрузка частичных данных и разделение строк

Я хочу проверить, является ли прото-буфер лучшим сериализатором для моего использования, мои исследования не обнаружили ничего другого, близкого к нему. Я работаю над мобильным приложением java backend и android (java), однако возможно, что другой клиент будет создан в недалеком будущем, поэтому я хочу что-то перекрестная платформа. Грубый проект структуры данных:

message All { repeated Line lines = 1; Common common = 2; } 

Есть пара сотен объектов Line, каждая линия довольно сложная и берет ~ 100 kB сама по себе.

Две проблемы, которые я вижу с протобуфером – при запуске приложения мне нужна только часть доступных данных – просто «Обычная» и основная информация из «Линии». Можно ли загружать частичные данные? – каждый объект Line содержит сотни строк, но одна и та же строка встречается в нескольких объектах Line, поэтому я хочу попытаться поделиться ими между этими объектами. Возможно ли это на уровне proto buf или нужно ли быть частью уровня приложения?

Благодаря!

Solutions Collecting From Web of "Ограничения протобуферов – загрузка частичных данных и разделение строк"

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

Основываясь на том, что вы написали, я бы даже сказал, что простой массив байтов GZIPped (или JSON, поскольку большая его часть является пригодной для печати (вы заявили, что это String s)), может быть лучше для вас («повторное использование» большого количества материалов по объектам Line = > GZIP будет качать).

И, как утверждали другие: с protobuf невозможно загрузить «частичные структуры данных» (на самом деле ваша не будет частичной, если «повторная» часть – это, например, Collection , потому что protobuf позаботится о сегментировании ваших Данные в самой структуре).

Я бы поставил свои два цента на потоки GZIPped JSON (например, с Джексоном), конечно, в этом случае вы уменьшили бы пропускную способность со стоимостью циклов процессора.

Отвечая на мой вопрос о загрузке частичных данных. Я еще не пробовал это на практике, но мне интересно, не работает ли следующее:

 message All { repeated Line lines = 1; Common common = 2; } message All_partial { Common common = 2; } 

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