目前的做法:
在数据库中建一张简单的表,然后把要去重的信息,建为主键。
验证方法,往该表Insert,如果成功,则说明不重复。反之,重复。需求:
1)数据量很大(所以,这些东西不能放在内存中,需要外部介质持久)
2)只要对当天的数据去重(所以,该表每天晚上定时清空)现求更高效的去重方式。其性能希望和消息队列的收发速度对等。
在数据库中建一张简单的表,然后把要去重的信息,建为主键。
验证方法,往该表Insert,如果成功,则说明不重复。反之,重复。需求:
1)数据量很大(所以,这些东西不能放在内存中,需要外部介质持久)
2)只要对当天的数据去重(所以,该表每天晚上定时清空)现求更高效的去重方式。其性能希望和消息队列的收发速度对等。
验证方法,往该表Insert,如果成功,则说明不重复。反之,重复。"目前采用的这种方法效率极其低下,利用SQL内部的主键冲突机制,等待SQL事务处理时抛错,每一条抛一次... ...既然要求要"其性能希望和消息队列的收发速度对等",那么你就不应该在插入数据的时候去重,应该把去重独立出来,用其他线程或者其他进程去批量去做去重.在高效的算法或者方式被调用成千上万次也会变得低效.
只是去重的话复杂度是O(n),如果用B+或者其他排序的方式复杂度是O(nlogn),必须用Hash