如何从字符串为唯一索引数据库列创建哈希?

时间:2018-04-25 11:30:02

标签: java mysql sql

我想从字符串连接值创建哈希。生成的哈希稍后应该用作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。

1 个答案:

答案 0 :(得分:0)

我建议使用SHA256或MD5。每次实例化时,String.hashCode()都会改变。