用uid分库,uname上的查询怎么办?

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

【缘起】

用户中心是几乎每一个公司必备的基础服务,用户注册、登录、信息查询与修改都离不开用户中心。

 

当数据量越来越大时,需要多用户中心进行水平切分。最常见的水平切分方式,按照uid取模分库:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1

通过uid取模,将数据分布到多个数据库实例上去,提高服务实例个数,降低单库数据量,以达到扩容的目的。

 

水平切分之后:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1

uid属性上的查询可以直接路由到库,如上图,假设访问uid=124的数据,取模后能够直接定位db-user1。

 

对于uname上的查询,就不能这么幸运了:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1

uname上的查询,如上图,假设访问uname=shenjian的数据,由于不知道数据落在哪个库上,往往需要遍历所有库【扫全库法】,当分库数量多起来,性能会显著降低。

 

用uid分库,如何高效实现上的查询,是本文将要讨论的问题。

 

【索引表法】

思路:uid能直接定位到库,uname不能直接定位到库,如果通过uname能查询到uid,问题解决

解决方案

1)建立一个索引表记录uname->uid的映射关系

2)用uname来访问时,先通过索引表查询到uid,再定位相应的库

3)索引表属性较少,可以容纳非常多数据,一般不需要分库

4)如果数据量过大,可以通过uname来分库

潜在不足:多一次数据库查询,性能下降一倍

 

【缓存映射法】

思路:访问索引表性能较低,把映射关系放在缓存里性能更佳

解决方案

1)uname查询先到cache中查询uid,再根据uid定位数据库

2)假设cache miss,采用扫全库法获取uname对应的uid,放入cache

3)uname到uid的映射关系不会变化,映射关系一旦放入缓存,不会更改,无需淘汰,缓存命中率超高

4)如果数据量过大,可以通过name进行cache水平切分

潜在不足:多一次cache查询

 

uname生成uid

思路:不进行远程查询,由uname直接得到uid

解决方案

1)在用户注册时,设计函数uname生成uid,uid=f(uname),按uid分库插入数据

2)用uname来访问时,先通过函数计算出uid,即uid=f(uname)再来一遍,由uid路由到对应库

潜在不足:该函数设计需要非常讲究技巧,有uid生成冲突风险

 

uname基因融入uid

思路:不能用uname生成uid,可以从uname抽取“基因”,融入uid中

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1

假设分8库,采用uid%8路由,潜台词是,uid的最后3个bit决定这条数据落在哪个库上,这3个bit就是所谓的“基因”。

 

解决方案

1)在用户注册时,设计函数uname生成3bit基因,uname_gene=f(uname),如上图粉色部分

2)同时,生成61bit的全局唯一id,作为用户的标识,如上图绿色部分

3)接着把3bit的uname_gene也作为uid的一部分,如上图屎黄色部分

4)生成64bit的uid,由id和uname_gene拼装而成,并按照uid分库插入数据

5)用uname来访问时,先通过函数由uname再次复原3bit基因,uname_gene=f(uname),通过uname_gene%8直接定位到库

 

【总结】

业务场景:用户中心,数据量大,通过uid分库后,通过uname路由不到库

 

解决方案

1)扫全库法:遍历所有库

2)索引表法:数据库中记录uname->uid的映射关系

3)缓存映射法:缓存中记录uname->uid的映射关系

4)uname生成uid

5)uname基因融入uid

转载于:https://my.oschina.net/architectliuyuanyuan/blog/1590330

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 新闻摘要_每日新闻摘要:运营商承诺他们不再出售您的位置…

python 新闻摘要Last year it was discovered that Verizon, Sprint, AT&T, and T-Mobile were all selling your real-time location data to third-party companies. They offered no oversight of what the companies did with the data whatsoever, and if that’s not…

计算机复试比重低的学校,又有985院校发布调剂信息,这个34所降低复试比重!...

原标题:又有985院校发布调剂信息,这个34所降低复试比重!01985院校调剂01.清华大学昨天,清华大学发布一则调剂信息:临床医学交叉人才培养项目接受调剂。接收调剂专业如下:据其官网介绍,该项目为推…

Silverlight 解谜游戏 之四 粒子特效

前几篇一直在Blend中工作没体现出开发者的作用,本篇将为订书器(Stapler)添加自定义粒子效果,当订书器被点击时产生更好的视觉效果。其中将使用到nerdplusart 的Silverlight Particle Generator 粒子特效工具。 在结束本章内容后&a…

CS229 1 .线性回归与特征归一化(feature scaling)

线性回归是一种回归分析技术,回归分析本质上就是一个函数估计的问题(函数估计包括参数估计和非参数估计),就是找出因变量和自变量之间的因果关系。回归分析的因变量是应该是连续变量,若因变量为离散变量,则…

注册表被黑客篡改 怎样修复_使用快速注册表黑客设置Office 2007配色方案

注册表被黑客篡改 怎样修复We’ve written previously about how to set the Office 2007 color scheme away from that awful default blue, but you can also set it with a quick registry hack or even via group policy on your network, so we’ll cover that here. 前面…

共享计算机后无法访问磁盘,win10电脑共享硬盘无法访问如何解决

很多用户为了方便文件的传输和访问,就会在局域网中开启硬盘共享,正常是可以通过网络打开访问该用户计算机的磁盘从而读取数据文件,可是有win10系统用户却发现共享硬盘无法访问,武大直接通过网络打开对方的磁盘,该如何处…

如何组合救援磁盘以创建最终Windows修复磁盘

We’ve covered loads of different anti-virus, Linux, and other boot disks that help you repair or recover your system, but why limit yourself to just one? Here’s how to combine your favorite repair disks together to create the ultimate repair toolkit for…

WebService C#开发/调用

简单描述C#开发WebService操作步骤以及调用方式 WebService开发 第一步:创建Web空项目 第二步:为创建的Web空项目添加Web服务 第三步:实现WebService方法(仅供参考) 运行WebService测试 第一步:运行WebService程序,略 …

C语言第九次博客作业--指针

一、PTA实验作业 题目1:两个4位正整数的后两位互换 1. 本题PTA提交列表 2. 设计思路 定义循环变量i,两个数组a[4],b[4] for i0 to 3a[i]*p取各个位*p/10 end for i0 to 3b[i]*q取各个位*q/10 end 分别对*p和*q重新赋值 3.代码截图 4.本题调试过程碰到问题及PTA提交列…

使用CEOP增强的Internet Explorer 8帮助保护您的孩子

Do you want to make Internet Explorer safer and more helpful for you and family? Then join us as we look at the CEOP (Child Exploitation and Online Protection Centre) enhanced version of Internet Explorer 8. 您想使Internet Explorer对您和家人更安全&#xf…

MAC--PPTP教程

第一步点击DocK-系统设置 第二步点击网络,进入网络设置 第三步点击号-创建新服务,创建新的网络连接 第四步接口-选-类型-选-PPTP服务名称-选-然后点击-创建 第五步进入设置页面-服务器地址点击查看虚拟IP列表账户名称-输入试用帐号或是你已充值开通的帐号…

2015计算机应用基础平时作业答案,2015秋《计算机应用基础》第一次作业

2015秋《计算机应用基础》第一次作业 一、单项选择题。本大题共50个小题,每小题 2.0 分,共100.0分。在每小题给出的选项中,只有一项是符合题目要求的。 1. 第一台电子计算机是1946年在美国研制成功的,该机的英文缩写名是______。 …

页面置换算法及例题

一、页面置换算法 不适当的算法可能会导致进程发生“抖动”:即刚被换出的页很快又要被访问,需要将他重新调入,此时又需要再选一页调出。而此刚被调出的页面很快又被访问,又需将它调入,如此频繁地更换页面,以…

vista磁盘使用100%_如何在Windows 7或Vista中创建和使用密码重置磁盘

vista磁盘使用100%Forgetting your password can be an extremely frustrating situation, and we’ve already shared how to reset your password with the Ultimate Boot CD as well as the System Rescue CD, but you can prevent the situation entirely by creating a pa…

Nginx服务状态的监控

一、安装Nginx 使用源码编译安装,包括具体的编译参数信息。 正式开始前,编译环境gcc g 开发库之类的需要提前装好。 安装make: yum -y install gcc automake autoconf libtool make 安装g: yum install gcc gcc-c 一般我们都需要先装pcre, zl…

计算机二级高级应用这么难,计算机二级考试越来越难的实锤!真实数据告诉你到底难在哪里?...

今年3月考试成绩暂时未公布(预计在5月中旬发布),通过率暂时无法得知。但是根据考后后台反馈情况,今年通过率可能再创新低。不管你是不是有感知,计算机二级通过率的确在逐年降低。近3年难度越来越大每次考试结束后后台评论最多的就是“今年的考…

windows 系统监视器_使用Windows 7中的可靠性监视器对计算机问题进行故障排除

windows 系统监视器Windows Vista introduced us to the Reliability and Performance Monitor utility to help keep track of hardware and software crashes. It’s now a stand alone utility in Windows 7 and we will take a look at how to access and use it. Windows …

powerpoint预览_如何安排PowerPoint幻灯片的时间以进行更有效的演示

powerpoint预览Delivering a presentation is not just about giving good slides, it is also about making sure that our presentation finishes by the time our audience wants to have their tea break—so practicing how long to speak for each slide is essential fo…

在Windows XP中对系统文件(页面文件和注册表)进行碎片整理

In the pursuit for performance, making sure your drive isn’t fragmented is a regular task. The problem is that Windows XP doesn’t allow certain system files to be defragmented without commercial software. What about free solutions? 在追求性能时&#xff…

计算机存有多少游戏,8G和16G的计算机内存之间有很大区别吗?玩游戏需要多少内存?...

大家好,我是Compatible Computer Home的小牛.计算机内存是除CPU外最重要的组件之一. 运行大型软件和多任务处理时,计算机内存量直接影响计算机的流畅性. 许多玩家不知道什么时候第一次购买计算机. 小牛会在今天与您讨论要购买多少内存来购买计算机.首先&…