> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.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](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-fix-nav-issues/ddNWBC5mE_w-syUp/images/column-oriented-example-query.png?fit=max&auto=format&n=ddNWBC5mE_w-syUp&q=85&s=bbf9f7b529c87ddb42e9bfe1e0b05a2b" alt="Пример запроса в столбцовой базе данных" size="lg" width="2496" height="1080" data-path="images/column-oriented-example-query.png" />

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

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

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

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/0xkAyEEn8ANRFZGQ/images/row-oriented.gif?s=65d32283890f54b87398e0bddf1a0ec3" alt="Структура строко-ориентированной базы данных" size="lg" width="630" height="258" data-path="images/row-oriented.gif" />

**Столбцово-ориентированная СУБД**

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

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/ddNWBC5mE_w-syUp/images/column-oriented.gif?s=43234d1f2e731088ce5e59de023a4d00" 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).
