ydb icon indicating copy to clipboard operation
ydb copied to clipboard

Проблемы с производительностью NYdb::TValueBuilder

Open iddqdex opened this issue 1 year ago • 1 comments

Наткнулся случайно при заливке больших объемов данных в через C++ библиотеку. NYdb::TValueBuilder потребляет много CPU. Ниже прикладываю результаты генерации и заливки одного и того же набора данных. Генерация происходит порциями по 10 000 строк, объем каждой небольшой, порядка килобайта.

В первом случае данные складывались в NYdb::TValueBuilder и отправлялись одной версией BulkUpsert.

Fill table orders...
[1500000/1500000]
Fill table orders...OK (21.548831s)

При этом на клиентской машине было занято все 32 ядра. Фрейм prof_sdk. Видно, что в основном происходит генерация протобуфа.

Во втором генерировались куски CSV и отправлялись другой версией BulkUpsert

Fill table orders...
[1500000/1500000]
Fill table orders...OK (7.527664s)

На клиентской машине было занято 4-5 ядер. Фрейм prof_tsv.

iddqdex avatar May 02 '24 13:05 iddqdex

Выглядит так, что делать заливку данных большими кусками строго лучше через формат типа Apache Arrow. Об этом говорят и наши предыдущие исследования. Вопросы

  1. Как сделать так, чтобы пользователь всегда выбирал правильный способ заливки, условно BulkUpsert(Arrow) вместо BulkUpsert(NYdb::TValueBuilder)? Комментарии в коде, дока?
  2. Как сделать так, чтобы наши инструменты заливки/импорта использовали эффективный механизм?
  3. Может бенчмарк сделать? И мини статью написать?

fomichev3000 avatar May 02 '24 17:05 fomichev3000