Проблемы с производительностью NYdb::TValueBuilder
Наткнулся случайно при заливке больших объемов данных в через C++ библиотеку. NYdb::TValueBuilder потребляет много CPU. Ниже прикладываю результаты генерации и заливки одного и того же набора данных. Генерация происходит порциями по 10 000 строк, объем каждой небольшой, порядка килобайта.
В первом случае данные складывались в NYdb::TValueBuilder и отправлялись одной версией BulkUpsert.
Fill table orders...
[1500000/1500000]
Fill table orders...OK (21.548831s)
При этом на клиентской машине было занято все 32 ядра. Фрейм
. Видно, что в основном происходит генерация протобуфа.
Во втором генерировались куски CSV и отправлялись другой версией BulkUpsert
Fill table orders...
[1500000/1500000]
Fill table orders...OK (7.527664s)
На клиентской машине было занято 4-5 ядер. Фрейм
.
Выглядит так, что делать заливку данных большими кусками строго лучше через формат типа Apache Arrow. Об этом говорят и наши предыдущие исследования. Вопросы
- Как сделать так, чтобы пользователь всегда выбирал правильный способ заливки, условно BulkUpsert(Arrow) вместо BulkUpsert(NYdb::TValueBuilder)? Комментарии в коде, дока?
- Как сделать так, чтобы наши инструменты заливки/импорта использовали эффективный механизм?
- Может бенчмарк сделать? И мини статью написать?