Size: a a a

ClickHouse не тормозит

2020 September 18

SM

Sergey Mikhalev in ClickHouse не тормозит
Изначальная задача дедупликации в этом виде - это именно обеспечить что-то подобное exactly ones семантике. Т.е. чтобы если мы не получили ack, что блок записан его можно было перепослать и это не вызывало дублирования данных. Но из-за реализации, которая основывается, на понимании что это тот же блок данных на самих данных - сразу куча каких-то проблем. Если бы реализация основывалась не на данных, а на некотором id блока, который летел бы от клиента, то по моему мнению этого можно было бы избежать.
источник

D

Dj in ClickHouse не тормозит
Sergey Mikhalev
Изначальная задача дедупликации в этом виде - это именно обеспечить что-то подобное exactly ones семантике. Т.е. чтобы если мы не получили ack, что блок записан его можно было перепослать и это не вызывало дублирования данных. Но из-за реализации, которая основывается, на понимании что это тот же блок данных на самих данных - сразу куча каких-то проблем. Если бы реализация основывалась не на данных, а на некотором id блока, который летел бы от клиента, то по моему мнению этого можно было бы избежать.
ну, всегда можно сделать колонку где будет версия на самом деле и которую клиент может менять когда ему именно надо вставить (что в общем то и делается)
источник

SM

Sergey Mikhalev in ClickHouse не тормозит
Делать в каждой таблице колонку, которую нужно менять - это как бы показывать, что что-то не додуманно в системе, которую ты используешь.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Dj
не понял. эт чтобы не реплицировать лишний раз по сети при вставках напрямую в несколько реплик?
да, https://github.com/ClickHouse/ClickHouse/pull/11684

When duplicate block is written to replica where it does not exist locally (has not been fetched from replicas), don't ignore it and write locally to achieve the same effect as if it was successfully replicated.

не понимаю зачем правда, это бывает когда вставка через distriubuted и internal_replication=false
источник

D

Dj in ClickHouse не тормозит
Sergey Mikhalev
Делать в каждой таблице колонку, которую нужно менять - это как бы показывать, что что-то не додуманно в системе, которую ты используешь.
в списках непродуманных вещей в КХ, это у меня даже в топ10 не войдет )))
источник

SM

Sergey Mikhalev in ClickHouse не тормозит
Dj
в списках непродуманных вещей в КХ, это у меня даже в топ10 не войдет )))
Я согласен, что есть вещи и поважнее.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Sergey Mikhalev
Изначальная задача дедупликации в этом виде - это именно обеспечить что-то подобное exactly ones семантике. Т.е. чтобы если мы не получили ack, что блок записан его можно было перепослать и это не вызывало дублирования данных. Но из-за реализации, которая основывается, на понимании что это тот же блок данных на самих данных - сразу куча каких-то проблем. Если бы реализация основывалась не на данных, а на некотором id блока, который летел бы от клиента, то по моему мнению этого можно было бы избежать.
а как проверить по самим данным?
мы не можем каждую строку проверять по первичному ключу, встака займет годы
источник

SM

Sergey Mikhalev in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
а как проверить по самим данным?
мы не можем каждую строку проверять по первичному ключу, встака займет годы
Я как раз сказал, что не нужно основываться на данных.
источник

D

Dj in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
а как проверить по самим данным?
мы не можем каждую строку проверять по первичному ключу, встака займет годы
не, я так понял Сергей имел ввиду, что можно добавить в хедер типа вставитьБезПроверки=тру, ну или идентификатор какой
источник

D

Dj in ClickHouse не тормозит
чтобы зафорсить вставку данных независимо от дупликатности
источник

D

Dj in ClickHouse не тормозит
ну или вообще АйДиБлока=33444
источник

D

Dj in ClickHouse не тормозит
и независимо что внутри, дедуплицировать по нему
источник

D

Dj in ClickHouse не тормозит
не построчно короче
источник

SM

Sergey Mikhalev in ClickHouse не тормозит
Да, решать задачу именно повторной перепоссылки, не основываясь на данных.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Sergey Mikhalev
Я как раз сказал, что не нужно основываться на данных.
инсерт стримающийся распадается на блоки, которые вставляются неатомарно
источник

SM

Sergey Mikhalev in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
инсерт стримающийся распадается на блоки, которые вставляются неатомарно
Вот этого я не понял.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Sergey Mikhalev
Вот этого я не понял.
вы послали инсерт с id = xxxx, в нем 10 строк, он создал 4 блока, и когда писали 5й связь разорвалась и он не записался. Мы пробуем повторить, а xxxx уже есть.

Блоки создаются из-за партиций и параметров на размеры блоков.

Клиент обязан в вашем варианте знать как создаются блоки, например как прямо сейчас задан у таблицы partition by
и например нельзя послать данные за два месяца, 31 число и 1-е в одном инсерте
источник

D

Dj in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
вы послали инсерт с id = xxxx, в нем 10 строк, он создал 4 блока, и когда писали 5й связь разорвалась и он не записался. Мы пробуем повторить, а xxxx уже есть.

Блоки создаются из-за партиций и параметров на размеры блоков.

Клиент обязан в вашем варианте знать как создаются блоки, например как прямо сейчас задан у таблицы partition by
и например нельзя послать данные за два месяца, 31 число и 1-е в одном инсерте
id.b1
id.b2
id.b3
где bXXX добавляет уже КХ

было бы желание и нужда )
источник

SM

Sergey Mikhalev in ClickHouse не тормозит
Во-первых, кто пробует повторить, если драйвер, из-за акк, то он понимает, что это он тот же кусок данных вставляет - и это норм, если он перепошлет и мы добавим только недостающую часть.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Sergey Mikhalev
Во-первых, кто пробует повторить, если драйвер, из-за акк, то он понимает, что это он тот же кусок данных вставляет - и это норм, если он перепошлет и мы добавим только недостающую часть.
создайте тикет FR, с описанием дизайна, если он валиден, его заимплементят.
источник