一个紧急查询的改进思路(r7笔记第44天)

今天下午有一个紧急需求,是辅助业务部门做一个紧急查询,既然说紧急查询,那么肯定业务上需要加急处理,那么很快就需要找到我们DBA来帮忙了。

需求的情况是,需要根据某一个用户的标识(比如手机号)来定位对应用户的id,可能同一个身份证号,可以注册多个不同的id。

根据数据的情况,在系统中已经做了分库分表。情况类似下面的形式。

比如说数据分成了12个用户,每个用户中都有一个account_delta的表,但是每个用户中的数据完全不同,然后每3个用户对一个物理数据库,所以基本就是4个分库,12个用户。

然后存在一个公共库的数据,这个部分也是一个概要信息,就是用户id的一个绑定关系,是放在了一个公共库中,也就意味着这个表没有做分库分表。

现在正如红色箭头所示,传入了对应的标识字段,需要做紧急查询,这就意味着需要在这4个分库12个用户中做一个全范围查询。

而且比较要命的提供的查询条件是非索引字段,那么只能做全表,所以12个用户一个一个来查,然后merge起来,人肉hadoop,实在是紧急处理不了。

这个时候可以参考的一个地方就是我们存在一个统计库,这个统计库中会定时同步这些账号库中的这部分数据,目前是采用增量刷新的方式,所以在统计库中的结构如下:

统计库中目前是创建了12个物化视图,和源库中的12个基表是类似的。然后对于开发同事来说,就是一个简单的account_delta,即一个简单的view。

在大多数的场景使用中没有碰到什么明显的性能问题。

所以这个问题就可以转化为下面的形式

这个时候这些查询就可以直接在统计库中完成,而不用一个一个库的去逐个尝试,因为目前统计库中的数据是一天一次增量刷新,如果觉得数据不够新,可以再做一次增量刷新即可。

所以这些工作都可以在统计库中完成,对于原本的这些分库没有任何的压力和负载。而且速度也是大幅度提高。

然后查到对应的用户id之后,需要再一次做一个关联查询,就是和公共库中的data_bind关联,得到最后需要的数据,这个data_bind在统计库中没有做同步,而且本身也没有做分库分表。

但是值得一提的是这个表中的用户id有对应的索引,所以在公共库中按照用户id来查询,性能也还是不错的。

然后就这样简单分析了问题之后,在统计库中查询,因为是全表扫描,然后再开个并行,分分钟就会得出结果,然后把返回的用户id和公共库的data_bind关联起来,很快就能得到最后的结果。

所以看似简单枯燥的日常问题处理,如果多一些改进思路,那么自己也会轻松许多。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2015-12-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

MySQL root用户登录的几个小问题(r12笔记第67天)

今天和同事聊了聊技术的事情,聊到BAT里面的一些高大上的系统和设计,相比总是会有些差距,不过像那样体量的公司知识沉淀很深,所以能够做好我们力所能及的事情,把...

31840
来自专栏老安的博客

zabbix使用zabbix 数据库做数据分表

18230
来自专栏Web 开发

ubuntu学习手札——vmware中安装ubuntu

我的系统是XP SP3 + VMWARE WORKSTATION + UBUNTU 8.04桌面版

11420
来自专栏跟着阿笨一起玩NET

数据库大型应用解决方案总结(转)

本人转载:http://www.cnblogs.com/ejiyuan/archive/2010/10/29/1796292.html

10620
来自专栏更流畅、简洁的软件开发方式

【自然框架】之通用权限:数据库设计的几种使用方式

      上次《【自然框架】之通用权限:用PowerDesigner重新设计了一下数据库,有ER图和表关系图 》里说了一大堆的表,好多人说太复杂了,做到权限到...

26990
来自专栏云计算教程系列

在Ubuntu 16.04上安装MediaWiki

MediaWiki是一个流行的免费wiki软件包。它与维基百科使用的软件相同,是完全动态的,可以在LAMP堆栈上运行,利用PHP语言和MySQL数据库后端。通过...

19050
来自专栏遊俠扎彪

Oracle EM在网页中出现乱码的解决方案

CentOS 5.6 + Oracle 10g 10.2.0.4

22050
来自专栏大数据架构师专家

zabbix3.4安装

自从zabbix2系列爆出漏洞后,大多数公司都在升级zabbix3系列,升级过程特别简单,在官网有详细的升级教程

23120
来自专栏运维小白

12.1 LNMP架构介绍

LNMP架构介绍目录概要 和LAMP不同的是,提供web服务的是Nginx 并且php是作为一个独立服务存在的,这个服务叫做php-fpm Nginx直接处理静...

21080
来自专栏蓝天

与Innodb引擎有关的配置说明

skip-inodb 不加载INODB数据引擎驱动,如果项目不使用INNODB引擎,可以关闭,以节省系统内存 innodb-file-per-table 设置...

10820

扫码关注云+社区

领取腾讯云代金券