地址:http://bbs3.chinaunix.net/thread-1498019-1-1.html
简单说明一下,假设原始表结构:
ID |
username
|
email |
passwd |
... |
10000001 |
小强 |
aa@qq.com
|
xxxxxxxxxxxx |
... |
10000002 |
张三 |
bb@gmail.com
|
xxxxxxxxxxxx |
... |
... |
... |
... |
... |
... |
以用户名做hash把所有用户打散到不同的表,如取md5('小强')的首英文字母(hash方法很多,这边简单以md5示例)进行横向分表后假设创建如下表名:
users_a、users_b、users_c、users_d、.....、users_other
users_a 设置主健基数 10000000
users_b 设置主健基数 20000000
users_c 设置主健基数 30000000
....
这样以后,若我们查询 username='小张',则hash后得到小张所在的表名为 users_a,构建sql语句:
select * from users_a where username='小张';
若我们查询用户 ID=21001234,则可间接得到ID21001234所在的表名为 users_b,构建sql语句:
select * from users_b where ID=21001234;
以上这些办法都能在分表后大幅提升数据库查询性能。
但是,虽然解决了使用ID和username查找的问题,如果我想查找 email='xxxx@xxx.com' 怎么办?
首先建立该字段与主键ID的映射关系表结构如下:
其次,针对email的值进行散列/分表,拆分为 email_a、email_b、email_c.....
简单地理解就是:
email_a存放的是以邮件a开头的所有email地址及其对应的用户ID;
email_b存放的是以邮件b开头的所有email地址及其对应的用户ID.....
这样以后,若我们查询 email='aa@qq.com',则可得到该email所在的表名为 email_a,构建sql语句:
select ID from email_a where email='aa@qq.com';
得到用户ID,并根据ID查找到用户数据,实则也是一种自创索引。
总知在大数据量、大并发应用中分表是很必要且很繁琐的工作,而且很多时候衍生出分库乃至分服务器等,在此也仅仅浅显地表达一些思路,希望以此抛砖引玉,理解得不好的地方还请海涵。
分享到:
相关推荐
基于JQuery横向跑马灯jQuery-easyAccordion
c#自c定义横向或纵向打印-ZXG.rarc#自c定义横向或纵向打印-ZXG.rar
我们考虑的数据是轻子对的质量常数Q在4.5和13.5 GeV之间,且横向动量qT的值类似(尽管稍小)。 我们通过基于标准共线性分解得出预测来解决该问题,预计该预测对频谱的高qT端有效,并且最终需要使用横向动量依赖的...
历年计算机三级网络技术真题(横向)-好-一页可以打印两栏
利用vue-element的步骤组件el-steps实现横向时间轴,实现点击时间轴的时间节点动态的加载订单数据列表进行展示
固定收益专题报告:从不良贷款横向看信用风险-1126-国信证券-10页.pdf
一个很好的jquery实例--横向纵向菜单
gridview固定表头 横向滚动 纵向固定,即拖动横向滚动条时,表头随着表体移动,纵向拖动滚动条时,表头固定不动 实践中所得一个具体实例 VS2010,C#
很简单的东西,分享一下,自行下载吧大家,就是Gmail下拉刷新,上面那个横向滚动的变色进度条,希望有人会用到
多层流体中横向磁场对Richtmyer-Meshkov不稳定性的影响,曹金涛,吴征威,本文考察了置于外加均匀横向磁场环境下被瞬时加速度的分层流体中的Richtmyer-Meshkov(RM)不稳定性。通过求解初值问题以及描述界面扰�
可以横向滚动的选择器,也可以用来当页面指示器。 使用简单,自定义方便。 详细使用说明见Github:https://github.com/976431yang/YQNumberSlideView
C#打印操作实例--设置横向或纵向打印实例--完整版) )
C#打印操作实例--设置横向或纵向打印实例--值得下载
支持横向,竖向 展示的TablView,支持复用数据。
随着横向网络安全法、等保2.0的合规性要求及纵向垂直行业安全要求的需要,对数据存储、使用、运营提出了明确要求,如何更好的对数据进行有效防护,保障数据全生命周期的安全性,如何以事前发现、事中阻止、事后审计...
C语言实现的数据结构横向搜索图,自己写的,很精简。
2022/3/14 4.8 数据拼接-2 数据拼接经常用于将不同的dataframe (series)拼接成一个dataframe ,可以根据某个轴向进行拼接。 4.8.2. 使用concat方法拼接 concat方法将两个表沿着指定轴向拼接在一起,基本语法如下。...
基于计算矢量,轴向矢量和张量电流算子方程的卷曲的方法,在QED $ _ {3} $和QED $ _ {{2} $)理论中,横向Ward-Takahashi关系的可能量子异常是 研究。 分别验证了QED $ _ {2} $理论中的轴向矢量电流和QED $ _ {3} $...
前两年IOS应用源码-主要是用于毕业设计学习的。
2.mimikatz # kerberos::purge 3.利用 ms14-068 生成 TGT 数据 4.票据注入内存 5.查看凭证列表 klist 6.利