春风如贵客,一到便繁华。各位看官先赞再看,养成好习惯(●´∀`●)
前言:
假设,有一张100W规模,并且活跃度很高的数据库表,需要从数据库中随机读取20条数据,并且对性能要求很高的要求。
本文不涉及任何传统的算法结构,仅从解决实际问题出发,代码仅作实例!!!
方案一:
使用数据库随机取20条,代码如下:
SELECT
*
FROM
t_user u
WHERE
1 = 1
ORDER BY RAND()
LIMIT 20
优点:方便,逻辑简单,代码简洁,不引入新的中间件和风险,方便快速开发。
缺点:数据量大之后,存在sql优化的必要。大量请求的话,会造成数据库链接过多
方案二:
随机读取 数据库主键
使用JAVA代码,随机生成30个id,按照大小排列(随机生成30个,取前20个是比较保险的做法)
SELECT
*
FROM
t_user u
WHERE
1 = 1
AND u.user_id IN
(
-- 随机的id
)
LIMIT 20
优点:逻辑比较简单,代码简洁,不引入新的中间件和风险,方便快速开发。
缺点:需要提前设置好该表的

针对100W规模高活跃数据库表,文章提出了从直接SQL随机取数据到利用Redis缓存的多个解决方案。方案三是在Redis中存储200条数据,按需随机选取;方案四则涉及数据分片和预热到Redis,提高效率。文章强调逻辑简洁和避免引入新风险,同时讨论了各方案的优缺点。
最低0.47元/天 解锁文章
941

被折叠的 条评论
为什么被折叠?



