地址: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查找到用户数据,实则也是一种自创索引。
总知在大数据量、大并发应用中分表是很必要且很繁琐的工作,而且很多时候衍生出分库乃至分服务器等,在此也仅仅浅显地表达一些思路,希望以此抛砖引玉,理解得不好的地方还请海涵。
分享到:
相关推荐
我们考虑的数据是轻子对的质量常数Q在4.5和13.5 GeV之间,且横向动量qT的值类似(尽管稍小)。 我们通过基于标准共线性分解得出预测来解决该问题,预计该预测对频谱的高qT端有效,并且最终需要使用横向动量依赖的...
在压缩包中的`YsrollMainActivity`文件很可能是实现这个功能的主活动代码。在这个文件中,我们可以看到如何将上述步骤具体化,包括初始化PickerView,设置适配器,以及处理滚动事件的细节。 总的来说,实现...
【jQuery-easyAccordion】是一个基于JQuery库的插件,用于实现横向跑马灯效果,为网站添加动态、交互式的导航或展示功能。这个插件的设计理念是简化开发者的工作,提供一个易于使用的工具来创建优雅的横向滚动效果,...
### GridView固定表头实现——横向滚动与纵向固定 在网页应用开发中,特别是涉及到大量数据展示的情况下,如何优雅地处理表格中的数据展示成为一个重要的技术挑战。本文将通过一个具体的实例来探讨如何实现在使用...
利用vue-element的步骤组件el-steps实现横向时间轴,实现点击时间轴的时间节点动态的加载订单数据列表进行展示
横向菜单通常位于页面顶部,而纵向菜单则常出现在侧边栏。本实例将深入探讨如何使用jQuery库来实现这两种类型的交互式菜单,为用户提供更友好的界面体验。 jQuery是一个广泛使用的JavaScript库,它简化了DOM操作、...
总结起来,"IOS-横向-TableView-Demo"是一个iOS开发中的案例,它展示了如何通过自定义UITableView及其相关协议,实现既能横向滚动也能纵向滚动的表格视图,并且支持数据复用,提高性能。这对于那些希望在iOS应用中...
可以横向滚动的选择器,也可以用来当页面指示器。 使用简单,自定义方便。 详细使用说明见Github:https://github.com/976431yang/YQNumberSlideView
"GridView固定表头横向滚动纵向固定" GridView是一个基于ASP.NET的数据控件,用于显示数据表格。然而,在默认情况下,GridView的表头无法固定在屏幕上,使得用户体验不佳。为了解决这个问题,本文将介绍如何实现...
标题中的“横向数据重复的插件dw插件”指的是在数据处理领域中,用于检测和处理数据表中横向数据重复问题的一种工具。DW通常代表Data Warehouse(数据仓库),这是一个专门用于数据分析的系统,用于整合来自不同来源...
在IT行业中,"select 横向滚动条"是一个常见的前端开发话题,涉及到网页界面设计和用户体验优化。在网页设计中,下拉选择框(`<select>`元素)经常用于提供多个选项供用户选择。然而,当选项过多时,传统的垂直滚动...
【横向菜单 Bootstrap 后台模板】是一款基于Bootstrap框架设计的后台管理界面模板,适用于构建颜色较为淡雅的Web应用程序。Bootstrap是Twitter推出的一款开源的前端框架,它提供了丰富的CSS样式和JavaScript组件,...
水平切分,又称分片(Sharding),是一种数据分区方法,将数据按照一定的规则分布到多个数据库或表中,从而实现数据库的横向扩展。在MySQL等数据库中,虽然5.0版本之后引入了表分区功能,但早期的扩展性需求更多依赖...
在传统的N-UP布局中,数据通常是横向排列的,每行显示N条记录。然而,在这个例子中,我们关注的是纵向显示,这意味着记录将沿着垂直方向堆叠,这对于屏幕空间有限或需要垂直比较数据的场景非常有用。 要创建一个...
- **横向切分**:即将频繁查询的数据与不常用的数据分开存储于不同的表中,这种做法有助于减轻查询负担,提高查询效率。 - **纵向切分**:将不同类型的数据分割至不同的表中,这种策略有利于数据管理,同时能够优化...
3. **性能优化**:当数据集很大时,使用虚拟化(Virtualization)技术可以提高性能。设置`VirtualizingStackPanel.IsVirtualizing="True"`并指定适当的`VirtualizingStackPanel.VirtualizationMode`。 4. **样式和...
C语言实现的数据结构横向搜索图,自己写的,很精简。
本文将详细介绍如何在FastReport中实现数据单元格的纵向和横向合并功能,以及如何通过修改核心源代码`frxEngine.pas`和`frxClass.pas`来实现这一特性,并附带了样式文档供参考。 1. **单元格合并概述** - 在报表...
总之,这个“sql 2005 纵向表横向输出存储过程”是数据库管理和数据分析中的一个重要工具,它利用了SQL的PIVOT功能,结合动态SQL,使得在面对变化的数据结构时也能高效地完成数据转换,极大地提高了数据处理的灵活性...