184 похожих чатов

Все доброго вечера, вопрос о хранении strings на диске. Как

ClickHouse считывает Varchar когда у них длинны разного размера (иногда 1 байт, иногда 2 байта и т.д)??🤔

12 ответов

20 просмотров

В начале строки хранится длина в формате leb128 Т.е. если строка 1 байт, то хранится 2 байта

word-1973 Автор вопроса
Denny [Altinity]
В начале строки хранится длина в формате leb128 Т...

Если длина строки например 2048 байт (2 байта на длину)… Как потом знать при чтении , что длина 2 байта?

word-1973 Автор вопроса

И можно ссылку в документации что это leb128? Please🙏🏻

word 1973
И можно ссылку в документации что это leb128? Plea...

Ну и в коде, собственно, реализация: Чтение строки: https://github.com/ClickHouse/ClickHouse/blob/master/src/IO/ReadHelpers.h#L127 Чтение длины: https://github.com/ClickHouse/ClickHouse/blob/master/src/IO/VarInt.h#L101 Как видно в длину попадают 7 младших битов из байта, если в старшем бите байта не 1 (if (!(byte & 0x80))), то чтение длины прекращается, а если 1, то она идёт дальше, и каждые следующие 7 младших битов помещаются в более старшие 7 битов итоговой длины.

word 1973
И можно ссылку в документации что это leb128? Plea...

Это даже в Википедии описано. Спросите gpt

word-1973 Автор вопроса
Denny [Altinity]
Это даже в Википедии описано. Спросите gpt

Не сыпь мне соль на рану! Я убила 4 часа после того как чат рассказал мне байку с полной уверенностью, что стринги в CH хранятся без размера, а с нулями в конце🤦🏼‍♀️ И не только в Википедии, даже в документации не так просто понять что и как сохраняется на диске

word 1973
Не сыпь мне соль на рану! Я убила 4 часа после тог...

GPT страдает от галлюцинаций, я не советую ему доверять что-то серьёзнее генерации boilerplate кода.

word 1973
Не сыпь мне соль на рану! Я убила 4 часа после тог...

ну про ClickHouse gpt спрашивать смысла нет. Просто leb128 очень известный формат. explain in russian what is LEB128 ChatGPT LEB128 (Little Endian Base 128) - это переменная длина кодирования, которое используется для эффективного кодирования целых чисел. Он использует схему сжатия длины, которая позволяет записывать целые числа разной длины в зависимости от их значения. В LEB128 каждый байт представляет собой семь бит данных, а восьмой бит служит как флаг продолжения, указывающий, что байт содержит продолжение числа. Число кодируется в младших битах первого байта и продолжается в следующих байтах, если флаг продолжения установлен. Таким образом, использование LEB128 позволяет кодировать целые числа с меньшим количеством байтов, чем при использовании фиксированной длины кодирования, что делает его очень полезным для хранения целых чисел в памяти и передачи их по сети.

word 1973
Не сыпь мне соль на рану! Я убила 4 часа после тог...

Так хранится FixedString https://clickhouse.com/docs/en/sql-reference/data-types/fixedstring И эти самые нули приходят на клиент (или раньше приходили).

word-1973 Автор вопроса
Mark Andreev
Так хранится FixedString https://clickhouse.com/do...

Не совсем, в FixedString будет padding нулями только если длина меньше N… но если строчки точно длинной N, то не будут там нули

word 1973
Не совсем, в FixedString будет padding нулями толь...

ага, все так. проблемы или неожиданности возникают ровно в момент "длина меньше N".

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта