FlatBuffers vs. Protobuf

Мой вопрос: если FlatBuffers намного быстрее, чем Protobuf, почему он не используется более широко по сравнению с Protobuf?

Раньше это была экспериментальная вещь, но сейчас она кажется достаточно зрелой, но пока не получила широкого распространения. Кажется, что люди в основном используют Flatbuffers для мобильных приложений / игр. Почему это так?

3 ответа

На это есть несколько причин:

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

  2. Когда существующая технология работает нормально, люди / организации, как правило, не хотят тратить время и ресурсы на новую технологию. Я лично работал над проверкой концепции с использованием плоских буферов для крупных организаций. Перед принятием окончательного решения об использовании технологии существует множество препятствий. Устаревшие системы все еще используют xml и json, не говоря уже о protobufs.

Я думаю, есть несколько факторов:

  1. Люди обычно не беспокоятся о переключении, если старая технология работает (если только она не становится узким местом и не требует оптимизации).
  2. Flatbuffers действительно очень агрессивно оптимизирует скорость, но за счет раздутого размера данных. Оптимизация Protobuf более сбалансирована между скоростью и размером. Одно и то же сообщение обычно может быть намного меньше по размеру при сериализации с помощью protobuf, чем с помощью плоских буферов. Если ваше сообщение предназначено для отправки по сети, вам необходимо принять это во внимание. (Не говорите о сжатии - сжатие, вероятно, будет стоить вам в 100 раз больше циклов процессора, чем вы сэкономили, переключившись с protobuf на плоские буферы.)
  3. API Flatbuffers сложно использовать. Совсем непросто построить и сериализовать таблицу плоских буферов, особенно если она имеет элементы массива и / или вложенные таблицы. Напротив, мне потребовалась буквально одна или две минуты, чтобы научиться устанавливать поля сообщения protobuf и сериализовать его в массив байтов.

Я только когда-либо использовал Protobuf на своей работе. Я думаю, что ответ на этот вопрос одинаков для кривой освоения всех новых технологий. "Почему мы должны переключаться и должны инвестировать в обучение и принимать новый риск ошибок, если то, что мы используем, работает нормально". И я также обнаружил, что есть очень небольшой процент разработчиков, которые тратят много времени на изучение новейших и лучших инструментов. Большинство находит что-то, что работает, и просто продолжает использовать это, пока они не будут вынуждены изменить либо из-за уязвимостей, либо из-за требований к производительности.

Другие вопросы по тегам