【发布时间】:2015-01-08 16:08:54
【问题描述】:
这是我正在进行的设置:
[域:id] => [keyword_id,keyword_id2,keyword_id3....] ....
我要做的是针对每个域,找到包含相似关键字的其他相似域。例如,我“测量”域:1 和域:2 之间相似性的方法是将交集(域:1,域:2)除以联合(域:1,域:2)。
问题是我有大约 500 万个域,每个域平均有大约几百个关键字。在嵌套循环中进行这种相似性计算,将每个域与每个其他域进行比较,这在我现在拥有的硬件上需要数年时间。我只针对一个域进行了测试:
keys = redis.keys("domain:*");
foreach(keys as key){
long inter = sinterstore("inter_temp", "domain:1", key);
long union = sunionstore("union_temp", "domain:1", key);
float similarity = inter / union;
if(similarity > 0.1){
similar_domains.add(key);
}
}
...
^ 并为这一个域计算类似的域大约需要 2 分钟。为 500 万个域执行此操作需要数年时间。
那我该怎么办?我每周一次将这个程序转移到最昂贵的 Amazon EC2 实例上一个小时来计算它,并将其发送回我的主机没有问题,但这是否有帮助,还是我只是有太多数据?
【问题讨论】: