用于唯一存储链接的数据结构

时间:2013-08-07 11:22:39

标签: data-structures language-agnostic

作为构建网络抓取工具的一部分,我已经提取了抓取工具访问的链接。

哪种数据结构适合存储具有唯一标识符的每个URL,因此我在访问页面之前可以测试该页面是否已被访问过。

2 个答案:

答案 0 :(得分:1)

方法:考虑unique-identifier是page / url标题或从url计算的一些唯一哈希值,例如:

  

<强> URL:   http://stackoverflow.com / questions / 18102087 / data-structure-for-uniqurly-stored-links

     

Id: 18102087 OR UNIQUE-HASH(MD5等)

     

根: http://stackoverflow.com

     

其他网址:Root / questions / tagged / java,Root / questions / 18102124 / mysql-database-using-matlab

数据结构:

Map [ROOT-URL, Map[ID, URL]]

获取/阅读

  • 给定URL,提取ROOT和ID(字符串解析/正则表达式函数)
  • 在返回的地图中查找ROOT和LOOKUP ID

获取ROOT的所有网址

  • 给定URL,提取ROOT和ID
  • 查询ROOT

<强>益处:

  • 对根URL或基本URL进行分组,可用于各种目的(比如修复深层结构)
  • Lessen Hash colisions

<强>缺点:

  • 内存,保持额外的ROOT字符串(比如数百万次)。一种Map方法只有ID和网址

  • 与单一Map方法相比,有两次查找而不是一次查找,但这应该没问题,因为HashMap

答案 1 :(得分:0)

可能HashSet是要走的路。在这种情况下,每个URL(或字符串)是唯一标识符。您还可以实现IEqualityComparer以进行自定义比较。