我的应用场景是,有程序不断向数据库插入URL,假如该URL已经在数据库存在,则做其他处理。
  
我用java实现的,之前的方法是对URL哈希出一个值存入相应该url的一个字段,然后每次插URL先从这个哈希字段判断有没有该URL,现在发现,这种方法有重复的现象,不同URL哈希值会相同。
  
我是不是应该将数据库的URL字段设置成不可重复属性就可以了,想在java里处理的话,就在catch里做处理?但这样做的话,我担心,将来数据条数达到百万条以上会效率很低,但也只是猜测。
  
请教大家了。
-- 

解决方案 »

  1.   

    查询效率会很低,一般也不建议在字符串字段上建索引你可以尝试分析URL,比如把域名管理起来,通过ID维护,这样java可以缓存域名ID,加上此条件查询可以大大减少检索的记录数。
      

  2.   

    不知道你是否类似这样的HASH取值方法?以下是我的做的:
    public static String calcHashCode(String file) throws ApplicationException { MessageDigest md;
    try {
    md = MessageDigest.getInstance("MD5");
    InputStream fis = new FileInputStream(file); byte[] buffer = new byte[1024];
    int numRead = 0; while ((numRead = fis.read(buffer)) > 0) {
    md.update(buffer, 0, numRead);
    } if (fis != null) {
    fis.close();
    }
    } catch (Exception e) {
    throw new ApplicationException(e.getMessage());
    } String hashCode = toHexString(md.digest());
    return hashCode;
    }
    我想你的本意是不同的URL到数据库是不同HASH值,如果URL相同,再另行处理.根本解决办法是采用一种新的加密算法.
    而你说到采用CATCH处理或在程序做存在性检查解决不了你的根本问题.