@clickhouse_ru

Страница 170 из 723
Алекс
15.06.2017
16:20:06
Alex
15.06.2017
16:21:21
именно так :)

Google
evervoid
15.06.2017
18:42:22
Пичалька. Как жить?
Поддерживаю вопрос. Очень туго живется без ORDER BY.

Виктор
15.06.2017
18:55:44
Подождите, вроде order by тут ни при чем

ORDER BY сейчас не использует индекс
Там в запросе where по индексу

Как я понимаю, он не работает

А order by по индексу в большинстве случаев не будет давать ожидаемого профита, как я понимаю. Следствие организации хранения данных в merge tree.

Подумал ещё немного. Будет, но зависит от данных и запроса. Не так как в классических базах с каким-нибудь btree.

Denys
15.06.2017
19:56:33
Ребята, вы можете обновить benchmark? Например, там сравнение с очень старой версией MemSQL. Сейчас 5.8, а начиная с 4.0 columnstore существенно переработан и ускорен

Denys
15.06.2017
20:12:55
Там же написано - benchmark

https://clickhouse.yandex/benchmark.html

Alexey
15.06.2017
20:21:38
Надо обновить. Для MemSQL даже не так сложно, потому что сохранилась пошаговая инструкция. Сделаем, если найдём время.

Vladislav
15.06.2017
21:09:35
Я все вертику жду обновления, уже версия 8.1 в проде бегает ?

Alexander
15.06.2017
21:35:44
С Вертикой не будет принципиальной разницы в зависимости от версий

Google
Oleg
15.06.2017
22:21:08
Всем, привет, подскажите, пожалуйста, куда копать: При добавлении записи с таблицу с движком ReplicatedMergeTree ZooKeeper выкидывает ошибку NoNode for ...
Добрый день! Как-то проблема решилась? Тоже самое наблюдаю, все норм работает. INFO. Но все же. Сыпятся постоянно такие сообщения..

Alexey
15.06.2017
22:38:39
Добрый день! Как-то проблема решилась? Тоже самое наблюдаю, все норм работает. INFO. Но все же. Сыпятся постоянно такие сообщения..
Это вообще не ошибка. Это говорит о том, что мы спросили у ZK данные о каком-то узле, но узла нет. С точки зрения приложения, и с точки зрения самого ZK, это нормальная ситуация. Можете понизить уровень логгирования в ZK.

Oleg
15.06.2017
22:38:48
ок, спс

f1yegor
15.06.2017
22:39:06
Надо обновить. Для MemSQL даже не так сложно, потому что сохранилась пошаговая инструкция. Сделаем, если найдём время.
есть такой человек Andy Pavlo, он хорошо знает ребят из MemSQL, может они сами захотят прогнать?

Alexey
15.06.2017
22:40:13
Смысл в том, что все системы проходят тесты на одинаковых серверах. А вообще было бы хорошо. Сейчас для этого не хватает генератора тестовых данных.

Alexander
16.06.2017
06:54:12
Всем привет. Кто-нибудь пробовал использовать odbc драйвер на windows? У вас он хоть с какой-нибудь программой начал отрабатывать?

Мы пробовали spss моделлер, excel 2013, tableau 10.3 - где-то видит только таблицы, где-то еще видны поля. но селект нигде не получилось сделать. эксель просто не подлкючился

Dmitry
16.06.2017
07:24:05
Pavel
16.06.2017
08:38:26
Здравствуйте! Система генерирует поток событий. У события есть время появления, уникальный идентификатор и текстовое представление события. Структура таблицы для хранения событий: CREATE TABLE IF NOT EXISTS test_data (CounterID UInt32, EventDate Date, Payload String) ENGINE = MergeTree(EventDate, (CounterID, EventDate), 8192) Я хочу использовать кликхаус в качестве хранилища событий с возможностью запуска аналитики и с возможностью последующей выгрузки в другие системы. Записал в таблицу примерно 0.5*10^9 таких событий и пытаюсь перегружать их по мере пеступления во внешнего клиента таким запросом: SELECT CounterID,EventDate,Payload FROM test_data WHERE CounterID > 5 ORDER BY CounterID LIMIT 5 FORMAT JSON Запрос выполняется 50 минут. Всего строк COUNT()=623171850 "statistics": { "elapsed": 3094.789434725, "rows_read": 623171850, "bytes_read": 430075954723 } Аналогично для запроса SELECT CounterID,EventDate,Payload FROM test_data WHERE CounterID > 623171000 ORDER BY CounterID LIMIT 5 По какой причине в этом запросе происходит чтение всех строк и не используется индекс? Есть ли правильный способ перегружать данные из таблицы во внешнюю систему по мере поступления событий или clickhouse в принципе не предназначен для таких задач? версия clickhouse 1.1.54236

Александр
16.06.2017
08:53:02
Судя по вчерашнему общению на тему order by, то он вроде как не использует индекс

И возможно так долго данные читаются как раз таки из-за order by, но я могу ошибаться ) Лучше дождаться ответа от разработчиков

Хотя...скорее всего у вас слишком большая гранулированность CounterID

И получается так, что особого профита от индекса по этой колонке нет

Получается аналогично фулскану

Можно добавить еще колонку какую то типа eventBatch и класть туда например пометку о каждых 10 миллионах записей

И вместо CounterID включить ее в индекс

Например на батчи в диапозоне 623 170 000 - 623 171 000 значение eventBatch будет 623 170 000

Тогда можно будет делать запрос типа prewhere eventBatch > 623 170 000 where CounterID > 623 171 000

Вот тут есть очень развернутый ответ Алексея на тему того как работает первичный ключ: https://groups.google.com/forum/#!topic/clickhouse/eUrsP30VtSU

Maxim
16.06.2017
09:28:59
А нет ли желания рассказать про ClickHouse на https://smartdataconf.ru/ ?

Google
Alexey
16.06.2017
10:14:41
Про Excel.

В 2016 запрос через odbc - работает. 2013 ещё надо найти.

А нет ли желания рассказать про ClickHouse на https://smartdataconf.ru/ ?
Можем. Организаторы заинтересованы в нашем докладе?

Здравствуйте! Система генерирует поток событий. У события есть время появления, уникальный идентификатор и текстовое представление события. Структура таблицы для хранения событий: CREATE TABLE IF NOT EXISTS test_data (CounterID UInt32, EventDate Date, Payload String) ENGINE = MergeTree(EventDate, (CounterID, EventDate), 8192) Я хочу использовать кликхаус в качестве хранилища событий с возможностью запуска аналитики и с возможностью последующей выгрузки в другие системы. Записал в таблицу примерно 0.5*10^9 таких событий и пытаюсь перегружать их по мере пеступления во внешнего клиента таким запросом: SELECT CounterID,EventDate,Payload FROM test_data WHERE CounterID > 5 ORDER BY CounterID LIMIT 5 FORMAT JSON Запрос выполняется 50 минут. Всего строк COUNT()=623171850 "statistics": { "elapsed": 3094.789434725, "rows_read": 623171850, "bytes_read": 430075954723 } Аналогично для запроса SELECT CounterID,EventDate,Payload FROM test_data WHERE CounterID > 623171000 ORDER BY CounterID LIMIT 5 По какой причине в этом запросе происходит чтение всех строк и не используется индекс? Есть ли правильный способ перегружать данные из таблицы во внешнюю систему по мере поступления событий или clickhouse в принципе не предназначен для таких задач? версия clickhouse 1.1.54236
Если читается много строк - значит получается, что много строк подходят под условие CounterID > 5 или CounterID > 623171000. При этом ORDER BY CounterID LIMIT 5 уже не помогает, так как ORDER BY не использует индекс. Чтобы было эффективнее, можно поставить условие на CounterID сверху, как-то наугад: CounterID > 5 AND CounterID < 500. Понятное дело, что так не всегда возможно. ORDER BY не использует индекс. Но это было бы хорошо реализовать. Ещё не реализовано, потому что требуется несколько другой способ распараллеливания запроса (разделения задач по потокам) - более "последовательный", чем когда известно, что мы будем читать весь диапазон. И такая логика просто ещё не разработана.

Maxim
16.06.2017
10:30:56
Можем. Организаторы заинтересованы в нашем докладе?
Затрудняюсь ответить. Я пока только посетитель конференций, проводимых JUG.ru.

Pavel
16.06.2017
10:31:28
ну хоть кто-то здесь не ненавидит яву=)

Alexey
16.06.2017
10:42:55
Вспомнил, что у нас уже есть предварительная договорённость о конференции от Jug.ru как раз в это время. Думаю, это она и есть. Значит будем.

Pavel
16.06.2017
10:57:10
про использование order by понял, спасибо

Roman
16.06.2017
11:01:43
Существует ли возможность смерджить одноуровневые массивы? Например, для структуры: Key UInt32 | Value Array(UInt32) поулчить все уникальные значения элементов массива Value для определенного ключа?

Alexey
16.06.2017
11:16:07
Существует ли возможность смерджить одноуровневые массивы? Например, для структуры: Key UInt32 | Value Array(UInt32) поулчить все уникальные значения элементов массива Value для определенного ключа?
Можно воспользоваться агрегатной функцией groupUniqArrayArray. На вход принимает массивы. На выходе будет массив со всеми уникальными значениями. Название необычное, потому что это - агрегатная функция groupUniqArray, к которой ещё приписали комбинатор -Array.

N
16.06.2017
11:45:34
Расскажите, пожалуйста, по-подробнее, что такое seek-и. Откуда возникают и что влияет на их количество. Что с их помощью оценить​ - есть в документации, но не понимаю откуда они.

Pavel
16.06.2017
11:46:07
это из области жесктих дисков, время необходимое на передвижение головки механического диска на другую дорожку

условно, это время задержки межда получением команды "прочти блок Х" и его прочтением с магнитной пластины.

N
16.06.2017
11:48:38
И, если я правильно понимаю, оно будет увеличиваться с количеством данных на диске?

Pavel
16.06.2017
11:48:53
нет :)

это относительно постоянная величина в районе 4-9 мс

Google
Pavel
16.06.2017
11:49:36
она зависит сугубо от расстояния между дорожками (чем дальше - от центра - данные на диск легли - тем дольше)

ну и как следствие, чем больше обращений с паттерном "рандом read / write", когда чтение запись идет не последовательно, а в разные файлы (как следствие размещенные в физически разных местах жесктого диска) идет этот самый seek

чем больше рандомность - тем больше он времени жрет. Идеальный вариант - когда данные пишутся последовательно и очень большими блоками, так будет быстрее всего.

либо выкинуть начерт механические диски и забыть про бурду что я только что рассказал :)

N
16.06.2017
11:54:33
Ясно, спасибо! Смутил тот факт, что при выполнении select event, value from system.events where event == 'Seek' возвращает 1621052. Бывает увеличивается скачками немного, не уменьшается и не понятно в каких попугаях измеряется.

Pavel
16.06.2017
11:55:44
я почти уверен, что - в штуках :)

Maksim
16.06.2017
13:13:08
т.е. это не seek шпинделя?

N
16.06.2017
13:14:41
И смысл такого счётчика тоже, пожалуйста)

Alexey
16.06.2017
13:16:30
С реальным перемещением головок связано косвенно. Смысл счётчика - количество мест, с которых мы читали файлы. Например, если после обработки запроса, счётчик увеличился на 10 - значит было 10 разных мест, начиная с которых мы делали чтения файлов.

Pavel
16.06.2017
13:25:17
удобная штука для отладки

Andrey
16.06.2017
13:26:10
Ребят, а есть какие нибудь костыли против broken pipe до релиза новой версии?

Alex
16.06.2017
13:38:40
Можно в каждом шарде задублировать реплику

и не забыть выставить везде internal_replication = true

то есть было так: <remote_servers> <test_cluster> <shard> <replica> <host>remote</host> <port>9000</port> </replica> </shard> </test_cluster> </remote_servers>

стало так: <remote_servers> <test_cluster> <shard> <internal_replication>true</internal_replication> <replica> <host>remote</host> <port>9000</port> </replica> <replica> <host>remote</host> <port>9000</port> </replica> </shard> </test_cluster> </remote_servers>

И так для каждого шарда

Александр
16.06.2017
13:40:47
А если у меня виртуалки? Я могу просто склонировать три шарда и сделать их репликами? Данные будут переналиваться или лучше чистый инстанс кх поднимать?

Alex
16.06.2017
13:40:48
Должно помочь :)

Google
Andrey
16.06.2017
13:41:06
Должно помочь :)
Чет не совсем понимаю, а как оно поможет?

Alex
16.06.2017
13:41:42
По факту сервера остаются теми же, просто их надо внести в конфиг два раза

Чет не совсем понимаю, а как оно поможет?
Если реплик больше одной, используется другой код, в котором проблемы нет. Таким конфигом мы заставляем ClickHouse думать, что их две на шард, хотя на самом деле одна :)

Посколько при internal_replication=true вставка будет производиться только на одну из "реплик", дублирования данных не будет.

При запросе в distributed таблицу запрос тоже направляется только на одну из "реплик" шарда.

То есть всё будет работать как надо

Andrey
16.06.2017
13:49:42
очень интересное решение

Страница 170 из 723