【发布时间】:2016-09-15 18:13:28
【问题描述】:
我有一个用例,我需要生成长度为 25 的字母数字大写字符串,因此可能的唯一组合总数非常高:
36 pow (25) = 808281277464764060643139600456536293376
字符串将存储在MySql 数据库表中,unique 设置为true
我正在使用以下代码来生成字符串:
const Chance = require('chance');
const chance = new Chance(Date.now() + Math.random());
let randomStr = chance.string({length: 25,
pool: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'});
console.log(randomStr);
Node.js 可以在集群模式下运行,因此不同请求的时间戳值可以相同,所以我还添加了Math.random()。这是否足以确保MySql 唯一约束不会被随机字符串违反。
【问题讨论】:
-
您想要一个普遍唯一且主要由字母数字组成的字符串?这听起来很像a UUID,您的数据库可能已经支持它。
-
@ssube uuid 是 128 位
-
是的,UUID 是 128 位。这比您的 25 个字符的标识符要小得多,同时仍然是普遍唯一的并且在大多数数据库中进行了优化以实现快速查找。
-
@ssube 我没有提到我将使用它进行查找并希望提高查找性能
-
性能与它无关。数据库是唯一能够保证一个值是唯一的参与者,所以它应该是产生这些值的那个。大多数数据库都有出色的 UUID 支持,其中恰好包括性能优化。
标签: javascript node.js encryption