当前位置: 代码迷 >> 高性能数据库开发 >> 想实现一个存储海量URL的地址库, 用什么工具或技术?解决办法
  详细解决方案

想实现一个存储海量URL的地址库, 用什么工具或技术?解决办法

热度:4166   发布时间:2013-02-26 00:00:00.0
想实现一个存储海量URL的地址库, 用什么工具或技术?
是一个URL地址前缀库,里面的记录既有URL地址前缀(不是一个完整的地址,而是path的前面几个step),也有完整的URL地址,用户查询时不是准确查找某个记录,而是做最大匹配,例如,假设有下面的记录:

1,http://www.foo.com
2, http://www.foo.com/document
3, http://www.foo.com/document/doc1
4, http://www.foo.com/document/doc1/title
 
现在查找 http://www.foo.com/document/doc1/chapter1,我希望能够获得匹配最长的那个,就是第三个。

我大概看了一下bloomfilter和berkeley db的介绍,好像没有说做相似匹配,难道需要做底层编程?

有没有现成的开源免费的工具?有没有用trie实现的?

------解决方案--------------------------------------------------------
呵呵,楼主的需求很像linux里的路径搜索,可以考虑用目录项对象的概念,即: 以/来切割你的url,每部分做为一个目录向对象,保存时以第一个目录项对象,即:www.foo.com,做hash算法,后面再建立一个树形结构

搜索的时候,可以将要搜索的的url以/切割,一个一个对象的搜索匹配
这样可以满足高性能的查找

想简单的话,直接用perl就好了啊,散列里再包含散列,搜索的时候一级一级找就好了
------解决方案--------------------------------------------------------
如果打算用db的话,也是可以做的

还是以/分割,分割后的每一个部分都当作一个节点存在db里

www.foo.com 它的符节点是1 它的父节点是0
document 它的符节点是2 它的父节点是1
doc1 它的符节点是3 它的父节点是2
title 它的符节点是4 它的父节点是3

匹配的时候,将要匹配的url也以/切割,切割好之后,一个一个搜索就好了
  相关解决方案