检查用户名重复,当数据是海量,怎么保证速度

皇甫君威 发布于 2013/11/11 23:18
阅读 4K+
收藏 16

检查用户名重复

在数据量不大的时候最多就查一下数据库,看看是否存在

但这个数据量大了以后还是简单的查数据库就会非常慢了

像微博这样要检查用户名是否重复的,几乎都是做提交用户名后就能立即得到反馈,很想知道为什么他们检查重复就能做到很高的速度呢?

几大微博都号称有几亿用户的,检查一下重复的用户名还是非常快呀

加载中
0
no_user
no_user
把用户名缓存起来,,,
no_user
no_user
@皇甫君威 在用map集合把用户名作为键直接键是否存在,没实践过,不知道map可以放几亿条数据不。还是多问问吧。
皇甫君威
皇甫君威
这个缓存到内存吗?那怎么查起来速度才快呢?
0
迷路的游侠
迷路的游侠
用户名字段加索引
cxshun
cxshun
上亿条再索引也是没多大用处的,还是老实缓存才是王道。
铂金胖子
铂金胖子
上亿的索引不慢(oracle),mysql不知道。估计是用的缓存,map
此号作废
此号作废
上亿数据加索引会更慢吧
皇甫君威
皇甫君威
人家的上亿条会不断增加吧,索引碎片也会影响性能嘛,但他们的响应都非常快呀
0
no_user
no_user
把用户名按长度分别缓存到对应的map中,等用户提交时判断用户名长度到对应map中去检查是否存在不知道可靠不。当然写入数据再做一次检查很有必要的。
no_user
no_user
回复 @皇甫君威 : 知道分布式吧?你可以使用多个mysql服务器来分别存储一段用户名数据,然后发起并行运算去查询。
皇甫君威
皇甫君威
一般的用户名都是6到20,人们的习惯也不会太长,这样按长度分组,也就集中在几个里面吧?每个还是很大,不过应该缩小了大概10的样子
0
frankiegao123
frankiegao123

Redis + MySQL!Redis 用作缓存,先通过 Redis 获取,如果没有的话再从 MySQL 中取并创建 Redis 缓存。

皇甫君威
皇甫君威
但一个正常可用的用户名肯定不会存在缓存或者数据库里面呀,但每次不还是遍历了所有吗?
0
nice_so
nice_so

我的猜想是使用多个数据库服务器,按照用户名的命名方式来决定去访问哪个数据库


皇甫君威
皇甫君威
还是直接在内存里面比较快吧?
0
xinzaibing
xinzaibing
必然是分布式的KEY-VALUE数据库,所有数据全部存内存
xinzaibing
xinzaibing
回复 @皇甫君威 : 能有多大,10T还不够?
皇甫君威
皇甫君威
全部数据进内存,就是不知道这个内存要有多大了
0
凤城回忆
凤城回忆
布隆过滤器 + 数据库查询
皇甫君威
皇甫君威
是内存数据库吗?
Timco
Timco
+1
0
jingdor
jingdor
这点要向qq 学习 直接来数字 不用检查
那天早上
那天早上
现在有各种绑定也不是数字啊。如邮箱。自定义的手机登陆
皇甫君威
皇甫君威
腾讯微博的用户名不是数字。。。。
0
滔哥
滔哥
别单线程啦....
滔哥
滔哥
回复 @皇甫君威 : 我是这样理解的,首先是你这个数据应该不会只存在一个数据库中,可以分表,分库,分服务器来查询,通过ID限制来查找,比如第一台查前200万个账号,第二台200万---400万,依此类推,然后就是缓存,能在缓存中查找的尽量缓存
皇甫君威
皇甫君威
那怎么做呢,请教一下多线程的思路?
0
cxshun
cxshun
当数据量太大时,必然需要缓存,索引什么的都没法解决。
无法埋名
无法埋名
回复 @皇甫君威 : 用redis的集合zadd
cxshun
cxshun
回复 @皇甫君威 : 对,这个肯定需要的,当更新数据库数据的时候,缓存数据必然需要同时更新。
皇甫君威
皇甫君威
用了缓存,就要有刷新缓存的机制吧?怎么同步缓存和全体数据呢?
返回顶部
顶部