This topic created in 2183 days ago, the information mentioned may be changed or developed.
我的需求:
将一些 (5000 个以内) 较短 (长度 20 以内) 的字符串映射成整数,转换后的整数将用作数据库中的 id.
我这个数据量应该算小的吧,显然用 md5 太浪费了,但是 hash 算法有好多种,我不知道按照我的需求该选择哪种算法?
要是 npm 上有现成的库就更好了。
12 replies • 2020-06-15 22:14:43 +08:00
 |
|
1
imn1 Jun 15, 2020
CRC32 啰,而且本身就是整数,短一些
|
 |
|
2
binux Jun 15, 2020 via Android
md5 截短呗,反正除非你特别设计,该碰撞还是要碰撞的,用什么都差不多。
|
 |
|
4
LennieChoi Jun 15, 2020
不就是要生成个唯一 id,用作表的索引么,直接附上去一个 uuid
|
 |
|
5
Mithril Jun 15, 2020
随便找个算法就行,反正该冲突就还是要冲突。 怕冲突就查重然后 UUID
|
 |
|
6
flyingghost Jun 15, 2020
既然用作 id,那肯定不希望冲突。 如果源字符串集固定,不会有新的不确定的字符串加入,那么完美哈希可能是你想要的东西。
如果源字符串集不固定,可以考虑某种可逆的映射,比如各种编码算法 /加密算法。
如果只是为了查找,数据库里 5000 条记录有索引的情况下怎么查差别都不会太大。。。说不定大头在请求吧。
|
 |
|
7
realpg Jun 15, 2020
5000……自制映射表吧…… id 自增 id,str insert into hashes str values ('xxxx'); 然后需要数字时候去 select 一下
|
 |
|
8
35aZ4P8mT576683q Jun 15, 2020 via Android
我记着当初上学老师为了说明哈希的概念用的是一种质数算法,然后笑了起来说,大概这就是计算机科学吧
|
 |
|
11
xiangyuecn Jun 15, 2020
查表, 数据量不大,完全放一个 js 里面也放得下: { 1:"abc" 2:"def" }
因为数据量不大,再放一个反查,同塞一个 js 里面 { "abc":1 "def":2 }
|