Kirill
19.02.2018
09:24:55
Всем привет, столкнулись с проблемой в кластере (два шарда по две реплики) - данные в таблицы попадают с задержкой в несколько часов. Однако, если начать активно делать select запросы к этим таблицам, то еще не записавшиеся данные начинают быстро "доезжать" в них.
Подскажите, пожалуйста, с чем может быть связана такая проблема и как с ней бороться?
Stanislav
19.02.2018
09:28:26
Артемий
19.02.2018
09:29:11
Wolf
19.02.2018
09:31:31
@kmarenov опишите подробнее проблему, что значит доезжать, почему раз в несколько часов .
Google
Kirill
19.02.2018
09:35:24
Wolf
19.02.2018
09:36:22
А как вы их вставляете ?
Вставка там вообще мгновенная же, если сразу не миллиарды ложить
Артемий
19.02.2018
09:36:48
Kirill
19.02.2018
09:42:05
А как вы их вставляете ?
Единичными insert'ами. В разные таблицы с разной периодичностью, но сильные задержки наблюдаются например на таблице, куда делается менее двух вставок в секунду.
Гаврилов
19.02.2018
09:42:33
а что за движок?)
Kirill
19.02.2018
09:43:50
Wolf
19.02.2018
10:28:27
а вставляете блобами или по одной записи два раза в секунду ?
Alexey
19.02.2018
10:33:30
это прям спецом наперекор доке чтоль?)) В доке пишут, вставляйте пачками побольше, и в реплицированную таблицу не чаще раза в секунду, а вы по одной строчке несколько раз в секунду?
Гаврилов
19.02.2018
10:34:02
это как люди в монге начинают реляционность наводить)
Kirill
19.02.2018
10:42:14
Гаврилов
19.02.2018
10:42:44
миллион в час это немного, а 2 в секунду так нельзя)
Google
Kirill
19.02.2018
10:43:25
и это может приводить к задержке вставки данных в несколько часов?
Гаврилов
19.02.2018
10:43:46
я вставляю пачками по 40к записей в среднем, и ниразу не видел таких проблем
Evgeny
19.02.2018
10:45:58
Wolf
19.02.2018
11:09:22
Если вставлять по одной записи будет жопа, надо поискать слайд от разработчика, где он показывает чем мельче вставляешь данные, тем производительность падает сильнее, при чем в десятки, сотни и тысячи раз.
у меня раз в несколько секунд вставляется пачками по 1000 штук, данные в таблице появляются моментально
а так на слабельних машинах если одним блобом то где то за 2 часа вставляется 200 миллиардов записей, на быстрой за час
Yuran
19.02.2018
11:12:00
А правда, что в кликхаусе нет способа сконвертировать DateTime в UNIX Timestamp, кроме как CAST(field, Int32) ? Вот тут я не нашел нужной функции: https://clickhouse.yandex/docs/ru/functions/date_time_functions.html
Artem
19.02.2018
11:12:37
toUnixTimestamp
Yuran
19.02.2018
11:13:44
Функция работает, но почему её нет в доке :)? В любом случае, спасибо.
Гаврилов
19.02.2018
11:52:45
кликхаус же для расчета циферок
Yuran
19.02.2018
11:54:03
Alex
19.02.2018
12:14:22
Создал 2 реплицируемые таблицы с движком ReplicatedAggregatingMergeTree. Навешиваю на них MATERIALIZED VIEW. Вопрос: необходимо ли указывать для VIEW тоже реплицируемый движок?
Kirill
19.02.2018
12:16:03
Если хотите их реплицировать то да, нужно
Alex
19.02.2018
12:18:43
Если хотите их реплицировать то да, нужно
В том то и вопрос, необходимо ли мне их реплицировать? Вы мне советовали использовать при создании "TO" так вот view будут смотреть на реплицируемые таблицы. Если таблицы реплицируються то нужно ли для view тоже репликация.
Сервер1: table 1(ReplicatedMergeTree), table2(ReplicatedAggregatingMergeTree), view to table2 as select table 1
Kirill
19.02.2018
12:21:28
Alex
19.02.2018
12:22:28
Mike
19.02.2018
12:23:33
Коллеги, не подскажете, clickhouse-cpp собрать 4.4.7 компилятором реально или забыть про динозаврика этого? (штатный из centos7)
Alex
19.02.2018
12:24:52
Да, нужно
И еще вопрос, а имя узла для таблицы в ZooKeeper, делать одинаковым и для table и для view? Или должно быть разным?
Google
Kirill
19.02.2018
12:26:07
Alex
19.02.2018
12:27:41
Felixoid
19.02.2018
12:36:03
Функция работает, но почему её нет в доке :)? В любом случае, спасибо.
простые toInt32 и toUInt32 тоже работают
:) select updated from metrics limit 1;
SELECT updated
FROM metrics
LIMIT 1
┌─────────────updated─┐
│ 2018-02-19 12:34:51 │
└─────────────────────┘
1 rows in set. Elapsed: 0.002 sec.
:) select toUInt32(updated) from metrics limit 1;
SELECT toUInt32(updated)
FROM metrics
LIMIT 1
┌─toUInt32(updated)─┐
│ 1519043691 │
└───────────────────┘
1 rows in set. Elapsed: 0.002 sec.
:) select toInt32(updated) from metrics limit 1;
SELECT toInt32(updated)
FROM metrics
LIMIT 1
┌─toInt32(updated)─┐
│ 1519043691 │
└──────────────────┘
1 rows in set. Elapsed: 0.002 sec.
Alex
19.02.2018
13:05:18
Так, я просто невнимательно прочитал. Если вы изначально создали реплицируемые таблицы то при создании mat view с TO не нужно указывать ничего
Кирилл, не подскажете еще, CREATE TABLE t
(
column1 AggregateFunction(uniq, UInt64) ... UInt64 это тип данных который будет поступать в агрегационную функцию или который будет хранится? Я создал таблицу с полем sum_field1 AggregateFunction(sum, UInt64) и потом делаю INSERT INTO table1 SELECT sumState(field1). Field1 имеет тип UInt8, там 0 или 1, но при агрегации там может быть число более UInt8. При вставке выдает ошибку: Types must be the same for columns at same position. Column sumState(field1) has type AggregateFunction(sum, UInt8), but column sum_field1 has type AggregateFunction(sum, UInt64).
Wolf
19.02.2018
13:38:51
Да в документации многие моменты очень слабо описаны, было бы неплохо ее тоже в опенсоурс и пулреквесты принимать
?
19.02.2018
13:39:45
вроде так и есть
Kirill
19.02.2018
13:47:24
Alex
19.02.2018
15:46:10
Все таки ENGINE наверно нужно
Может попробовать сделать ATTACH ее
Alexey
19.02.2018
15:50:52
Alex
19.02.2018
15:53:32
Alexey
19.02.2018
15:53:39
Доброе утро!
2 вопроса к разработчикам или опытным пользователям CH:
1) Какой тип лучше указывать для domain (динамическая длина или нет, если нет то какая используется в проектах Метрики)? Аналогично, насолько приемлимо хранить URL без указания длины?
2) Максимальный размер записи (все столбцы) около 1500 байт. Размер индекса 130 байт (не включает тектовые данные). Планируется получать данные, идущие подряд от 20 шт.
Гранулированность индекса хочу задать 20 кб (всето по умолчанию 8кб). Таким образом, это должно снизить число поднимаемых кусочков, увеличить их рамзер и улучшить сжатие данных.
Данный подход верный? Насколько большим можно задавать гранулированность индекса (на практике планиурется получение данных идущих подряд по 200 шт.)?
1. Используйте String. А FixedString стоит использовать лишь тогда, когда строка имеет фиксированную длину по естественным причинам. Пример: значение хэш-функции в бинарном виде; код языка, код валюты.
Есть к сожалению распространённый случай, когда по ошибке используют, например, FixedString(1000) для URL. Это не оптимизация, а наоборот - станет только хуже.
Kirill
19.02.2018
15:54:47
1.1.54289
Это старая версия. Вам в любом случае стоит обновиться;)
Alexey
19.02.2018
15:55:27
Alex
19.02.2018
15:59:42
Alex
19.02.2018
16:00:26
Google
Alex
19.02.2018
16:00:31
фича довольно новая
Alex
19.02.2018
16:01:02
*лечу
Alexey
19.02.2018
16:41:55
Всем привет, столкнулись с проблемой в кластере (два шарда по две реплики) - данные в таблицы попадают с задержкой в несколько часов. Однако, если начать активно делать select запросы к этим таблицам, то еще не записавшиеся данные начинают быстро "доезжать" в них.
Подскажите, пожалуйста, с чем может быть связана такая проблема и как с ней бороться?
Задержки при репликации или после вставки в Distributed таблицу, никак не связаны с SELECT-ами. Разные данные на последовательно выполняемых одинаковых запросах, могут говорить о том, что запрос приходит на разные серверы - на разные реплики (это нормально, но выбор реплик можно настроить с помощью настройки load_balancing - например, чтобы чаще предпочиталась одна и та же реплика) или в случае неправильной конфигурации кластера может быть так, что в качестве реплик в Distributed таблице прописаны серверы разных шардов.
Задержка в несколько часов нетипична. Скорее всего это говорит о накоплении очереди в Distributed таблице. Рекоменудется включить синхронную вставку в Distributed таблицу: insert_distributed_sync = 1, а также посмотреть на саму очередь в файловой системе и на ошибки при отправке данных в логах.
Nikita
19.02.2018
17:00:13
Привет! Начал смотреть изучать возможности clickhouse,
вопрос по функции sumMap и вообще насколько использование массива в данных выгоднее (или нет) плоской структуры?
т.е.:
вариант 1
'2018-02-19’, [11,22,33]
вариант 2
'2018-02-19’, 1, 11
'2018-02-19’, 2, 22
'2018-02-19’, 3, 33
Артемий
19.02.2018
17:10:03
strange
19.02.2018
17:16:59
Накатал больше для себя пост по ansible/aws с репкой на гитхабе. Заодно там в тренировочных целях билдится и ставится кликхауз с зукипером https://strangeqargo.net/2018/02/17/notes-on-ansible-and-aws/
Alexander
19.02.2018
17:18:29
Alexey
19.02.2018
17:34:54
Привет! Начал смотреть изучать возможности clickhouse,
вопрос по функции sumMap и вообще насколько использование массива в данных выгоднее (или нет) плоской структуры?
т.е.:
вариант 1
'2018-02-19’, [11,22,33]
вариант 2
'2018-02-19’, 1, 11
'2018-02-19’, 2, 22
'2018-02-19’, 3, 33
Это сложный вопрос и ответ зависит от ваших данных и того, какие запросы предполагаются.
1. Если в данных есть мелкие массивы, которые представляют собой какие-то отдельные свойства данных - то массивы как раз подойдут. Пример: список идентификаторов достигнутых целей.
2. Если в данных почти всё содержимое представляет собой массив, и часто нужно анализировать именно элементы этого массива. Например, ваши данные - это события пользователей. Вы рассматриваете следующие варианты: - каждый пользователь в отдельной строке, а свойства событий пользователей - в массивах. Или сделать таблицу, где каждая строка - отдельное событие одного пользователя. Лучше второй вариант - таблица с отдельными событиями.
Nikita
19.02.2018
17:41:41
Kirill
19.02.2018
19:19:39
Nikita
19.02.2018
20:50:31
Это как понимать? Это относится к однострочным данным или только в батчам?
Alexey
19.02.2018
20:52:38
Для примера - у вас есть события какой-то рекламной сети, например, клики и просмотры. Есть два варианта загрузки данных:
1. Каждый некоторый интервал времени (пример, секунда) загружаются данные примерно за этот интервал времени (возможно, с некоторой ограниченной по величине задержкой). То есть, данные записываются в базу с такой скоростью, с какой они появляются. Это называется загрузкой в реальном времени.
2. У вас есть дамп данных и вы решили загрузить его целиком. В этом случае, данные будут загружаться с максимальной возможной скоростью, какую позволяет база. Обычно быстрее реального времени.
Олег Иванович
19.02.2018
21:48:21
Alex
19.02.2018
22:37:02
Всем привет. Есть база с collapsingmergetree таблицей, размером в 100 гигабайт. Появилась необходимость поднять реплику и возник вопрос - а как собственно происходит синхронизация? Как на реплику отправить 100гигабайт, которые уже есть на мастере?
Google
Alexey
19.02.2018
22:41:41
Если у вас таблица уже имеет тип ReplicatedCollapsingMergeTree, то всё просто: добавление новой реплики делается запросом CREATE TABLE на новом сервере. В параметрах указывается тот же путь таблицы в ZK, но другой идентификатор реплики. После создания, реплика синхронизируется сама - идёт и скачивает все нужные данные.
Если таблица просто CollapsingMergeTree (не Replicated) - то посмотрите раздел документации "Преобразование MergeTree в ReplicatedMergeTree".
Alex
19.02.2018
22:45:05
благодарю! сейчас попробую
Nikita
19.02.2018
23:35:44
Stas
20.02.2018
03:16:39
Коллеги, здравствуйте, а не подскажите можно ли провернуть следующую схему:
1) Сделать 1 multiif (или его аналог или case )
2) при его сробатывании - делать не 1 новый столбец а несколько - через обращения к словарям
Пример - у меня в таблице типы названия фруктов и его сорт
в условии case я проверяю сорт, если он 1 - я забираю отребуты из словаря 1,2.4
Если сорт - 4 - то я забираю другое количество и другие атрибуты из другого словаря (не 1 запрос к словарю, а несколько)
Tima
20.02.2018
05:26:22
Stas
20.02.2018
05:27:39
Tima
20.02.2018
05:30:45
Stas
20.02.2018
05:32:38
Гаврилов
20.02.2018
05:42:54
а ктото пробовал заливать данные через внешние словари, или это извращение?
Stas
20.02.2018
05:50:14
Александр
20.02.2018
05:51:00
Stas
20.02.2018
05:51:36
Александр
20.02.2018
05:51:41
Поправил сообщение выше :) не проснулся еще )
У нас и такие пролезают