之前有介绍过大规模去重算法的设计,可惜没有办法付诸实现,主要是因为没有相应的应用场景,还是停留在纸上谈兵的阶段!这里简单的介绍下新闻去重算法的实现,客户端在基于yahoo shingle算法的基础上进行了封装,便于采用服务的方式来进行调用,这样比较容易进行复用和提高扩展性,利用thrift来进行跨语言的通信,客户端采用Java实现,原有的设计是服务端既提供计算的接口,即根据文本计算它的shingles,又可以在后端提供去重的服务,即根据文档内容查看这个文档和哪些文档内容重复。客户端可以只调用计算shingle的接口在客户端做去重的服务,thrift的接口定义如下:
在原有代码的基础上,增加了两个函数,分别用来以字符串和长整形数组来返回文档的shingles,代码如下: