которых 2 id, один внешний, другой внутренний. Сама сущность хранится в postgresql, в кликхаусе держим опредленные метрики для сущностей. В кликхаус данные поступают через кафку с внешним ID, а записать в таблицу нужно с внутренним. Сейчас использую в матвьюхе inner join с postgres таблицей через коннектор clickhouse. Есть так же идея, чтобы избежать join в mv подключить словарь с источником postgres. Но для того, чтобы не потерять метрики, необходимо будет выставить минимальный период обновления - 1с. Сущностей порядка 3-4кк. У меня нет уверенности, что подход со словарем будет лучше. Может кто немного помочь разобраться с этим вопросом? Какой подход будет более правильным, или вообще оба из этих подходов не жизнеспособны?
в кафку положить нужные данные не вариант вообще?
Эх, если бы так легко было. Возможность есть, конечно, но из разряда нежелательно, за сбор статистики отвечает отдельный сервис, у которого как раз есть информация только о внешнем ID
и почему он внутренний ID не может получить?
можно словарь layout(cache(...)) сделать https://clickhouse.com/docs/en/sql-reference/dictionaries#cache и source(postgresql(...)) пожирнее чтобы за раз больше элементов кешировал... если словарь небольшой то обновления будут подтягиваться с каждым cache miss но это будет работать только если соотношение внутренний id -> внешний ID не меняются со временем
Может, я пытаюсь найти более просто путь решения. Сервис крутится в кластере temporal, имеет полностью асинхронную модель взаимодействия, чтобы ему это сделать, ему нужно положить ивент в очередь, сервис, отвечающий за взаимодействие с другими сервисами должен обработать этот ивент и вернуть ему. За счет асинхронности время такого запроса недетерминировано, чего тоже хотелось бы избежать. Я, конечно, сейчас более детально прорабатываю этот вопрос, но попытки хотелось бы этого избежать.
Вот это звучит хорошо, спасибо большое)
Вот сабж
Обсуждают сегодня