唔明點解唔 query db, 撞左再 gen, 簡單方便
因為條 key 實際要用, 最終點都要 query db
7M log base 2 ~ 22.x, btree index 足夠,
以宜家既 hw, 應該係 0.x ms 內既事, 再要快可以用 hash index
7M / 36 ^ 5, clash probability 係 ~11.6%,
7M / 36 ^ 6, ~0.3%,
最多都係 query 兩次左右
===
不過玩下提下個土炮方法, 無實作過:
d = digit, [a-z0-9], 36
l = character len, 5
p = partition, 1024
t = d ^ l
s = sequence number
開個 char array 放 possible chars 再 shuffle
t/p * (s % p) + floor(s/p), 求到新 number, n
將 n 以 base 36 convert 做 int array, 然後 map 返 chars array, 得到一條 key
另外開個 pool, 假設 128, 重複直至填滿 (pool size 決定 randomness)
每次攞 key 就係 pool 度 random 抽一條, 然後 refill
因為實際上都係依 sequence number gen key, 所以唔會有踫撞
加上做左少少 obfuscation, 要破解都要花 D 功夫搵 pattern
而且最後一步係純 random, 搵到 pattern 都係要撞 |