我想从字符串连接值创建哈希。生成的哈希稍后应该用作unique index
数据库中的mysql
。
问题:哪种类型的哈希最适合用作数据库中的唯一索引?当然,对于相同的输入,散列必须始终相同。
可能有几种选择:
string.hashCode();
UUID.nameUUIDFromBytes(string.getBytes());
org.apache.commons.codec.digest.DigestUtils.sha256Hex(string);
背景:
我想将100GB + csv文件导入mysql
数据库表。我控制着csv文件生成。该文件通过LOAD DATA LOCAL INFILE INTO TABLE
...
我想指定应该代表unique index
的22列中的20列。如果将一行加载到表中并且唯一索引已经存在,则应该只跳过该行。
因此,我可能必须使用IGNORE
中的LOAD DATA
关键字。
但是可能在20列上创建一个唯一索引会减慢插入速度。由于我只需要忽略“重复”行的索引,我想我也可以创建一些我直接写入csv文件的附加hash
列。
问题:
1)对于unique-id,单个哈希列是否更好?或者我应该在20个数据库列中创建唯一ID吗?
2)我怎样才能最好地在连接这20列的大型字符串上创建唯一的hash
?
旁注:当然我需要一个安全散列,但速度也很重要,因为我可能还需要在最短的时间内导入几百GB。
答案 0 :(得分:0)
我建议使用SHA256或MD5。每次实例化时,String.hashCode()都会改变。