问题:
   现有三千万url,放在一个文本文件中大小大概2G,最长的url有几千个字节,请问如果要检索几亿次,如何组织,使用什么技术,才能超快的判断一个给定url是否在这三千万url的集合中?
备注:机器内存< 2G

解决方案 »

  1.   

    物理拆分, mwrk ,分别是什么意思啊?
    目录加索引我也想过,还考虑过用hash映射,但是你总得读一部分数据到内存吧,而我们查找时,url在那个目录里面都是随机的,如果频繁的把数据从内存里调入调出是不是很影响速度,比较得查上亿次啊
      

  2.   

    我们做的东西,一般不用数据库,好像用数据库管理一般比自己组织文件来管理要慢10倍以上,而且导入到数据库后,数据的存储空间会扩大很多倍,不知道是导入出了什么问题,对数据库不是太熟。
    现在主要问题不在于数据结构,不过大家建议的数据结构都挺好,而是数据量太大,不能一次性导入内存,所以如果频繁的导入导出内存会非常影响速度,即使模拟操作系统里的内存管理机制还是很慢,因为url是随机的。
      

  3.   

    导入库中, 用sql 语句查询, 方便.
      

  4.   

    这个存放url文件的内容是否可以由你控制?
    如果可以,可以考虑把url与在文件中的行数联系起来.
    比如:每个urlString肯定对应一个hashCode,这个hashCode肯定对应一个整数,比如为3000.那么就把这个url放到这个文件的第3000行中.每次存取的时候,只需要根据hashcode直接取第3000行的内容就行了,取出来比较.如果有hash冲突,可以用hash算法处理这个问题.
      

  5.   

    laughsmile(海边的星空), 你的方法好像可行,不过我还想问一下,随机访问一个文件得某一行慢不?毕竟文件里有3000多万行,
    另外,现在我门的url已经在一个文件中了,怎么能读出来后按hashCode的行存储呢,因为url的长度变化很大。
    非常感谢大家的回复!
      

  6.   

    多种方法结合起来
    1
    利用一种规则把所有url分成1000类,分别放在1000文件里
    规则可以自己设计,比如取后5个字符asc码相加,再取最后四位,决定此url分配在哪个文件2
    利用hash表确定某个url在文件的行数
      

  7.   

    不知道Lucene是否可以满足你的要求呢?
      

  8.   

    Blue_Sea_2001(蓝色大海) 
    2
    利用hash表确定某个url在文件的行数,
    2这个不知道该如何实现?现在所有url都在一个文件中,分类容易, 但把url分类后如何按HashCode存放在指定文件的HashCode行啊?你总不能没一行都指定一样的长度吧,这样会非常浪费空间。
      

  9.   

    方法1:
    把内容按照规则分布到多个数据库表中,表名对应一个hashcode范围,根据待查询的url的hashcode的范围就可以知道查询哪一个表了.如果设置了索引,应该很快就可以查到
    方法2:
    把内容按照规则分布到多个Xml中,文件名对应一个hashcode范围,根据待查询的url的hashcode的范围就可以知道查询哪一个Xml了,然后使用XQuery来进行查询