Javascript 在使用MySQL和sequelize创建新用户之前,生成自定义唯一id并检查它是否不存在

Javascript 在使用MySQL和sequelize创建新用户之前,生成自定义唯一id并检查它是否不存在,javascript,mysql,node.js,sequelize.js,Javascript,Mysql,Node.js,Sequelize.js,我试图为添加到MySQL数据库的每个新用户创建一个8个字符长的唯一id。我正在使用Sequelize和express创建用户。我创建了自己的自定义函数:idGen(),它只返回一个随机的8字符字符串。使用express router,我可以处理/验证用于创建新用户的所有表单数据。我遇到的问题是,当我生成一个新ID时,我要检查以确保该ID在数据库中不存在。到目前为止,我有以下解决方案: Users.findAll().then(数据=>{ tableData=data.map(id=>id.ge

我试图为添加到MySQL数据库的每个新用户创建一个8个字符长的唯一id。我正在使用Sequelize和express创建用户。我创建了自己的自定义函数:idGen(),它只返回一个随机的8字符字符串。使用express router,我可以处理/验证用于创建新用户的所有表单数据。我遇到的问题是,当我生成一个新ID时,我要检查以确保该ID在数据库中不存在。到目前为止,我有以下解决方案:

Users.findAll().then(数据=>{
tableData=data.map(id=>id.get('id');
while(tableData.includes(uid)){
试一试{
uid=idGen(8);
}捕获(错误){
返回res.status(400.json)(错误)
}
}
}).然后(()=>{
用户。创建({
id:uid,
名称:req.body.name,
电子邮件:req.body.email
})
}).then(user=>res.json(user))
  • 为什么不立即从数据库中进行选择,而不是在Javascript中查找所有内容并进行过滤

  • 我能想到的另一种方法是使用像布鲁姆或布谷鸟这样的过滤器。假阳性率应该很低

  • 将ID加载到redis,可能使用redis bloom()

  • 使用bloom筛选器检查新生成的id
  • 如果存在=>重新生成id。如果不存在,则插入。可能会有假阳性,但发病率很低,你可以照样处理
优点: -无需每次都再次检查数据库。 -使用bloom filter进行检查可能比db快得多。 -缩放redis比db更容易

缺点: -需要redis和redis bloom。

  • 为什么不立即从数据库中进行选择,而不是在Javascript中查找所有内容并进行过滤

  • 我能想到的另一种方法是使用像布鲁姆或布谷鸟这样的过滤器。假阳性率应该很低

  • 将ID加载到redis,可能使用redis bloom()

  • 使用bloom筛选器检查新生成的id
  • 如果存在=>重新生成id。如果不存在,则插入。可能会有假阳性,但发病率很低,你可以照样处理
优点: -无需每次都再次检查数据库。 -使用bloom filter进行检查可能比db快得多。 -缩放redis比db更容易

缺点: -需要redis和redis bloom