что они HTTP only? Было бы логично сделать это общей фичей не привязывая к протоколу (может так оно и есть на самом деле, я по коду не смотрел), тем более что всегда есть разбор данных и разницы из какого протокола пушнуть блок в очередь нет. Вообще, передавать по одной строке это большой оверхед, но если по какой-то причине можно только так, то почему бы и нет
это и для binary протокола работает, если данные находятся в теле запроса.
Возможно, если оно кому-то нужно, то можно вот сюда добавить метод для асинхронной вставки https://github.com/ClickHouse/clickhouse-go? Правда в Go и так на клиенте достаточно просто все в batch собирать
проблема с go клиентом, он данные отдельным куском передает, а не в теле запроса, те тут нужно в сам клиент добавлять новую фичу.
Это не очень сложная задача, можно сделать отдельный метод типа AsyncInsert
Ну в первую очередь это кто то должен сделать. Вообще немного связанно с этим issue https://github.com/ClickHouse/clickhouse-go/issues/435
Интересно еще то, что Go драйвер умеет pool соединений, надо посмотреть будет на разницу в том чтоб пулять по HTTP или через TCP гонять
В общем да, в нативном протоколе оно тоже работает. По скорости оно сильно хуже, чем вставлять пачкой, плюс требуется конвертировать данные клиента в строковое представление. Но, так как это фича КХ, то вполне можно добавить поддержку в драйвер
Имхо, когда добавят транзакции драйвер все равно придется переделывать с его фейковыми транзакциями.
https://github.com/ClickHouse/clickhouse-go/blob/master/benchmark/v2/write-async/main.go добавил AsyncInsert, с учетом пула коннектов он работает неплохо
Круто, нужно будет попробовать.
Обсуждают сегодня