PHP程序 用随机7位数字当用户名 批量生成百个账号 确保与数据库中不重复,有什么好的思路

目前的做法是三步骤1.系统生成随机100个随机数,并拼成sql语句2.数据库查询查询这100个随机数其中有几个是已存在的,把存在的过滤掉过滤后缺的就循环第1步,直至有10... 目前的做法是三步骤
1.系统生成随机100个随机数,并拼成sql语句
2.数据库查询 查询这100个随机数其中有几个是已存在的,把存在的过滤掉 过滤后缺的就循环第1步,直至有100个数据库里不存在的
3.插入数据表
============================================
目前这个做法,刚开始做的时候速度很快 数据库查询频率也很低
但是现在数据库累积达到10万用户了,查询起来却超级慢
按道理7位随机数字(首位不为0) 最多能生成900万条数据了 目前只是10万条,应该遇到重复的情况很少,但是目前却变得超级卡,接近死循环的那种,怎么想都觉得不应该
有没有其他什么办法可以优化这个
无限的查库 生成 查库 生成 数据库是受不了 有想过配合memcache 又担心数据太占memcache空间 毕竟数据量 日益增长
展开
 我来答
641008175
2017-12-18 · TA获得超过1080个赞
知道小有建树答主
回答量:825
采纳率:86%
帮助的人:491万
展开全部
确保不重复的情况下 给这个键做索引 或者 在匹配步骤上将数据库的所有数值分批次取出存入到缓存中 利用高IO去完成匹配。
另外 关于 7位数字的生成 可以以1000000为基础去自增的形式生成。按照你的随机数理念 越到后面count的效率越低。
更多追问追答
追问
主要是不想连号  像qq注册   都不连号
追答
如果是这样 应该是提前生成这些数据到存储表中 然后随机取用这个数据表中的单个数字串 使用过的标识为1未使用标识0 你现在可以做下排查 将未生成过的数据全部生成出来 然后一次输入到数据库中或者本地缓存中 下次只要去取用即可。我建议你花点时间这样处理掉 不然你后续网站的运行将会是在转圈圈中度过
aelfabct
2017-12-18 · TA获得超过4569个赞
知道小有建树答主
回答量:2168
采纳率:60%
帮助的人:457万
展开全部
要确保不重复,只需要和 时间挂钩,每一秒生成一个时间比如181642,在时间后面挂随机数
追问
关键是我的用户名不能太长呢     7位纯数字  怎么与时间挂钩,而且我是批量生成账号  也就是1秒内要100个账号
=======================
你就这样想 例如qq注册 初期 注册的qq号码肯定不是自动增长的 注册的时候不会出现连码,而且肯定也得确保数据库中不重复吧 这个思路也很值得思考
追答
这个就是需要查库的,你设置用户名从  00 00 00 1 开始注册,到99 99 99 9完毕,你每一个name前面加一个ID嘛,ID又不会被7位数限制,可以20位数,这不就可以用时间戳和随机数了?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
锅巴历史
2017-12-18
知道答主
回答量:7
采纳率:0%
帮助的人:2.1万
展开全部
看生成的量有啥要求没有了,可以用时间戳+随机数
追问
7位数字      不连号     没有其他要求       而且是批量生成100个
追答
有个取巧的方法,id肯定是唯一的,你生成随机数直接插入数据,不成功就是有重复,重新生成,循环插入一百条数据,这样省去一些时间,对数据压力也不是太大
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式