дизайн схемы clickhouse, предопределенный набор столбцов - PullRequest
0 голосов
/ 15 мая 2018

У меня есть несколько источников ввода с различными схемами.Чтобы провести некоторую аналитику с использованием Clickhouse, я предложил один из двух подходов к обработке аналитической рабочей нагрузки, используя операцию join или aggregation:

  1. Использование объединения включает определение таблицы, соответствующей каждомувход.

  2. Для использования агрегированных функций требуется одна таблица с предопределенным набором столбцов. Количество столбцов и тип столбцов будут основаны на моих приближениях и могут измениться в будущем..

Мой вопрос: если я выберу второй подход, определив множество столбцов, скажем, сотню столбцов.Как это влияет на производительность, стоимость хранения ... и т. Д.

1 Ответ

0 голосов
/ 26 мая 2018

Вообще говоря, большая таблица со всеми вашими значениями + использование агрегированных функций часто является прецедентом, для которого был разработан clickhouse.

Различные типы запросов на основе соединения начинают работать в больших наборах данных, когдазапросы распределяются между машинами.Но если вы можете позволить себе хранить данные на одном SSD RAID, попробуйте использовать одну таблицу и агрегированные функции.

Конечно, это общий совет, он действительно зависит от ваших данных.

Что касается нерегулярных данных, в зависимости от того, насколько они различны, вы можете захотеть использовать динамическое решение (например, Spark или Elastic Search) или базу данных, которая поддерживает «разреженные» столбцы (например, Cassandra или ScyllaDb).

Если вы хотите использовать Clickhouse для этого, рассмотрите возможность использования массивов и кортежей для их хранения.

В целом, Clickhouse довольно умно относится к сжатию данных, поэтому добавление большого количества пустых значений должно подойти (например, они не будут увеличивать время запроса почти на что угодно и не будут занимать дополнительное место).Запросы основаны на столбцах, поэтому, если вам не нужен столбец для конкретного запроса, на производительность не повлияет простой факт, что столбец существует (например, как в СУБД).

Таким образом, даже если ваша таблица имеет, скажем, 200 столбцов, если ваш запрос использует только 2 из этих столбцов, он будет в основном так же эффективен, как если бы в таблице было только 2 столбца.Кроме того, чем ниже гранулярность столбца, тем быстрее выполняются запросы к этому столбцу (с некоторыми оговорками).При этом, если вы планируете запрашивать сотни столбцов в одном запросе ... вероятно, это будет происходить довольно медленно, но clickhouse очень хорошо распараллеливает работу, поэтому, если ваши данные находятся в нижних десятках Tb (несжатых)приобретение машины с несколькими большими твердотельными накопителями и 2 Xeons обычно делает свое дело.

Но, опять же, все это в значительной степени зависит от набора данных, вы должны объяснить свои данные и типы запросов, которые вам нужны вЧтобы получить более значимый ответ.

...