<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ydb/library/cpp/string_utils/csv/csv.cpp, branch CLI_2.25.0</title>
<subtitle>Mirror of YDB github repos</subtitle>
<id>https://code.mastervirt.ru/ydb/atom?h=CLI_2.25.0</id>
<link rel='self' href='https://code.mastervirt.ru/ydb/atom?h=CLI_2.25.0'/>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/'/>
<updated>2025-06-25T08:35:36Z</updated>
<entry>
<title>Improve csv parsing speed in С++ csv library</title>
<updated>2025-06-25T08:35:36Z</updated>
<author>
<name>pnv1</name>
<email>pnv1@yandex-team.com</email>
</author>
<published>2025-06-25T07:46:15Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=7dff50ae6cd121950e4225dfe6395e44947263ae'/>
<id>urn:sha1:7dff50ae6cd121950e4225dfe6395e44947263ae</id>
<content type='text'>
Improve csv parsing speed in csv library

На примере ВМ в QYP на ssd скорость чтении csv этой либой:

- до этих изменений стабильно показывает 383-387 MB/s

- после этих изменений стабильно показывает 613-615 MB/s

**++Просьба PR пока не мерджить++**.

Пока что надеюсь просто получить шип от овнеров. Мы собираем метрики по текущей производительности в процессе импорта в YDB CLI. Чуть позже, если всё ОК, вмерджу этот PR, чтобы мы замерили разницу.
commit_hash:a23fc7e631733ffe3cae2941da8b3bdb75bccc94
</content>
</entry>
<entry>
<title>Make sure returned TStringBuffers do not change during splitter lifetime. Also make input string reference const</title>
<updated>2024-12-10T14:11:35Z</updated>
<author>
<name>pnv1</name>
<email>pnv1@yandex-team.com</email>
</author>
<published>2024-12-10T13:48:40Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=eb079fb9449e62da43aac095244be3ffbe658cdf'/>
<id>urn:sha1:eb079fb9449e62da43aac095244be3ffbe658cdf</id>
<content type='text'>
&lt;https://github.com/ydb-platform/ydb/issues/12306&gt;

Make input string reference const

Make sure returned TStringBuffers do not change during splitter lifetime

splitter.Consume() возвращает TStringBuf.

Если в колонке есть ескейпинг кавычек, вся колонка обрамлена двойными кавычками (`"`), а внутри для ескейпинга двойных кавычек используются две идущие подряд двойные кавычки (`""`).

В таком случае вернуть TStringBuf, ссылающийся на кусок входящего TString, не получится, т.к. нужной подстроки в нем не существует.

Для этого используется мембер TVector\&lt;TStringbuf\&gt; CustomStrings. В него накидываются нужные кусочки из исходной строки и в конце складываются в мембер-строку TString CustomString

Например, из строки  `"abc""cde""efg"`  копились кусочки `abc"`, `cde"`, `efg` и в конце склеивались.

И возвращался TStringBuf из этой строки-мембера.

Проблема в том, что если в другой колонке той же строки также встречались кавычки с ескейпингом, эта строка-мембер CustomString очищалась. При том, что на неё всё еще ссылался возвращённый ранее TStringBuf.

В итоге "предыдущий" TStringBuf либо начинал ссылаться на часть новой строки, если новая строка была длиннее, либо на часть новой строки \+ рандомный набор байт в памяти, если новая строка оказывалась короче.

Фикс в том, чтобы хранить все строки, сгенерённые сплиттером, всё время жизни сплиттера
commit_hash:aa4957e1d8030cd48d06eaa16a7ad61e878348f8
</content>
</entry>
<entry>
<title>Remove extra semicolon (library)</title>
<updated>2023-06-10T10:55:11Z</updated>
<author>
<name>bulatman</name>
<email>bulatman@yandex-team.com</email>
</author>
<published>2023-06-10T10:55:11Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=d570836295decdb827b4f95d75ebf2d8d9232b9b'/>
<id>urn:sha1:d570836295decdb827b4f95d75ebf2d8d9232b9b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>parse line on deploy by option</title>
<updated>2022-12-23T14:22:10Z</updated>
<author>
<name>ivanmorozov</name>
<email>ivanmorozov@yandex-team.com</email>
</author>
<published>2022-12-23T14:22:10Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=f6fd83a9bc9c2d6bb9502d3dd77adb4f5c31ceae'/>
<id>urn:sha1:f6fd83a9bc9c2d6bb9502d3dd77adb4f5c31ceae</id>
<content type='text'>
</content>
</entry>
</feed>
