2017-01-13 10 views
0

Я использую hbase для дедуплирования потока большого объема. Я думал, что он работает хорошо, используя уникальный идентификатор из каждого сообщения в потоке для использования в качестве ключа строки. Но конечный пользователь все еще видит дубликаты данных из создаваемого потока. Единственная возможная причина - одновременное использование дублированных сообщений.дедупликация против hbase с данными большого объема

У меня около 50 потоков, потребляющих одну и ту же очередь, которая заполняется из потока отдельным процессом. Есть ли способ гарантировать, что это не происходит, или более лучший способ выполнить надлежащую дедукцию? Процесс включает выполнение GET перед вставкой новой записи.

ответ

0

Я вижу некоторые проблемы с вашим подходом. Если вы читаете поток с 50 потоками, нет способа гарантировать, что запись в HBase отсутствует. Существует вероятность того, что 2 потока будут считывать дублированное сообщение с одинаковым идентификатором, проверить HBase, решить, что запись отсутствует и передать сообщения дальше.

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

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