后端技术面试 38 讲
李智慧
同程艺龙交通首席架构师,前 Intel& 阿里架构师,《大型网站技术架构》作者
37373 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
不定期加餐 (1讲)
后端技术面试 38 讲
15
15
1.0x
00:00/00:00
登录|注册

25 | 数据存储架构:如何改善系统的数据存储能力?

思考题
NoSQL数据库
关系数据库的混合部署
数据库分片
数据库主从复制
数据存储架构

该思维导图由 AI 生成,仅供参考

在整个互联网系统架构中,承受着最大处理压力,最难以被伸缩的,就是数据存储部分。原因主要有两方面。一方面,数据存储需要使用硬盘,而硬盘的处理速度要比其他几种计算资源,比如 CPU、内存、网卡都要慢一些;另一方面,数据是公司最重要的资产,公司需要保证数据的高可用以及一致性,非功能性约束更多一些。
因此数据存储通常都是互联网应用的瓶颈。在高并发的情况下,最容易出现性能问题的就是数据存储。目前用来改善数据存储能力的主要手段包括:数据库主从复制、数据库分片和 NoSQL 数据库。

数据库主从复制

我们以 MySQL 为例,看下数据库主从复制的实现技术以及应用场景。
MySQL 的主从复制,顾名思义就是将 MySQL 主数据库中的数据复制到从数据库中去。主要的复制原理是,当应用程序客户端发送一条更新命令到主服务器数据库的时候,数据库会把这条更新命令同步记录到 Binlog 中,然后由另外一个线程从 Binlog 中读取这条日志,通过远程通讯的方式将它复制到从服务器上面去。
从服务器获得这条更新日志后,将其加入到自己的 Relay Log 中,然后由另外一个 SQL 执行线程从 Relay log 中读取这条新的日志,并把它在本地的数据库中重新执行一遍,这样当客户端应用程序执行一个 update 命令的时候,这个命令会同时在主数据库和从数据库上执行,从而实现了主数据库向从数据库的复制,让从数据库和主数据库保持一样的数据。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

数据存储架构在互联网系统中承受着巨大压力,改善数据存储能力成为关键挑战。主要手段包括数据库主从复制、数据库分片和NoSQL数据库。数据库主从复制实现了读写分离,提升了数据库的访问负载能力,支撑更多用户访问。数据库分片技术将一张表的数据分成若干片,存储在不同服务器上,通过分布式关系数据库中间件实现透明的分片逻辑。此外,混合部署多种技术方案也是一种有效的解决方案。NoSQL数据库是改善数据存储能力的重要手段,主要用来解决大规模分布式数据的存储问题。面临的挑战之一是数据一致性问题,而CAP原理提出了数据一致性、可用性和分区耐受性三个条件。在分布式存储系统中,需要在一致性上做一些妥协和增强。架构是一门关于权衡的艺术,数据存储架构没有一劳永逸的解决方案,需要在深刻理解业务场景和各种分布式存储技术特点的基础上,进行各种权衡考虑,选择最合适的解决方案。分布式架构的一个最大特点是可以动态伸缩,对于支持分片的分布式关系数据库,随着数据量增大,需要考虑如何增加服务器以存储更多的数据,以及如何调整数据库分片,保证整个迁移过程快速、安全。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端技术面试 38 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • uangguan
    老师,Cassandra等待至少两个节点成功写入,不就增加了应用的响应时间吗?

    作者回复: 每个节点的写入和等待响应都是并行的,所以等待两个节点写入成功,并不是等待两倍的响应时间。 响应时间几乎没有增加。

    2020-02-02
    7
  • 旅途
    老师 sql数据库主从或者主主 也有你后面说的nosql集群数据不一致的的问题吧?

    作者回复: 是的,也遵循CAP原理

    2020-01-31
    5
  • ple
    老师,我一直有疑问,为什么NoSQL 比关系型数据库更能解决大规模分布式数据的存储问题? 作者回复: NoSQL这个词大概是2010年前后才出现的,就是为大规模数据存储而设计的,这是他的核心设计目标;而RDBMS历史要远得多,大规模数据存储根本不是RDBMS的设计目标。 NoSQL放弃了RDBMS的很多特性,在处理大规模数据的时候可以更加灵活。 ---------------------------------------- 可以详细聊一下,比如放弃了什么特性,事物?还有别的么?

    作者回复: 主要区别可用RDMS的ACID和NoSQL的BASE概括

    2020-01-23
    2
    5
  • WoLoong
    老师,我一直有疑问,为什么NoSQL 比关系型数据库更能解决大规模分布式数据的存储问题?

    作者回复: NoSQL这个词大概是2010年前后才出现的,就是为大规模数据存储而设计的,这是他的核心设计目标;而RDBMS历史要远得多,大规模数据存储根本不是RDBMS的设计目标。 NoSQL放弃了RDBMS的很多特性,在处理大规模数据的时候可以更加灵活。

    2020-01-20
    3
    4
  • 俯瞰风景.
    老师,请假一下。采用 余数 Hash 算法 进行数据库分片,不就意味着无法增加服务器数目了么?这不就意味着 余数 Hash 算法 的局限性挺大的么?

    作者回复: 参考本模块答疑

    2020-06-01
  • Victor
    思考题在所说的增加一台机器,数据如何迁移的问题,主要有三个思路: 1、创建远超实际节点数的分区,每个节点分配多个分区。当集群增加新节点时,该新节点从现有的节点中匀走几个分区,直到达到全局平衡。请求到来时 、由于分区总数不变,所以不会改变关键词到分区的映射关系,唯一调整的是分区与节点的对应关系。这种策略目前在ElasticSearch等系统使用 2、动态分区策略。当分区数据增长超过阈值(如Hbase 为10G),那么拆分为两个分区,每个承担一半的数据量,数据转移到其他节点。如Hbase借助了 HDFS 实现分区文件的传输 3、分区数与节点数成正比。当加入新的节点时,分区数增加。如Cassandra 采用了这样的方式
    2020-02-14
    25
  • escray
    存储这里确实水比较深,这篇专栏还只讲了关于数据库存储的部分,文件存储似乎没怎么涉及,只有在最后的 Apache Cassandra 部分讲了一点。 另外在数据库备份里面,似乎也跳过了主备数据库机制(由于浪费了服务器资源,似乎已经不怎么使用了)。 专栏中的数据库分片似乎是把分库和分表也合在一起讲了,不过这个部分本来也是需要专业的 DBA 来设计吧,架构师只能提出个框架而已。 NoSQL 的另一个说法是 Not only SQL,应该是作为传统关系型数据库的一个补充吧(用于存储文件或者对象),估计还没有哪个系统可以抛弃关系型数据的。 列式数据库似乎也没有提及。 关于思考题,分布式存储架构的动态伸缩,我只能按照前面的思路,想到一致性哈希算法,而留言里面 @Victor 大神的留言非常全面,不再重复。
    2020-10-07
    5
  • Linker
    mycat支持多种策略的分库分表方案。 加了一台服务器上面部署多个数据库实例处理数据迁移问题要依据分库分表方案进行,以及数据的状态和使用情况。 比如 1、分离活跃数据(会变动的)和静态数据(不会变的) 2、如果使用hash分库分表这就比较坑了。rehash一般就会造成数据重新分布迁移工作量很大。所以这种情况下先瞄准好要处理哪些hash节点非常重要 3、如果用enum做的分库分表,一般不会涉及重新数据分布。 数据迁移的时候一般注意的就是 1、做好时间标签管理目的是找出迁移过程中变化的数据,开始执行迁移的数据时间点,执行完成需要更新的数据时间点 2、做好数据验证工作。因为迁移完成的数据能否按照期望做好。 3、执行过程中做好异常管理,比如个别数据异常要记录下来。及时分析处理。 4、做好预演以及积累迁移过程中的经验,比如mysql中执行大量的DDL语句耗时非常大,并且有可能卡死。需要调整buffer参数等。 5、做好回滚预案(这时候一般事比较大) 总之,任何实践方案都可能是不完备的,做之前多做预演,做之中做好记录,做之后做好验证,做炸了做好回滚。
    2020-09-08
    3
  • 李郝
    在最开始就建很多db,从db0-db64这种,只不过一开始都放在一个服务器上罢了,后续直接整库迁移就可以了
    2020-12-09
    2
  • 饕盡天下
    MYCAT 已经不适合再做分库分表的例子了
    2020-10-19
    1
    2
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部