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