У нас есть внешняя служба, которая постоянно отправляет нам данные.Для простоты предположим, что эти данные имеют три строки в виде табуляции.
datapointA datapointB datapointC
Эти данные принимаются одним из наших серверов, а затем направляются в процессор обработки, где с этим делается что-то значимоенабор данных.
Одно из требований механизма обработки состоит в том, что дублирующие результаты не будут обрабатываться средством обработки.Так, например, в 1-й день обработчик получил A B C
, а в 243-й день тот же A B C
был получен сервером.В этой конкретной ситуации обработчик выдаст предупреждение «запись уже обработана» и не обработает эту конкретную запись.
Может быть несколько способов решения этой проблемы:
Сохраните входящие данные в HashSet в памяти, а установленное исключение укажет статус обработки конкретной записи.Проблемы возникнут, когда у нас будет запущен этот сервис с нулевым временем простоя и, в зависимости от объема данных, этот сбор может превысить границы памяти.Кроме того, в случае системных сбоев эти данные должны быть сохранены в каком-либо месте.
Сохраните входящие данные в базе данных, и следующий набор данных будет обрабатываться только в том случае, если данные неприсутствует в базе данных.Это
помогает с долговечностью истории в случае некоторой катастрофы, но есть издержки на поддержание правильных индексов и агрессивного шардинга
в случае проблем, связанных с производительностью.
.... или какой-то другой метод
Может ли кто-нибудь указать некоторые тематические исследования или установленные модели или практики для решения этой конкретной проблемы?
Спасибо