背景:最初是用redis数据库中的set来做去重集合的,但是因为url的量级在亿以上,redis内存飙升到了22G,服务器无法承受。于是将集合都搬到了mongodb中
解决方法:
1. 通过脚本对redis中的集合进行迁移,
<1 对url进行哈希,缩短长度,节省空间。
<2 在插入数据到mongo的时候, 要写好索引 (为了加快遍历速度,因为每访问一次url, 就需要遍历一遍去重表来比对)
url_hash = computeMD5hash(self.main_url)
obj = {"urlhash": url_hash}
is_exist = self.fingure.find_one(obj)
if not is_exist:
self.fingure.create_index("urlhash")
self.reddb.lpush(self.queue, self.main_url)
#self.reddb.sadd(self.fingure, self.main_url)
self.fingure.insert_one(obj)
第一行 就是一个 hash加密方法, 可以自己写。 比较重要的就是create_index方法,用来建立索引
2. 限制mongo的内存,这也是我们的初衷。具体方法: www.cnblogs.com/luo-mao/p/5…
大家有需要或者有啥不懂的,可以留言。。。 写来基本是都是给以后都自己看的,。所以写的比较马虎。