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

Привет всем. ❓❓❓❓❓ Есть маленкий вопрос. Есть таблица с 22 841 894 887

записей + 42 колонок.
Мы фильтруем данные по одной или несколько колонок и получаем 6 000 000 страниц по 100 строк (пагинация по данным).
При перехода по страницам первые несколько страниц работают нормально, если выбрать последнюю то выдает ощибку и за ограничении памать в 20Гб (используется OFFSET и LIMIT)

Вопрос: при фильтрации и пагинации Clickhouse загружает эти данные в памяти? К примеру все 6 милионов строк?

5 ответов

14 просмотров

в КХ нет понятия страниц, каждая страница идет отдельными запросами. Вполне естесственно что первые страницы возвращаются раньше последних. Если нужно равномерно распределенное время запроса страниц, лучше вставлять в ЛОГ таблицу, и читать оттуда.

Andrian-Iliev 👨‍💻 Автор вопроса
【D】【J】
в КХ нет понятия страниц, каждая страница идет отд...

ОК, но если мы хотим фильтровать данные а потом по результату с OFFSET взять посление 100, то в этом случае все отфильтрованные данные будут висеть в памяти пока не найдет в этом массиве OFFSET?

Andrian Iliev 👨‍💻
ОК, но если мы хотим фильтровать данные а потом по...

не будет ничего висеть в памяти ни в каком случае. вообще в вашем случае имеет смысл попробовать засунуть фильтры в PREWHERE если таблица широкая

Andrian-Iliev 👨‍💻 Автор вопроса
【D】【J】
не будет ничего висеть в памяти ни в каком случае....

Спасибо большое за ответ, пойду изучу 👍

а что вы в UI делаете с этой пагинацией? Рисуете чиселки со ссылками [1], [2], ....[6000000] в стиле форумов 2000-х ? Если так, то все плохо - для построения каждой отдельной страницы вам придется считать с диска не 100 строк, а всё - от начала и до куда пользователь доползет. Правильнее всего тут изменить UI/UX, и уйти от точных позиций (5123-я страница дает строки точно с 512300 до 512400) в сторону свободной промотки (нам бы 100 строк примерно из середины). Тогда можно сделать фильтрацию по какому-нибудь натуральному ключу, например времени. Тогда фильтрацию можно будет сделать на самом нижнем уровне запроса, получая ответ за десятки миллисекунд (простой кейс без аггрегаций).

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
function LoadMemoryFromInet2( f:TMemoryStream; const url:string; var e:string ):Boolean; var http:TIdHttp; LHandler: TIdSSLIOHandlerSocketOpenSSL;begin Result := fals...
Александр Смоляков
1
Я вот подумал. SSE выполняет операции максимум с 64-битной точностью. А FPU - всегда с 80-битной. Разве не должно быть FPU точнее тогда?
The Bird of Hermes
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Добрый день, подскажите пожалуйста, а как поле project (в werf.yaml) параметризовать ? werf converge —project <APP_NAME> в одном общем репо держим 1 хельм чарт и деплоим с ...
Sulaymon
5
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
как быть с принтером? такой подход прокатит?
zamtmn
12
This is a big issue. Just by being a citizen of a country, you are denied to contribute to Open Source software: https://youtu.be/L5Ec5jrpLVk?si=1iIuHnMPbCB4anV-
Sharuzzaman Ahmat Raslan
72
Карта сайта