184 похожих чатов

Побенчмаркал асинхронные инсерты в ситуации, когда вставляется по одной строке

из сборки в мастере, и либо я что-то не так делаю, либо одно из двух:

Код для inserter.go из теста: https://gist.github.com/YuriyNasretdinov/63dcc5bd129c1fdd4d35628c6a30cd1a

Вот цифры для kittenhouse -p 8124 -reverse -ch-addr=127.0.0.1:8123 -u= -g= на 16-ядерной виртуалке:


$ go run inserter.go -addr=127.0.0.1:8124 -requests=500 -concurrency=5000
2021/10/19 23:17:49 Sending 500 requests to "http://127.0.0.1:8124/?query=INSERT%20INTO%20InsertTest_buffer(id)%20VALUES" with concurrency 5000
2021/10/19 23:18:07 QPS: 133322.9 (for 18.751460918s)
$ clickhouse-client
ClickHouse client version 21.11.1.8486 (official build).
Connected to ClickHouse server version 21.11.1 revision 54450.

┌─count()─┐
│ 2500000 │
└─────────┘


Вот цифры для асинхронной вставки в самом ClickHouse (конкурентность пришлось уменьшить, потому что, кажется, больше 1000 всё равно не поддерживается пока что):


$ go run inserter.go -addr=127.0.0.1:8123 -clickhouse-async -requests=500 -concurrency=500
2021/10/19 23:21:54 Sending 500 requests to "http://127.0.0.1:8123/?wait_for_async_insert=0&async_insert=1&query=INSERT%20INTO%20InsertTest_buffer(id)%20VALUES" with concurrency 500
2021/10/19 23:22:26 QPS: 7832.4 (for 31.918566481s)

$ clickhouse-client

🙂 select count() from InsertTest_buffer;
...
┌─count()─┐
│ 0 │
└─────────┘
1 rows in set. Elapsed: 0.001 sec.


^ по факту, при вставке в ClickHouse с опциями wait_for_async_insert=0&async_insert=1 отдается ошибка Response: Code: 73. DB::Exception: Unknown input format . (UNKNOWN_FORMAT) (version 21.11.1.8486 (official build)), а когда вставляешь без этих аргументов, то всё нормально:

```
go run inserter.go -addr=127.0.0.1:8123 -requests=50000 -concurrency=10
2021/10/19 23:27:21 Sending 50000 requests to "http://127.0.0.1:8123/?query=INSERT%20INTO%20InsertTest_buffer(id)%20VALUES" with concurrency 10
2021/10/19 23:28:22 QPS: 8173.2 (for 1m1.175656278s)
nasretdinov@clickhouse-bench:~/kittenhouse-vs-bulk/inserter$ clickhouse-client
ClickHouse client version 21.11.1.8486 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 21.11.1 revision 54450.
clickhouse-bench.europe-west4-a.c.studious-stack-249419.internal :) select count() from InsertTest_buffer;
...
┌─count()─┐
│ 500000 │
└─────────┘
```

В любом случае, kittenhouse в режиме reverse proxy вставляет порядка 130к строк в секунду, когда бенчмарк запущен на локальной 16-ядерной машине, а clickhouse-benchmark выдавал около 11k QPS на той же машине:


$ clickhouse-benchmark --wait_for_async_insert=0 --async_insert=1 -c64 <<< 'insert into InsertTest format TSV 1'
localhost:9000, queries 36651, QPS: 11601.953, RPS: 0.000, MiB/s: 0.000, result RPS: 0.000, result MiB/s: 0.000.


Структура таблицы:


create table InsertTest (id Int) ENGINE=MergeTree ORDER BY id;
CREATE TABLE default.InsertTest_buffer(id Int32) ENGINE = Buffer('default', 'InsertTest', 2, 15, 15, 10000000, 10000000, 100000000, 100000000)

3 ответов

17 просмотров

Unknown input format я уже тоже нашел и зарепортил

Yuran- Автор вопроса

Сделал небольшое видео с бенчмарком режима асинхронной вставки в ClickHouse и сравнение с kittenhouse в режиме reverse proxy для случая, когда хочется вставлять по одной строке (что в целом обычно плохая идея для OLAP базы, даже такой быстрой, как ClickHouse :)): https://www.youtube.com/watch?v=1tYev6PEJXU Кажется, особого прироста от асинхронного режима нет по сравнению с буферной таблицей (кроме того, что вставка по умолчанию буферизует синхронно, тут за это большой респект, но бенчмаркать вставку по одной строке это мешает, потому что тогда конкурентность вставки должна быть очень высокой, а это ClickHouse как-то не особо любит). Возможно, я что-то не так сравнивал, хотя вроде бы в SHOW PROCESSLIST действительно показывались треды, которые осуществляют асинхронную вставку, так что всё же должно быть правильно. Интересно услышать ваши отзывы!

Yuran
Сделал небольшое видео с бенчмарком режима асинхро...

Да, там есть некоторые ограничение в производительности http сервера кх.

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
11
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Ребят, кто сталкивался с тем, что Electron.js не разворачивает билд React.js-приложения? Голый body в чёрном цвете, как и должно быть, но остального - нет. Билд работает исп...
..
6
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Anyone knows how to build this widget in Flutter? I have all the assets for round stations and the road, but how can I make the my widget animate between these stations? And h...
Mohammad Zamani
9
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Карта сайта