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

Хочу посоветоваться по поводу одного потенциального юзкейса для ClickHouse. Есть система,

которая делает единицы миллинов исходящих API вызовов во внешние системы статистики и сохраняет результаты в Postgres. В терминах предметной области это сколько денег потратили клиенты на свои рекламные кампании на разных платформах (Facebook, Google, Twitter, etc) с брейкдауном по дате, кампании, стране + еще несколько измерений.

Эти данные имеют свойство меняться в прошлом, поэтому каждый день мы забираем новые данные за вчера + обновленные старые за 7 дней до этого. То есть это не append only сценарий.

В Postgres мы делаем DELETE FROM ... WHERE ... (условие соответствующее кусочку данных, которые мы хотим обновить). Таких кусочков столько же сколько исходящих запросов, т.е. миллионы.
Потом вставлеяем новые через COPY FROM ...
Под транзакцией.
Это все крутится на 4 шардах с NVMe + подневное секционирование.

Это была история про запись.

На чтение мы сервим эти данные в клиентский дашборд через SELECT sum(...) FROM ... WHERE ... GROUP BY ...

Т.е. на чтение это очень ClickHouse история, на запись кажется что вообще нет 🙂

Можно ли как-то адаптировать запись под ClickHouse чтобы уйти от Postgres?

10 ответов

7 просмотров

можно попробовать ReplacingMergeTree + партиции по месяцам или неделям + optimize table ... partition ... final после вставки

Vitali Kotik- Автор вопроса
ivan
можно попробовать ReplacingMergeTree + партиции по...

Тут кастит есть нюанс наверное ReplacingMergeTree заменит старые строчки на новые Но не удалит старые строчки, которые перестали существовать. Это сценарий когда внешнее API спустя время не вернуло какую-то строку. Типа во внешнем сервисе случился какой-то внутренний reconciliation и они решили что такого сегмента данных нету на самом деле.

можно попробовать манипулировать TTL у таблицы

Vitali Kotik- Автор вопроса
critskiy
можно попробовать манипулировать TTL у таблицы

интересная мысль - некогда не думал про это интуитивно страшноват т.к. новые данные могут просто не придти вовремя, а старые при этом удалятся по ttl

Просто партиционируйте по дням и дропайте старые партиции

Я не понял, что, откуда и куда хотите аттачить. Но, в любом случае, мне не известны детали того, как у вас данные обновляются, вам виднее

Vitali Kotik- Автор вопроса
Илья Коргун
Я не понял, что, откуда и куда хотите аттачить. Но...

Спасибо за идею, подумаю. На CH пока нету системы. На Postgres она описана здесь https://t.me/clickhouse_ru/336648

С постгресом-то я понял. Всё равно, нужно знать больше деталей и решать по месту. К слову, есть ещё REPLACE PARTITION

Vitali Kotik- Автор вопроса
Илья Коргун
С постгресом-то я понял. Всё равно, нужно знать бо...

О спасибо! видимо жанглирование партициями это распространенный юзкейс раз есть такие ф-ции

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

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

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Всем привет! Использую gitlab-ci. Настроил gitlab-agent для деплоя в куб. При деплое проекта в логах такая ошибка: Executing deploy plan failed to watch "ns:my-project/Ingress...
Konstantin Moiseev
4
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
8
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Народ всем привет Подскажите, как включить самописные dll библиотеки в итоговую сборку Сейчас при запуске dev сервера локально формируется папка build, из которой запускается...
Андрей
4
Доброе утро! Не совсем понятно как установить счетчик яндекс метрики на сайт. И потом ещё цели проставить?
Евгения
18
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Гуру, подскажите, меня уже критиковали за неумением, но и в инете я решения не нашел, тем более в доках абракадабры. В 12.1 студии появился новый тип TSQLTimeStampOffset , ест...
Delphi Photo
10
Карта сайта