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

gwbalxhn  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(406)

我想从一个串接的值创建一个散列。产生的散列稍后应用作 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 ...
我想指定22列中的20列,这些列应该表示 unique index . 如果一行被加载到表中,并且唯一索引已经存在,那么应该跳过该行。
所以我可能得用 IGNORE 关键字输入 LOAD DATA .
但是在20列上创建一个唯一的索引可能会减慢插入的速度。因为我只需要忽略“重复”行的索引,所以我想我也可以创建一些额外的索引 hash 我直接写入csv文件的列。
问题:
1) 一个哈希列是唯一id更好的选择,还是我应该创建超过20个数据库列的唯一id?
2) 我怎样才能创造出独一无二的 hash 在一个由这20列串联起来的大字符串上?
旁注:当然我需要一个安全的散列,但是速度也很重要,因为我可能还需要在尽可能短的时间内导入几百GB。

0pizxfdo

0pizxfdo1#

我建议使用sha256或md5。hashcode()将在每次示例化时更改。

相关问题