我必须抓取超过200万个网址并收集他们的元关键字。 然后,我需要存储每个唯一关键字,并通过数据库跟踪哪个关键字与/显示链接到其他关键字。
我正在努力解决使用DB的问题 - 标准RDBM似乎对这项任务非常密集 - 我的直觉告诉我MongoDB解决方案可能就是这样......但我对它很陌生。
向所有有经验的建议开放。
答案 0 :(得分:2)
这几乎是Cassandra的理想用例。
通过哪些关键字在其中显示的索引URL与Cassandra最初在Facebook上设计的内容非常相似:收件箱搜索。使用宽行格式,其中行键是关键字,每列是URL,这对于将关键字映射到URL非常有效。要获取URL到关键字的反向映射,请将URL用作行键,每个关键字使用一列。
要跟踪关键字之间的一阶关系,您可以为每个关键字使用一行,并且该行中的每一列可以是在同一网址上找到的另一个关键字。如果要存储更多信息,例如两个关键字一起显示的次数,请为每个列值使用Cassandra's built-in distributed counters之一。它们旨在处理大量增量,并且可以拥有数百万个活跃的独特计数器。
听起来这个数据集可能变得非常大。如果是这样,你应该认真考虑用Cassandra代替MongoDB。蒙戈根本不处理(由于其对MMAP依赖)比存储器在所有更大很好的数据集,而卡桑德拉设计为具有非常强调有效地写入和大于存储器的数据集读取。
答案 1 :(得分:1)
这在MongoDB中可以很好地运行。您可以为每个URL创建一个文档。在该文档中有一个列出所用关键字的数组对象。该数组的索引,以便您可以快速找到任何提及任何特定关键字的URL。
使用Map-Reduce总结:使用映射每个URL发出的每2克(或n-gram)关键字(按字母顺序排序),然后使用reduce来计算唯一组合。将结果转储到新集合中并按频率排序。