gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:28:33 24 4
gpt4 key购买 nike

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

  Users.findAll().then( data => {
tableData = data.map(id => id.get('id'));
while( tableData.includes(uid) ){
try {
uid = idGen(8);
} catch( error ){
return res.status(400).json( error )
}
}
}).then( () => {
Users.create({
id: uid,
name: req.body.name,
email: req.body.email
})
}).then( user => res.json(user) );

这段代码实际上正在工作并将新用户保存在数据库中,但我几乎可以肯定这不是最好/正确的方法。有谁能够为我指明正确的方向,并向我展示一种更好/正确的方法来检查随机生成的 ID,并在添加新用户之前在循环中调用 idGen(如果需要)?

非常感谢!

最佳答案

  • 与其在 Javascript 中查找全部然后进行过滤,为什么不立即从数据库中进行选择?

  • 我能想到的另一种方法是使用bloom或cuckoo之类的过滤器。误报率应该很低。

  • 将 ID 加载到 Redis,可能使用 Redis Blum ( https://github.com/RedisBloom/RedisBloom )

  • 使用布隆过滤器检查新生成的 ID。
  • 如果存在=>重新生成id。如果没有,请插入。可能会有误报,但发生率很低,您可以同样处理。

优点:- 无需每次都再次检查数据库。- 使用布隆过滤器检查可能比数据库快得多。- 扩展 redis 比 db 更容易。

缺点:- 需要redis和redis bloom。

关于javascript - 生成自定义唯一 id 并在使用 MySQL 创建新用户和 Sequelize 之前检查它是否不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58040788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com