и ReplacingMergeTree при инсертах? То есть если я делаю несколько инсертов с одинаковым ключем и с единичками в поле sign, но с разными counts в таблицу с движком CollapsingMergeTree, то в фоне происходит сворачивание этих записей и остается только последняя запись. Или для этого можно использовать FINAL в запросе. В документации явного указания на это я не увидел. Там объясняется алгоритм работы удаления с использованием sign. Но когда я просто экспериментировал с такой таблицей, то записи сворачиваются
Надо использовать FINAL, все таблицы *MergeTree сливают данные в бэкграунде. У вас видимо данных очень мало и всё быстро под капотом отрабатывает
Спасибо. Да, использую final, забыл сказать. Но интересно в чем тогда преимущество replacing именно в такой задаче, когда прилетает какое-то количество inserts, которые являются update, фактически.
Если вам нужен чистый апдейт, то наверное replacing лучше. Collapsing позволяет удалять
да, мне нужно и удалять. Я правильно понимаю, что при апдейте между ними нет разницы? Просто удаление у меня редко происходит, а апдейтов очень много. Поэтому если в replacing апдейт происходит эффективнее, то я бы рассмотрел возможность soft delete или другие обходные пути.. И, вообще, хотелось бы понять есть ли разница при апдейте
разницы с точки зрения производительности между Replacing и Collapsing практически нет все "удаления" и "апдейты" это просто немного разная логика пропусков строк при слиянии партов внутри партиции в background merge trhead pool
вы хотите слать всегда sign = 1 для обновления через collapsing? Не звучит чем-то надёжным и идеологическии верным. Что будет если 2 потока пришлют разные значения?
Да, план такой. Из-за необходимости удаления. Поэтому я и засомневался в эффективном обновлении. Пока шлю данные в один поток. Если будет больше, то либо в коде надо это предусмотреть, либо брать collapsingVersioned. Думал так..
Обсуждают сегодня