Как подождать, пока данные запишутся в ETL перед отдачей клиенту?
Всем привет.
Вопрос, который мучает меня последнее время -- как правильно ожидать данные на стороне websocket.
Оповещения о новых событиях приходят в момент добавления данных, через ZMQ отправляю на WS строку с названием измененного поля.
ETL система довольно большая(костыльная) и перед добавлением в базу может пройти некоторое время. Иногда пересчитываются показатели большие и приходится ждать десятки минут. Иногда просто данных приходит мало и пока не набирается достаточно большой пакет, в clickhouse ничего просто не попадает.
Сейчас ставлю искусственное ожидание - записываю, как долго ждал по этому полю и беру среднее значение.
+ содержу хеш таблицу по подпискам ws клиентов с хеш суммами прошлых результатов.
Но это все выглядит довольно кастыльно и работает не очень, часто бывает провал по данным по какой-то причине.
Как вы реализовали это у себя в проектах?
На самом деле не очень понятно что у вас происходит но хочется вам сказать несколько фактов:
- событийная система предполагает то что пользователю синхронный запрос отдает только идентификатор задания и сообщение о том что он в процессе обработки
- при окончании обработки либо обратно через вебсокет, либо же через short-pooling/signal-r вы получаете изменение статуса задания
- что касается clickhouse то у них заявлена eventual consistency, поэтому батчи слать имеет смысл только если у вас оптимизация стоимости в облаке