FlatBuffers vs. Protobuf
Мой вопрос: если FlatBuffers намного быстрее, чем Protobuf, почему он не используется более широко по сравнению с Protobuf?
Раньше это была экспериментальная вещь, но сейчас она кажется достаточно зрелой, но пока не получила широкого распространения. Кажется, что люди в основном используют Flatbuffers для мобильных приложений / игр. Почему это так?
3 ответа
На это есть несколько причин:
Как вы упомянули, флэтбуферы используются в основном в приложениях и играх. Это потому, что это их лучшее приложение. Поскольку плоские буферы работают быстрее, их основное применение будет заключаться в их использовании в приложениях с малой задержкой. И в этом секторе он набирает популярность.
Когда существующая технология работает нормально, люди / организации, как правило, не хотят тратить время и ресурсы на новую технологию. Я лично работал над проверкой концепции с использованием плоских буферов для крупных организаций. Перед принятием окончательного решения об использовании технологии существует множество препятствий. Устаревшие системы все еще используют xml и json, не говоря уже о protobufs.
Я думаю, есть несколько факторов:
- Люди обычно не беспокоятся о переключении, если старая технология работает (если только она не становится узким местом и не требует оптимизации).
- Flatbuffers действительно очень агрессивно оптимизирует скорость, но за счет раздутого размера данных. Оптимизация Protobuf более сбалансирована между скоростью и размером. Одно и то же сообщение обычно может быть намного меньше по размеру при сериализации с помощью protobuf, чем с помощью плоских буферов. Если ваше сообщение предназначено для отправки по сети, вам необходимо принять это во внимание. (Не говорите о сжатии - сжатие, вероятно, будет стоить вам в 100 раз больше циклов процессора, чем вы сэкономили, переключившись с protobuf на плоские буферы.)
- API Flatbuffers сложно использовать. Совсем непросто построить и сериализовать таблицу плоских буферов, особенно если она имеет элементы массива и / или вложенные таблицы. Напротив, мне потребовалась буквально одна или две минуты, чтобы научиться устанавливать поля сообщения protobuf и сериализовать его в массив байтов.
Я только когда-либо использовал Protobuf на своей работе. Я думаю, что ответ на этот вопрос одинаков для кривой освоения всех новых технологий. "Почему мы должны переключаться и должны инвестировать в обучение и принимать новый риск ошибок, если то, что мы используем, работает нормально". И я также обнаружил, что есть очень небольшой процент разработчиков, которые тратят много времени на изучение новейших и лучших инструментов. Большинство находит что-то, что работает, и просто продолжает использовать это, пока они не будут вынуждены изменить либо из-за уязвимостей, либо из-за требований к производительности.