larbin源码分析(五) hashDup类对象的实现
一 类的成员变量及主要功能
(1) 成员变量
ssize_t size; //表示hash 表的大小
char *table; //表示hash存储区域
char *file; //表示存储的文件,内存中的hash表可以保存在外部磁盘中
(2) 主要功能
该类和hashTable代码比较相似,但是hashTable处理的是url去重,而hashDup处理的是网页内容的去重,
不会对完全相同的网页进行爬取,但是不保证相似网页的排重。改进的一个方向。
二 具体的成员函数
构造函数
hashDup (ssize_t size, char *init, bool scratch); size表示hash表的大小,单位为bit。
init参数表示 hash表存储在磁盘的文件名称。scratch若为true表示重新构建hash表,
若为false,则表示需要从磁盘文件中读取hash表。
~hashDup()函数 具体操作为 情况table内存。
下面主要讲解网页内容去重的函数
bool hashDup::testSet (char *doc) { //doc应该为网页的具体内容 ,依次顺序遍历网页内容,对其中A与z之间的字符进行验证
unsigned int code = 0;
char c;
for (uint i=0; (c=doc[i])!=0; i++) {
if (c>'A' && c<'z')
code = (code*23 + c) % size;
}
unsigned int pos = code / 8; //具体的判断函数,若是执行插入返回true,否则返回false
unsigned int bits = 1 << (code % 8);
int res = table[pos] & bits;
table[pos] |= bits;
return !res;
}
save()函数
主要的作用就是,将table区域中的数据,存储在外部磁盘中,进行持久化操作。
三 总结
该类为网页内容去重hash函数的具体实现。