我正在使用hbase重复数据删除高容量流。我认为使用流中每条消息的唯一标识符作为行键可以很好地工作。但最终用户仍然看到我创建的输出流中的重复数据。唯一可能的原因是同时消耗了重复消息。
我有大约50个线程使用相同的队列,该队列由一个单独的进程从流中填充。有没有办法确保不会发生这种情况或更好的方法来实现正确的重复数据删除?该过程涉及在插入新记录之前进行GET。
答案 0 :(得分:0)
我发现你的方法存在一些问题。如果您使用50个线程读取流,则无法确保HBase中不存在条目。 2个线程有可能读取具有相同id的重复消息,检查HBase,确定缺少该条目并进一步传递消息。
并发环境中的重复检查只能用于某种互斥体,性能取决于复制频率,消息消耗速度和其他因素。
我建议从单个线程使用者开始,只有在对性能不满意时才尝试并发解决方案。对于单个线程,您可以使用哈希表进行重复数据删除。当然它会随着时间的推移而增长,因此您将不得不使用将在合理的时间内到期的缓存,具体取决于业务逻辑。