Дубликаты из потока - PullRequest
       16

Дубликаты из потока

0 голосов
/ 27 марта 2012

У нас есть внешняя служба, которая постоянно отправляет нам данные.Для простоты предположим, что эти данные имеют три строки в виде табуляции.

datapointA datapointB datapointC

Эти данные принимаются одним из наших серверов, а затем направляются в процессор обработки, где с этим делается что-то значимоенабор данных.

Одно из требований механизма обработки состоит в том, что дублирующие результаты не будут обрабатываться средством обработки.Так, например, в 1-й день обработчик получил A B C, а в 243-й день тот же A B C был получен сервером.В этой конкретной ситуации обработчик выдаст предупреждение «запись уже обработана» и не обработает эту конкретную запись.

Может быть несколько способов решения этой проблемы:

  • Сохраните входящие данные в HashSet в памяти, а установленное исключение укажет статус обработки конкретной записи.Проблемы возникнут, когда у нас будет запущен этот сервис с нулевым временем простоя и, в зависимости от объема данных, этот сбор может превысить границы памяти.Кроме того, в случае системных сбоев эти данные должны быть сохранены в каком-либо месте.

  • Сохраните входящие данные в базе данных, и следующий набор данных будет обрабатываться только в том случае, если данные неприсутствует в базе данных.Это
    помогает с долговечностью истории в случае некоторой катастрофы, но есть издержки на поддержание правильных индексов и агрессивного шардинга
    в случае проблем, связанных с производительностью.

.... или какой-то другой метод

Может ли кто-нибудь указать некоторые тематические исследования или установленные модели или практики для решения этой конкретной проблемы?

Спасибо

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Вы можете создать хеш данных и сохранить его в резервном хранилище, которое будет меньше фактических данных (при условии, что ваши данные не меньше хеша)

1 голос
/ 27 марта 2012

вам нужен какой-то резервный магазин, для настойчивости, независимо от решения. поэтому независимо от того, сколько работы нужно выполнить. но это не обязательно должна быть база данных sql для чего-то такого простого - альтернатива memcached, которая может сохраняться на диске

в дополнение к этому, вы можете рассмотреть фильтры Блума для уменьшения занимаемой памяти. они могут давать ложные срабатывания, поэтому вам потребуется вернуться ко второму (более медленному, но надежному) слою (который может быть хранилищем дисков).

и, наконец, потребность в идемпотентном поведении действительно распространена в системах обмена сообщениями / на предприятиях, поэтому при поиске, подобном этому появляется больше документов / идей (не уверен, если вы знаете, что "идемпотент" полезный поисковый термин).

...