diff --git a/README.md b/README.md index 1f6ef54..dec187e 100644 --- a/README.md +++ b/README.md @@ -56,15 +56,15 @@ ORDER BY (created_at, uuid); В clickhouse нет auto increment поэтому в качестве primary key используется uuid. В данном случае создана партицированная таблица с разбивкой по месяцам, поэтому мы обязаны при создании добавить поле в PRIMARY KEY и ORDER BY Партиции позволяют ускорить запрос за счет того что выборка получается меньше по размерам. Вместо 1 большой таблицы на 10 миллионов записей, можно получить 10 виртуальных таблиц по 1 миллиону. -При запросе к такой таблице clickhouse может перенаправить запрос только в нужные партиции тем самым избежав обхода лишнего колличества данных. +При запросе к такой таблице clickhouse может перенаправить запрос только в нужные партиции тем самым избежав обхода лишнего количества данных. С точки зрения использования запрос не меняется. Мы по прежнему работаем с 1 таблицей. Всю магию по определению партиция и объединению результатов выборки clickhouse реализует под капотом. -За счет этого, запросы получаются быстрее по сранению с классической single таблицей. +За счет этого, запросы получаются быстрее по сравнению с классической single таблицей. -По sql выше мы видим, что определение типов в запросе выглядит иначе по сранению с mysql. -Информацию по типам можно найти в оффициальной документации в этом разделе https://clickhouse.com/docs/ru/sql-reference/data-types/int-uint. +По sql выше мы видим, что определение типов в запросе выглядит иначе по сравнению с mysql. +Информацию по типам можно найти в официальной документации в этом разделе https://clickhouse.com/docs/ru/sql-reference/data-types/int-uint. Наиболее явное отличие это определение nullable - оно связано с типом в отличие от mysql. -Дальше в запросе видно что мы указали engine для таблицы. В отличие от mysql, где на проекте обычно используется всегда один движок, в clickhouse нужно иметь понятие об их существовании и отличиях. +Дальше в запросе видно, что мы указали engine для таблицы. В отличие от mysql, где на проекте обычно используется всегда один движок, в clickhouse нужно иметь понятие об их существовании и отличиях. Официальная документация тут https://clickhouse.com/docs/ru/engines/table-engines. Каждый движок несет свои уникальные возможности. Например: @@ -127,12 +127,12 @@ WHERE table = 'history'; ![img.png](images/partitions.png) -Здесь видно, что данные разбиты на 5 частей, не смотря на то что у нас три записи попадают в один месяц. При вставке clickhouse вставляет данные в отдельные куски и затем в фоне может их обрабатывать и объединять для оптимизации. +Здесь видно, что данные разбиты на 5 частей, несмотря на то что у нас три записи попадают в один месяц. При вставке clickhouse вставляет данные в отдельные куски и затем в фоне может их обрабатывать и объединять для оптимизации. По окончанию мы увидим следующий результат ![img.png](images/partitions2.png) -Сейчас можно попробовать встаить такие данные +Сейчас можно попробовать вставить такие данные ```clickhouse insert into history SELECT generateUUIDv4(), 'device', generateUUIDv4(), rand32(), 'first_name', 'Denis', null, now(); ``` @@ -141,7 +141,7 @@ insert into history SELECT generateUUIDv4(), 'device', generateUUIDv4(), rand32( ```clickhouse insert into history SELECT generateUUIDv4(), 'device2', generateUUIDv4(), rand32(), 'first_name', 'Denis', 3, now(); ``` -clickhouse выдает ошибку что значение enum нам не известно и возвращает ошибку. +clickhouse выдает ошибку, что значение enum нам не известно и возвращает ошибку. ## Модификация данных В clickhouse нет классического редактирования данных. Отказ от update позволяет clickhouse быть таким быстрым. @@ -170,9 +170,9 @@ WHERE table = 'history'; Из таблицы видно, что наш запрос был зарегистрирован в списке мутаций и что он уже выполнился. Особо сложные запросы могут выполняться часами. -Такое обновление происходит асинхронно в фоне и не блочит работу таблицы. +Такое обновление происходит асинхронно в фоне и не блокирует работу таблицы. Также можно заметить что изменения типа полей таблицы также были зарегистрированы в мутациях. -Несмотря на то, что есть возможность редактировать данные - не стоит этим злоупотреблять. Если единовременно будет много мутаций в обработке, то это плохо скажется на производительности системы и может привести к ошибкам накатки мутаций. +Несмотря на то, что есть возможность редактировать данные, не стоит этим злоупотреблять. Если единовременно будет много мутаций в обработке, то это плохо скажется на производительности системы и может привести к ошибкам накатки мутаций. Мутации следует использовать когда одним запросом можно привести данные к ожидаемому результату. Например, на основе одного поля рассчитать значения другого или скопировать значения поля из соседней таблицы в указанную.