
Igor
31.03.2017
19:59:00
если ос будет "iOS", там все равно будет 70 символов занято

papa
31.03.2017
19:59:11
если у вас строки короче 70, то они и так меньеш будут занимать.

Maksim
31.03.2017
19:59:15
это не 70 символов
это 70 байт

Google

Maksim
31.03.2017
19:59:31
в доке так описано по крайне мере)
про ос верное замечание
я просто не знаю пока какой макс. длины будут значения. потом уточню. пока просто эксперимент на insert select
подключил драйвер пишу скриптик импорта из mysql в clickhouse вот и посмотрим. кстати пишут больше 100 insert в секунду низя?

Igor
31.03.2017
20:02:27
ну вы вставляйте побольше сразу. 10-100к строк например

Maksim
31.03.2017
20:03:16

Igor
31.03.2017
20:03:53
ну если не по модему на сервер шлете

Maksim
31.03.2017
20:04:17
я в плане того выдержит ли clickhouse такую пачку и обработает ли за секунду ?

Igor
31.03.2017
20:04:49
проверьте, а?)
Производительность при вставке данных.
Данные рекомендуется вставлять пачками не менее 1000 строк или не более одного запроса в секунду.
Что если вставлять более 1K строк чаще чем раз в секунду (большими инсертами). Как это будет сказываться на производительности? Оптимально ли это? Рекомендации указанные в руководстве относятся к инстансу/базе/таблице?
Батчи можно сделать больше. Например, 100k строк в секунду. В зависимости от данных, возможно до нескольких миллионов строк в секунду. Но увеличивать частоту вставок не стоит.
Рекомендация относится к одной таблице. Но при наличии большого количества серверов, возможна слишком большая нагрузка на ZooKeeper, и это ограничивает частоту вставок на весь кластер.


Maksim
31.03.2017
20:07:02
я то проверю но я расчитывал на 100 записей в секунду предел ) блин ребят спасибо что отвечаете это так круто что я попал на этот канал и вы помогаете)) мы уже 2-3 месяца занимаемся какой-то херней) уже и кроном в кеш пишем чтобы статистику показывать сразу и начали агрегировать данные, потом стали дописывать только новое, а записей все больше требования все выше крон все дольше выполняется мы уже все посидели))) а тут clickhouse )

Google

evervoid
31.03.2017
21:55:39
А вот у меня вопрос еще: кто пользуется кафкой как буфером, вы как сконфигурировали консьюмеры? Интересует auto.offset.reset и конфигурации, связанные с размерами сообщений, может есть какие-то практики для конфигурации связки кафка-кликхаус или интересные кейсы.
И сразу второй вопрос: если выполнять параллельно несколько инсертов, то какой предел, после которого производительность вставки на кластер перестанет увеличиваться? Имею в виду количество параллельно работающих инсертов в одну реплицируемую таблицу.

Maksim
31.03.2017
22:21:07
ребят может мой вопрос покажется очень простым)) в mysql у некоторых записей есть значения null - clickhouse отказывается такое хавать)) что ему отправлять ? например если это число то наверное 0 ? тупо приведение null к типу int даст 0. а со строкой как быть?

papa
31.03.2017
22:23:24
значение по умолчанию для String это пустая строка, если вас это устраивает - можете вставлять пустую строку. есть тип данных Nullable(T), который поддерживает значение NULL, но работа над его поддержкой в сервере еще не завершена.

Maksim
31.03.2017
22:26:33
у меня ошибка выскакивает. пытаюсь запустить свой парсер. все отладил. но ошибка на insert
[ClickHouseDB\DatabaseException]
Cannot parse expression of type FixedString(70) here: ,,0,0,'')
все не пинайте это я походу просто не то пишу)
УРА! работает
total_time: 0.344
10 строк 0.344 вставлялось ? эмм
500 записей вставилось за "total_time" => 1.312
это нормальный результат для MergeTree engine? 500 insert послал в clickhouse

Igor
31.03.2017
22:36:21
500инсертов по одной строке?

Maksim
31.03.2017
22:37:32
неа всем махом

Igor
31.03.2017
22:37:53
а скок строк на запрос?

Maksim
31.03.2017
22:38:08
сделал запрос в табличку mysql взял данные трансформировал для преобразования типов и нужных полей положил в массив. кинул в массив на insert

Igor
31.03.2017
22:38:28
в каком формате вставляли?

Maksim
31.03.2017
22:38:29
500 строк
в текстовом
то есть отправлял массив данных

Google

Igor
31.03.2017
22:39:13
ну их много текстовых. CSV, Tabseparated, Values

Maksim
31.03.2017
22:39:29
массив вида
['1','2','2',....],
['1','2','2',....],
['1','2','2',....],
...

Igor
31.03.2017
22:39:37
ээм

Maksim
31.03.2017
22:39:51
я работаю через драйвер php
там небольшой клиент + обертка orm

Igor
31.03.2017
22:40:25
может они оверхед добавляют? я б не сказал что это нормально

Maksim
31.03.2017
22:40:28
как я понял он шлет через curl запрос multiquery

Igor
31.03.2017
22:41:13
попробуйте clickhouse-clientом или напишите просто курловый запрос и POSTом в TSV данные фиганите

Maksim
31.03.2017
22:43:19
"url" => "http://...:8123/?extremes=0&readonly=0&max_execution_time=10&enable_http_compression=0&database=statistics"
"content_type" => "text/plain; charset=UTF-8"
вот куда он шлет и с какими параметрами

Igor
31.03.2017
22:43:53
можете эти 500 строк запихнуть в файл типа CSV/TSV (или в переменную просто) и одним запросом с "query=INSERT INTO table (...) FORMAT CSV" в query string и 500 строками данных в формате CSV в POSTе
или cat data.csv | clickhouse-client --query "INSERT INTO .. (..) FORMAT CSV"

Maksim
31.03.2017
22:48:41
слать файлик вместо строки?

Igor
31.03.2017
22:49:02
нене, его содержимое

Maksim
31.03.2017
22:50:32
хотелось бы в рамках драйвера который использую
$file_data_names = [
'/tmp/clickHouseDB_test.1.data',
'/tmp/clickHouseDB_test.2.data',
'/tmp/clickHouseDB_test.3.data',
'/tmp/clickHouseDB_test.4.data',
'/tmp/clickHouseDB_test.5.data',
];
// insert all files
$stat = $db->insertBatchFiles(
'summing_url_views',
$file_data_names,
['event_time', 'site_key', 'site_id', 'views', 'v_00', 'v_55']
);
предлагают такое решение
"Parallelizing massive inserts from CSV file"

Igor
31.03.2017
22:51:35
попробуйте) но я б напрямую попробовал для сравнения

Maksim
31.03.2017
22:52:24
оно полюбому будет быстрее т.к. выполняется локально

Google

Maksim
31.03.2017
22:52:31
а тут запрос на сервер занимает какое-то время

Igor
31.03.2017
22:53:24
так ничего не мешает не локально отправить данные курлом или клиентом

Maksim
31.03.2017
22:53:25
по скрину выше видно что пока подключился пока отправил данные
я как раз таки отправляю из локально компа на удаленный
а если зайду на машину и там выполню время подключения и отправки не актуально т.к. я уже на сервере и напрямую делаю запрос
может комперсия gzip поможет?

Igor
31.03.2017
22:55:00
ну тогда может из-за сети, конечно, так долго
может) enable_http_compression и соотв заголовок в хттп запрос тогда
в репозитории кх можно найти тест хттп сжатия, можно в качестве примера заюзать

Maksim
31.03.2017
22:58:17
в драйвере есть уже сжатие
сча попробую
ну у нас все удаленные машины в одном кластере
одна сеть
там скорость будет бешенная
это я с локальной машины шлю результат не тот
я багу сделал в своем парсере походу я добавил только пару строк. сейчас проведу заново тест

Sergei
01.04.2017
05:47:25
Всем привет! Если вы на CodeFest в Новосибирске приходите к 14:30 на импровизированную встречу.
Или ищите нас в кулуарах.

Andrey
01.04.2017
07:37:24

Google

Maksim
01.04.2017
13:57:10
@all может кто подскажет какой самый быстрый способ вставки строкой или через csv file

Igor
01.04.2017
14:13:40
вы clickhouse-client c curl'ом попробовали уже?)

Maksim
01.04.2017
14:15:35
вы clickhouse-client c curl'ом попробовали уже?)
в 6 утра лег исправил ошибку в своем импорте выполнил локально результаты были не очень. потом залил на машину которая в сети с машиной клик хаус стоит и результат пачка 50 тыс. записей = 0.21 сек
вы clickhouse-client c curl'ом попробовали уже?)
есть статейка на хабре 10 млн записей импортнули за 4 секунды что равно 2 500 000 записей в секунду это результат очень классный, но не пойму как они добились этого. может через csv надо импорт делать. вначале собирать все в файлик потом файлик кидать в clickhouse с компресией
*они делали через csv. но разве разница есть отправлять запрос вида INSERT INTO table (value),(value),(value), ... (fields) или в csv
разве что компресия может дать более быструю пересылку данных

Andrey
01.04.2017
14:34:18

Maksim
01.04.2017
14:34:59

Andrey
01.04.2017
14:35:09
Да я понимаю
А еще это же сильно зависит от количества столбцов.

Maksim
01.04.2017
14:36:40
у нас их около 40

Andrey
01.04.2017
14:36:55
у меня 16 колонок. Общий вес 232млн строк в CSV примерно 30-40гб

Maksim
01.04.2017
14:38:24
сейчас попробую перегнать данные в csv записать в файлик и его отправлять. сделаю замер
еще такой вопрос. примари кей приоритетнее для каких полей выставлять? по которым GROUP и WHERE IN ?

f1yegor
01.04.2017
14:43:33
https://groups.google.com/forum/#!searchin/clickhouse/%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%7Csort:relevance/clickhouse/eUrsP30VtSU/p4-pxgdXAgAJ

papa
01.04.2017
15:03:40
еще такой вопрос. примари кей приоритетнее для каких полей выставлять? по которым GROUP и WHERE IN ?
т.к. у вас индексов кроме основного не будет, то все запросы будут иметь план либо fullscan либо он же, но с ограничением по диапазонам индекса, которые можно извлечь из where. например, если у вас данные про какие-то события, у них есть время, и типовой отчет у вас за последний месяц, то чтобы не читать данные за всю историю у вас будет фильтр по дате и индекс по дате. если у вас события характеризуются каким-то источником и отчетность по каждому из них нужна отдельно, то условие на него (всегда) будет в where и его можно добавить в индекс. особенно если таких источников существенно меньше чем количество строк, тогда их данные будут храниться подряд большими кусками и работать быстрее.