专栏首页杨建荣的学习笔记分库分表的一些策略思考

分库分表的一些策略思考

这是学习笔记的第 1912 篇文章

最近对一个业务进行了架构改造,主要是对已有的存储过程进行改写,使用SQL的方式来实现,同时对已有的业务处理做事务降维,在性能上的提升效果非常明显,本来通过存储过程是和数据库交互1次,通过SQL的方式是交互2-3次,但是从测试的效果来看,没有看到多次交互带来的流量压力,从应用层的性能来看,比原来的方式好了不少。所以通过改造为我们的后续改造树立了信心,大家也不会一味在存储过程的交互次数纠结了。

所以架构改造就进入了快车道,如果之前的进度是按照5%来更新,那么现在的进度是按照10%的迭代速度进行的,因为通过这些改造的经验沉淀,其实可改进的空间依旧非常大,而我们行之有效的大规模改造才正式开始。

事务降维其实是对应用数据的一个权衡结果,如果做一些取舍之后,整个系统的逻辑就很简单了,通过标准的DML语句即可实现,但是从存储和性能的角度来说,目前单表亿级数据量的支撑能力和业务快速增长都会让已有的架构不再使用,难以扩展,在考虑性能水平扩展的时候,分库分表就是一个很好的切入点。

比如流水型数据,属于周期性业务,那么我们可以完全按照时间维度(天)来进行分表。

分表的规则是能够对1张表生成多个子表。

而在分库分表的拆分中,我们怎么实现统一而完整的方案呢, 假设目前的业务需求支持的表分为几类,一类是周期表,一类是固定表,还有一类是数据字典表。

周期表的时间维度有五类,年,月,日,周等。目前的周期划分日是最清晰也最容易扩展的,比如日表的数据有10亿,我们可以对外统一为user_data,而内部拆分成了1000张表,这样一来每张表的量级在100万,是一个完全可控的场景,按照这种扩展速度,哪怕翻10倍都是可控的。

对于周的拆分就存在疑问了。如果我们给定一个表名,week_data,那么我们要拆分为100份,按照目前行业内的大多数中间件,可能需要有1000个database来支持这个需求,每个database只有1张表。

假设这种方式依旧可行,那么在另外两个方面就成为瓶颈了,一个是数据的清理层面,按照目前的处理方式,数据是只进难出,要删除数据的代价太高,另外一个是就是对于时间维度的支持层面很难灵活,比如有的业务逻辑对于周的划分是不同的,有的是希望支持类似时长的周,比如3月8日开始计算,一周后的时间是3月15日。

和我们常说的这种固定的周的逻辑是不同的,从业务层面来说也是合理的。

对于这列需求,我们就可以对已有的表新增两列,通过输入起始周期和结束周期来平滑对接。

这样一来数据存储就是如下的形式:

20190308 20190315 xxx xxx xxx

20190325 20190331 xxx xxx xxx

这个逻辑是通过分片逻辑很难控制的,但是我们可以指定一个配置表来做这种映射。 即通过这种时间映射得到是需要到week1_data还是week2_data中查找数据。

而从这个角度来看,已有的week为维度,我们就可以创建50多个以周围单位的表,而对于周期数据的清理,也可以更加清晰可控,这样一个以周围单位的表就可以完成线性扩展,轻松支撑亿级数据。

同理,对于月表,年表也可以采用类似的思路。

而对于固定表,没有时间维度,即数据是覆盖型的,比如存在500万数据,那么数据总量是相对稳定的,但是数据状态会不断发生变化,这类表的分表策略就相对限制一些,思路就是单库单表,基本上拆分成100-400个都是基本可控的。

而对于配置表来说,单表数据量少数的情况下,是设置为全局模式,当然这类表是越少越好。

所以分库分表的一个理念就是没有拆不开的表,只有拆不开的逻辑。要实现水平扩展,在现有的关系型基础上,虽然离完美还遥远,但是也是一种行之有效的方式。

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes),作者:杨建荣

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-08

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关于数据质量的思考

    最近和几个同事聊了下关于数据的一些问题,有一个问题引起了我的好奇。那就是数仓体系和大数据体系的数据质量差异。

    jeanron100
  • MySQL机房多活的初步设想

    今天和同事聊了下两地三中心的一些理解,后续会在MySQL和Redis方向的高可用架构方案上做一些东西。这算是一个讨论的开始吧。

    jeanron100
  • 用Python对2019年二手房价格进行数据分析

    最近和朋友聊到买房问题,所以对某二手房价格信息进行了爬取,爬虫见本公众号另一篇文章。

    jeanron100
  • 收藏 | 全网最大机器学习数据集,视觉、NLP、音频都在这了

    每年都有很多大型、高质量的数据集发布,其中大多数数据集都发布在各自的网站上,通过谷歌搜索很难找到所有这些数据集。

    CDA数据分析师
  • 应用大数据要克服几个方面的障碍

    10日贵报刊发题为《实施国家大数据战略要“两手抓”》的社评,文章指出发展大数据产业,政府之手与市场之手要形成合力,军用与民用互相融合。 笔者认为,在当下还有一个...

    企鹅号小编
  • 百分点发布《数据决策力白皮书》,以数据决策力驱动企业发展

    <数据猿导读> 近日,中国大数据产业生态大会暨中国大数据产业生态联盟成立大会在京召开。作为中国领先的大数据技术与应用服务商,百分点携精心打造的《数据决策力白皮书...

    数据猿
  • 75.9%受访者发现存在“大数据”滥用现象

    电子科技大学互联网科学中心主任、《大数据时代》中文翻译者周涛认为,企业有没有“大数据”能力,分析报告是否包含“大数据”成分,要看是否具备两个特征:一是数据本身...

    腾讯研究院
  • 大数据行业生态图谱3.0——信息图

    创业者们纷纷涌入大数据市场,尾随的VC们也是挥金如土,导致大数据创业市场目前已经非常拥挤。虽然大数据创业市场已经人山人海,但是依然有足够的空间给新的创业公司,现...

    CSDN技术头条
  • 数据预处理技术研究 | 冰水数据智能专题 | 1st

    数据预处理是数据挖掘的重要一环,要使挖掘方案挖掘出丰富的知识,就必须为它提供干净、准确、简洁的数据。然而实际应用系统中收集到的原始数据是“脏”的,不完全的、...

    用户7623498
  • 谷歌成立AI中国中心;联想牵头工业大数据产业联盟 | DT数读

    过去一周,国际、国内的大数据相关公司都有哪些值得关注的新闻?数据行业都有哪些新观点和新鲜事?DT君为你盘点解读。

    DT数据侠

扫码关注云+社区

领取腾讯云代金券