Теперь я сделал тест в python, чтобы сравнить JSON и flatbuffers, и думаю, что ответ может кому-то помочь, поэтому мы идем:
Настройка выглядит следующим образом: Мы получили архитектуру клиент-сервер (на том жемашина), как в питоне с розетками и asyncio.Тестовые данные - это большой словарь со значениями в виде строк, чисел и списков, которые содержат другие словари, в том числе со строковыми, числовыми и списочными значениями.Это дерево имеет до 3 уровней в глубину, около 100 объектов в списке.
В схеме flatbuffer используются таблицы для диктов, векторы для списков и структуры для диктов, в которых используются только поля float и int.
Тестовые данные для теста flatbuffer :
- заполнены в конструкторе flatbuffer и возвращены как байтовый массив (сериализация)
- , отправленный на сервер через сокети asyncio reader / writer
- , преобразованный из bytearray обратно в fb-объект, и сервер обращается к нескольким полям (десериализация)
- время десериализации затем отправляется обратно клиенту.
Тестовые данные для теста JSON :
- преобразуются в строку с помощью функции dumps () и затем преобразуются в байтовый массив
- отправляется на сервер через сокет и asyncio reader / writer
- , преобразованный из bytearray в строку, а затем через json.loads () обратно в словарь;чем те же несколько полей доступны серверу (десериализация)
- время десериализации отправляется обратно клиенту.
Я знаю, что есть некоторые моменты, которые можноспорить о настройке.Например, не преобразовывать данные обратно в dict в тесте flatbuffer.Если кто-то действительно заинтересован в этом, я мог бы продвинуться в этом тесте.
Но теперь перейдем к результатам:
--- flatbuffers ---
roundtrip time: 7.010654926300049
serialize time: 6.960820913314819
deserialize time: 0.0
size in byte: 6.365.432
--- json ---
roundtrip time: 0.7860651016235352
serialize time: 0.3211710453033447
deserialize time: 0.28783655166625977
size in byte: 13.946.172
Мой вывод состоит в том, что не следует использовать flatbuffers в Python, еслиВы хотите быстро редактировать или создавать данные.В Python нет способа изменить данные, а это означает, что вам придется перестраивать плоский буфер каждый раз, когда что-то меняется, и это очень медленно.
С другой стороны, очень быстро читать данные иразмер байта очень низкий по сравнению с JSON.Поэтому, если у вас есть статические данные, которые вы хотите многократно отправлять или считывать, решением могут стать плоские буферы.