Подтвердить что ты не робот

Производительность сериализации С++

Я создаю распределенное приложение на С++, которое должно выполнять много сериализации и десериализации простых структур данных, которые передаются между различными процессами и компьютерами.

Я не заинтересован в сериализации сложных иерархий классов, но больше от отправки структур с несколькими простыми элементами, такими как число, строки и векторы данных. В векторах данных часто может быть много мегабайт. Я обеспокоен тем, что способы работы с текстом /xml слишком медленны, и я действительно не хочу писать это сам, поскольку проблемы, такие как строковое кодирование и число endianess, могут сделать его более сложным, чем это выглядит на поверхности.

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

Итак, мой вопрос сводится к следующему: кто-нибудь знает, быстро ли ускоряется сериализация для типичного варианта использования, описанного выше?

Также, если есть другие библиотеки, которые могут быть прав для этого, я буду рад услышать о них.

4b9b3361

Ответ 1

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

Ответ 2

ACE и ACE TAO приходят на ум, но вам может не понравиться размер и масштаб. http://www.cs.wustl.edu/~schmidt/ACE.html

Относительно вашего запроса о "быстром" и повышении. Это субъективный термин и не зная ваших требований (пропускной способности и т.д.), Вам сложно ответить на это. Не то, чтобы у меня были какие-то ориентиры для ускоренного материала...

Есть уровни обмена сообщениями, которые вы можете использовать, но они, вероятно, медленнее, чем boost. Я бы сказал, что вы определили хорошее решение для повышения, но я использовал только ACE и другие проприетарные средства связи/обмена сообщениями.

Ответ 3

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

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

Сказав это, похоже, что вы знаете большинство основных проблемных ситуаций с сериализацией (кодировка строки Endianess). Вы не учитывали совместимость версий и передовую/обратную совместимость. Если время не критично, я рекомендую написать собственный код сериализации. Это просветительский опыт, и уроки, которые вы изучаете, неоценимы. Хотя я буду предупреждать вас, это заставит вас ненавидеть XML-протоколы для их раздувания.:)

Какой бы путь вы ни выбрали, удачи в вашем проекте.

Ответ 5

boost.serialization не заботится о строковых кодировках или суждениях. Вы будете так же здоровы, если не будете использовать его, если это вам важно.

Вы можете посмотреть в ICE из ZeroC: http://www.zeroc.com/

Он работает аналогично CORBA, за исключением того, что он полностью определен и определен компанией. Поверхность заключается в том, что реализации работают по назначению, поскольку их не так много. Недостатком является то, что если вы используете язык, который они не поддерживают, вам не повезло.

Ответ 6

Если вы отправляете только четко определенные определенные структуры данных, возможно, вам следует искать ASN.1 в качестве методологии кодирования?

Ответ 7

Здесь также Thrift, который похож на альфа-проект, но используется и разрабатывается Facebook, поэтому у него есть несколько пользователей он.

Или старый добрый DCE, который стандартная MS решила использовать для COM. Его теперь с открытым исходным кодом, 20 лет слишком поздно, но лучше, чем никогда.

Ответ 8

Не упреждайте оптимизацию. Сначала измерьте и оптимизируйте.