MySQL错误信息1356
错误:1000 SQLSTATE: HY000 (ER_HASHCHK) 消息:hashchk错误:1001 SQLSTATE: HY000 (ER_NISAMCHK) 消息:isamchk错误:10...
2024.11.15我们在进行平台账号体系设计的时候,遇到这么一个需求:在平台注册的用户ID以n位的数字展现。
乍一看,这个需求很简单,就一句话。但仔细思考后,发现这里面还是有很多地方需要思考的:
用户ID是随机生成还是顺序自增?如果是随机生成的:如何保证每次生成的ID都是唯一的?如果是顺序自增的:是不是会泄露平台用户规模,增加安全隐患?如何保证分布式高并发下的ID顺序自增?如果用户数量达到n位数上限后,如何自动扩展ID?思路首先,先确定ID是自增还是随机,从上面的思考中,可以发现用户ID自增会带来一些安全隐患:如当系统存在某种bug,可以通过用户ID查询用户信息时,就会面临通过遍历用户ID,达到获取平台全量用户信息的隐私泄露问题。另外,自增也会暴露平台用户规模,不利于商业行为。所以,用户ID必须是随机生成。
那么,用户ID随机生成,如何保证每次都是一个唯一值呢?这里有两个思路:
设计一种算法,通过数学运算,以一定的入参,得到一个一一映射的出参,该出参的范围在n为数字的大小范围内。数学表达式为:y = f(x_0,x_1,...,x_m,n)其中,m=入参个数,由m个入参确定唯一性,n=y的范围大小。
借助于工程思想,利用各种中间件实现该需求。如借助与MySQL+Redis。方案针对第一个思路,可以参考唯一随机数映射算法
这里主要展开下使用工程思想,借助MySQL+Redis+定时器的实现方式。
在MySQL里创建一张表t_user_id_pool, 该表中放入所有符合条件的用户id,如000000-999999。
设计定时器逻辑为:每隔1小时,去redis中读取key为id_pool的键,
如果id_pool不存在,则随机地从数据库中读取1000个用户id,以队列的形式存入redis的id_pool里;如果id_pool存在但队列里id数量小于等于200时,从数据库随机获取1000个用户id,push到redis的id_pool里。业务侧生成用户id的时候,从redis的id_pool里pop一个值出来作为用户id。因为redis天然单线程结构,所以不用担心,高并发情况下会获取相同的id。
错误:1000 SQLSTATE: HY000 (ER_HASHCHK) 消息:hashchk错误:1001 SQLSTATE: HY000 (ER_NISAMCHK) 消息:isamchk错误:10...
2024.11.15还有其他关于MySQL内容,可以在本头条号查阅。下面开始本篇——在进行 MySQL 的优化之前必须要了解的就是 MySQL 的查询过程,很多的查询优化工作实际上就是遵循一些原则让 MySQL 的优化器...
2024.11.07安装后MYSQL5后,发现启动出错,有时启动正常,但加接时马上出错。出错代码:1067解决办法如下:删除%windows%/my.ini删除其它地方的my.ini在mysql安装目录下把my-smal...
2024.11.07MySQL 的外键约束注意,MySQL 的 InnoDB 表引擎才支持外键关联,MyISAM 不支持。MySQL 还支持手动打开或关闭外键约束:SET FOREIGN_KEY_CHECKS = 0/1...
2024.11.12注:我的运行环境是widnows xp professional + MySQL5.0 一、创建用户: 命令:CREATE USER ‘username‘@‘host‘ IDENTIFIED BY ‘...
2024.11.14