美文网首页程序员
分库分表假如按uid分库分表,那么按uname查询怎么办?

分库分表假如按uid分库分表,那么按uname查询怎么办?

作者: 布衣小贩java | 来源:发表于2017-08-07 10:17 被阅读0次

    用户中心是每一个公司必备的基础服务,用户的注册,登录,信息查询都离不开用户中心。当数据量越来越大的时候,需要多用户进行水平切分。最常见的水平切分方式,按照uid取膜分库,通过取膜将数据分布到多个数据库实例,提高服务实例个数,已达到扩容的目的。
    如果按照uid查询可以直接路由到库。如图水平切分之后:

    Paste_Image.png

    假如 uid=121,取膜之后直接定位到db1

    如果是uname查询,假设uname=hello,就没有办法定位到库了。
    如果想要高效的查询,今天主要讨论两种方案。
    1.【索引表方法】
    思路:uid可以直接定位到库,uname不能直接定位到库,如果能通过uname 定位到 uid那么为问题解决。下面来说下怎么通过uid定位到uname
    解决方案:
    1)建立一个索引记录表,映射关系uname 对应 uid。并且建立索引
    2)当用uname查询时,先通过uname查询到uid,在定位到库
    3)索引表数据属性少,可以容纳很多数据,一般不需要分库
    4)如果数据量过大可以按uname分库
    缺点:多一次数据库的查询,性能下降一半
    2【缓存映射方法】
    思路:访问索引表性能低,把映射关系放到缓存中
    解决方案:
    1)通过uname先查到缓存与uname的对应关系uid

    1. uname和uid关系不会变化,因为uname和uid都是唯一的
      缺点:多一次缓存查询

    以上是在分库分表中遇到的问题以及解决方案,个人认为第二中方案比较好。

    相关文章

      网友评论

        本文标题:分库分表假如按uid分库分表,那么按uname查询怎么办?

        本文链接:https://www.haomeiwen.com/subject/cjeolxtx.html