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

Привет. Есть ли у кого положительный опыт переезда данных из

mongo в clickhouse?
Столкнулся с проблемой. Есть огромнейшая база с записями такого вида:

id(objectID), event_name(string), params(Object)

Проблема в этом адском params, в котором может храниться любая структура данных. Как быть в таком случае?
Сначала пробовал хранить этот params как json, и затем использовать встроенные функции visitParamExtract. Но проблема в том, что на больших данных, это работает медленно, т.е. по сути происходит фуллскан всех этих json данных как я понял, и запрос отрабатывает неприлично долго.

Затем я извратился, и собрал все уникальные параметры, и сделал ALTER, добавив каждый параметр, как отдельный столбец. Запрос стал отрабатывать очень быстро. Но теперь вопрос, как быть, когда в этом params появится в какой-то момент новый уникальный параметр? ALTER с добавлением столбца не тяжелая операция, если верить мануалам и собственным тестам. Но правильный ли это путь, господа?

2 ответов

9 просмотров

Если их не слишком много будет в итоге то норм

Можно использовать гибридный подход — всегда иметь оригинальный params и добавлять только те (вычислимые) колонки, по которым нужно уметь быстро отдавать ответ, или по которым часто идет поиск. Скорее всего количество таких колонок уже не будет порядка тысячи (лучше все-таки больше пары сотен колонок в ClickHouse не иметь, поскольку каждая вставка создает по паре файлов на каждую колонку), и вы получаете все преимущества по скорости в ClickHouse, не теряя возможности фильтровать по любой колонке, если возникает необходимость.

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

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

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
А дальше что?.. Записать в файл, потом в Код?.. И потом разбирать как-то?..
Хаскель Моисеевич Гопник
14
доброго времени. db, dw и прочие исполняются при трансляции или при выполнении программы?
lutayyy
10
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
например asm AT&T ... label: .string "hi" ... # not error lea label(%rip), %rax # error ( not compile ) mov %rip, %rax # not error mov (%rip), %rax из форумов прочитал чт...
Simple Sorcerer
6
Почему никто не подсказал, что можно объявить свои типы данных, в которых меньше полей, чем в отданном джейсоне, и добавлять их по необходимости?
Strange Rabbit
10
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Есть предложения, как подобное можно упростить?
Hemul GM
12
Карта сайта