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