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

У меня есть колонка my_id в которой гуид я буду делать

запросы where my_id = '...' а так же возможно where my_id IN ...

имеет ли смысл использовать guid тип данных вместо строк? или при таком кейсе без разницы

23 ответов

36 просмотров

да имеет, тупо меньше места в памяти быстрее сравнение... быстрее запаковка распаковка... меньше читать с диска... но вообще если есть возможность влиять на тип my_id то лучше всего использовать для него какой нибудь snowflake id генерацию и UInt64 для хранения..

Floppy-Disk Автор вопроса
Slach [altinity]
да имеет, тупо меньше места в памяти быстрее сравн...

а почему UInt64 для хранения лучше? ещё быстрее поиск и тд чем гуиды?

Floppy Disk
а почему UInt64 для хранения лучше? ещё быстрее по...

строка GUID/UUID - 36 байт UUID - 16 байт UInt64 - 8 байт

Floppy-Disk Автор вопроса

подскажите, пожалуйста я хочу хранить в кликхаусе логи лог формата: время, клиент, сообщение и когда я буду их читать, я буду читать их по конкретному клиенту, т.е. меня не будут интересовать все логи за последний час, день для всех, меня будут интересовать логи конкретного клиента за максимально возможный период, месяц, год и тд каким образом лучше будет выполнить предагрегацию и партиционирование для быстроты выполнения запросов на чтения (естественно с пагинациец) Order by (toStartOfHour(timestamp), client_id); количество клиентов измеряется в сотнях тысяч и ещё, насколько опасным / безопасным будет использования нулабл client_id при том, что он используется в предагрегациях? я получаю логи из vector и не понимаю как мне отсеять лог, в котором нет этого поля, и соответственно в батче летит невалидный запрос тк один из запросов или несколько содержат пустое поле которое должно быть guid, если вдруг такой возможности в векторе нет, можно ли будет это компенсировать за счёт нулабл?

Floppy Disk
подскажите, пожалуйста я хочу хранить в кликхаусе...

если вы собираетесь читать логи по клиенту, то какой для вас смысл несеть null в client_id? если вы планируете читать все логи, то о какой агрегации идет речь?

Floppy-Disk Автор вопроса
Sergey Platonov
если вы собираетесь читать логи по клиенту, то как...

я не хочу нести null в client_id, просто вынужден, пока не разберусь как отсеять такого рода логи вектором

Floppy Disk
подскажите, пожалуйста я хочу хранить в кликхаусе...

а зачем вам в сортировке слева час, если читать вы будете по клиентам? фактически, ваша выборка по клиентам побежит по всем часам

Floppy-Disk Автор вопроса
Sergey Platonov
если вы собираетесь читать логи по клиенту, то как...

все логи по клиенту т.е. вглубину а не вширь хочу понять, как в таком случае лучше предагрегировать данные например Order by (client_id); сделает так что в таблице логи по клиенту будут рядом, кажется что и селект по этому клиенту быстрее отработает, чем если логи по нему будут раскиданы по всей таблице но при этом предагрегация будет доп нагрузку при инсёртах делать

Floppy Disk
все логи по клиенту т.е. вглубину а не вширь хоч...

вы не ответили о том что за агрегация у вас сделайте order by (client_id, нечто по чему внутри клиента агрегируете)

Floppy-Disk Автор вопроса
Sergey Platonov
вы не ответили о том что за агрегация у вас сдела...

но при этом хотелось бы что бы данные по клиенту лежали в порядке времени timestamp, иначе нельзя будет сделать нормальную пагинацию

Floppy Disk
но при этом хотелось бы что бы данные по клиенту л...

сделайте order by (client_id, timestamp) и partition by toYYYYMM(timestamp)

Floppy Disk
но при этом хотелось бы что бы данные по клиенту л...

тогда поменяйте местами то, что в вашем примере ну и Null не нужен

Floppy-Disk Автор вопроса
Sergey Platonov
тогда поменяйте местами то, что в вашем примере ну...

Null понятно, вопрос в том, насколько велик шанс выстрелить себе в ногу сделав нулабл, если не получится на стороне вектора откинуть лишние логи

ivan
сделайте order by (client_id, timestamp) и partiti...

партиция по таймстемпу тут, скорее, только мешаться будет, если клиентов всего сотни тысяч

Sergey Platonov
партиция по таймстемпу тут, скорее, только мешатьс...

никогда не встречал, чтобы она прям мешалась, а вот случаев "черт, надо переливать теперь в другую таблицу, потому что понадобились запросы where timestamp >=", было замечено гораздо больше )

ivan
никогда не встречал, чтобы она прям мешалась, а во...

согласен, поэтому и написал с сомнением в общем я бы потестил и перелить не проблема )

Floppy-Disk Автор вопроса
ivan
никогда не встречал, чтобы она прям мешалась, а во...

нет, скорее всего такого не будет, тупа select offcet limit

Floppy Disk
нет, скорее всего такого не будет, тупа select off...

а почему вы такую задачу до "доставанию" строк по client_id делаете на колоночной olap базе, которая вообще-то не для такого построена?

Floppy Disk
подскажите, пожалуйста я хочу хранить в кликхаусе...

[transforms.app-clickhouse-json-filter] type = "filter" inputs = ["app-json"] condition = '!contains(string!(.query), "api/v1?systemtest") && !contains(string!(.query), "api/v1/?servicestatus")'

partition by toYYYYMM(timestamp) Order by (client_id,timestamp) ;

Floppy-Disk Автор вопроса
Denny [Altinity]
partition by toYYYYMM(timestamp) Order by (client...

а почему сначала client_id, а потом timestamp

Floppy Disk
а почему сначала client_id, а потом timestamp

Ну и в кх данные одного аккаунта будут рядом и сожмутся лучше

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта