我想从一个串接的值创建一个散列。产生的散列稍后应用作 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。
1条答案
按热度按时间0pizxfdo1#
我建议使用sha256或md5。hashcode()将在每次示例化时更改。