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

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

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

12 ответов

10 просмотров

В начале строки хранится длина в формате 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".

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

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

А чем вам питонисты не угодили?😂
.
79
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Ты просто гитлеровскую эстетику плохо понимаешь. Он же всё под Цезаря делал. А это как бы запрещённый приём в политике. Пиджаки они зачем все носят? Чтобы показать что они тип...
Ivan Kropotkin
4
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
а чем лучше всего сделать глобальный лок, если много нодов, до сотни? ну то есть мне надо, чтобы некоторые операции с объектом не происходили одновременно. перемещение между н...
Д. П.
15
Hi guys, I'm looking for a good LLM course. Is there any course to learn LLMs in advanced? I'm aiming to use them in my apps, so a perfect course in my openion, is not only a ...
Taha
14
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
Легче писать на C++ чем на C, если полностью не изучать C++, а знать только основное?
Алмаз
8
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
Карта сайта