> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ClickHouse® — это столбцовая система управления базами данных (СУБД) с поддержкой SQL для онлайн-аналитической обработки (OLAP). Доступна как в виде ПО с открытым исходным кодом, так и в виде облачного сервиса.

# Что такое ClickHouse?

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

ClickHouse® — это высокопроизводительная столбцовая система управления базами данных SQL (СУБД) для онлайн-аналитической обработки (OLAP). Она доступна как в виде [ПО с открытым исходным кодом](https://github.com/ClickHouse/ClickHouse), так и в виде [облачного сервиса](https://clickhouse.com/cloud).

<div id="what-are-analytics">
  ## Что такое аналитика?
</div>

Под аналитикой, также известной как OLAP (онлайн-аналитическая обработка), понимаются SQL-запросы со сложными вычислениями (например, агрегациями, обработкой строк и арифметическими операциями) над огромными наборами данных.

В отличие от транзакционных запросов (или OLTP, Online Transaction Processing), которые читают и записывают всего несколько строк за запрос и потому выполняются за миллисекунды, аналитические запросы обычно обрабатывают миллиарды и триллионы строк.

Во многих сценариях [аналитические запросы должны быть "в реальном времени"](https://clickhouse.com/engineering-resources/what-is-real-time-analytics), то есть возвращать результат менее чем за одну секунду.

<div id="row-oriented-vs-column-oriented-storage">
  ## Построчное и столбцовое хранение
</div>

Такого уровня производительности можно добиться только при правильной «ориентации» данных.

Базы данных хранят данные либо [построчно, либо по столбцам](https://clickhouse.com/engineering-resources/what-is-columnar-database).

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

ClickHouse — это столбцовая база данных. В таких системах таблицы хранятся как набор столбцов, то есть значения каждого столбца записываются последовательно одно за другим. Такая структура усложняет восстановление отдельных строк (поскольку между значениями одной строки появляются разрывы), но операции со столбцами, такие как фильтрация или агрегация, выполняются значительно быстрее, чем в базе данных с построчным хранением.

Разницу проще всего показать на примере запроса, выполняемого на 100 миллионах строк [реальных анонимизированных данных веб-аналитики](/ru/get-started/sample-datasets/anon-web-analytics-metrica):

```sql theme={null}
SELECT MobilePhoneModel, COUNT() AS c
FROM metrica.hits
WHERE
      RegionID = 229
  AND EventDate >= '2013-07-01'
  AND EventDate <= '2013-07-31'
  AND MobilePhone != 0
  AND MobilePhoneModel not in ['', 'iPad']
GROUP BY MobilePhoneModel
ORDER BY c DESC
LIMIT 8;
```

Вы можете [выполнить этот запрос в Песочнице ClickHouse SQL](https://sql.clickhouse.com?query=U0VMRUNUIE1vYmlsZVBob25lTW9kZWwsIENPVU5UKCkgQVMgYyAKRlJPTSBtZXRyaWNhLmhpdHMgCldIRVJFIAogICAgICBSZWdpb25JRCA9IDIyOSAKICBBTkQgRXZlbnREYXRlID49ICcyMDEzLTA3LTAxJyAKICBBTkQgRXZlbnREYXRlIDw9ICcyMDEzLTA3LTMxJyAKICBBTkQgTW9iaWxlUGhvbmUgIT0gMCAKICBBTkQgTW9iaWxlUGhvbmVNb2RlbCBub3QgaW4gWycnLCAnaVBhZCddIApHUk9VUCBCWSBNb2JpbGVQaG9uZU1vZGVsCk9SREVSIEJZIGMgREVTQyAKTElNSVQgODs\&chart=eyJ0eXBlIjoicGllIiwiY29uZmlnIjp7InhheGlzIjoiTW9iaWxlUGhvbmVNb2RlbCIsInlheGlzIjoiYyJ9fQ\&run_query=true): он выбирает и фильтрует [всего несколько из более чем 100](https://sql.clickhouse.com/?query=U0VMRUNUIG5hbWUKRlJPTSBzeXN0ZW0uY29sdW1ucwpXSEVSRSBkYXRhYmFzZSA9ICdtZXRyaWNhJyBBTkQgdGFibGUgPSAnaGl0cyc7\&tab=results\&run_query=true) существующих столбцов и возвращает результат за миллисекунды:

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-8a08bda2/GdqfNM6yrU6JpllL/images/column-oriented-example-query.png?fit=max&auto=format&n=GdqfNM6yrU6JpllL&q=85&s=b7aaf523d9a467fd54c52d905370304a" alt="Пример запроса в столбцовой базе данных" size="lg" width="2496" height="1080" data-path="images/column-oriented-example-query.png" />

Как видно из раздела статистики на диаграмме выше, запрос обработал 100 миллионов строк за 92 миллисекунды — это пропускная способность чуть более 1 миллиарда строк в секунду, или чуть менее 7 ГБ данных в секунду.

**Строчно-ориентированная СУБД**

В строчно-ориентированной базе данных, хотя приведённый выше запрос обрабатывает лишь несколько существующих столбцов, системе всё равно нужно загрузить с диска в память данные из других столбцов. Причина в том, что данные хранятся на диске блоками (обычно фиксированного размера, например 4 КБ или 8 КБ). [Блоки](https://en.wikipedia.org/wiki/Block_\(data_storage\)) — это наименьшие единицы данных, считываемые с диска в память. Когда приложение или база данных запрашивает данные, подсистема дискового ввода-вывода операционной системы считывает нужные блоки с диска. Даже если требуется только часть блока, в память всё равно считывается весь блок (это обусловлено устройством дисков и файловых систем):

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-8a08bda2/4BoTWlcqctvAiYpK/images/row-oriented.gif?s=8196d54e5624bb8acd0c951532163f36" alt="Структура строчно-ориентированной базы данных" size="lg" width="630" height="258" data-path="images/row-oriented.gif" />

**Столбцовая СУБД**

Поскольку значения каждого столбца хранятся на диске последовательно, одно за другим, при выполнении приведённого выше запроса не загружаются лишние данные.
Поскольку поблочное хранение и передача данных с диска в память соответствуют характеру доступа к данным в аналитических запросах, с диска считываются только столбцы, необходимые для запроса, что позволяет избежать лишних операций ввода-вывода для неиспользуемых данных. Это [намного быстрее](https://benchmark.clickhouse.com/) по сравнению с построчным хранением, где считываются целые строки (включая нерелевантные столбцы):

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-8a08bda2/GdqfNM6yrU6JpllL/images/column-oriented.gif?s=c550fb0d398e9108bf0ab3e43e434715" alt="Структура столбцовой базы данных" size="lg" width="630" height="258" data-path="images/column-oriented.gif" />

<div id="data-replication-and-integrity">
  ## Репликация данных и целостность
</div>

ClickHouse использует асинхронную мультимастерную схему репликации, чтобы обеспечить избыточное хранение данных на нескольких узлах. После записи данных в любую доступную реплику все остальные реплики получают свои копии в фоновом режиме. Система поддерживает идентичность данных на разных репликах. Восстановление после большинства сбоев выполняется автоматически, а в сложных случаях — полуавтоматически.

<div id="role-based-access-control">
  ## Ролевое управление доступом
</div>

ClickHouse поддерживает управление учетными записями пользователей с помощью SQL-запросов и позволяет настраивать ролевое управление доступом, аналогичное тому, которое используется в стандарте ANSI SQL и популярных системах управления реляционными базами данных.

<div id="sql-support">
  ## Поддержка SQL
</div>

ClickHouse поддерживает [декларативный язык запросов на основе SQL](/ru/reference/home), который во многих случаях соответствует стандарту ANSI SQL. Среди поддерживаемых секций запроса — [GROUP BY](/ru/reference/statements/select/group-by), [ORDER BY](/ru/reference/statements/select/order-by), подзапросы в [FROM](/ru/reference/statements/select/from), секция [JOIN](/ru/reference/statements/select/join), оператор [IN](/ru/reference/statements/in), [оконные функции](/ru/reference/functions/window-functions) и скалярные подзапросы.

<div id="approximate-calculation">
  ## Приблизительные вычисления
</div>

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

<div id="adaptive-join-algorithms">
  ## Адаптивные алгоритмы JOIN
</div>

ClickHouse адаптивно выбирает алгоритм JOIN: начинает с быстрых hash JOIN, а если больших таблиц больше одной, переключается на merge JOIN.

<div id="superior-query-performance">
  ## Высочайшая производительность запросов
</div>

ClickHouse широко известен исключительно высокой производительностью запросов.
Чтобы узнать, почему ClickHouse так быстр, см. руководство [Почему ClickHouse такой быстрый?](/ru/get-started/about/why-clickhouse-is-so-fast).
