Java资源分享网 - 专业的Java学习网站 学Java,上Java资源分享网
【分库分表】面试题 PDF 下载
匿名网友发布于:2024-04-24 10:11:48
(侵权举报)
(假如点击没反应,多刷新两次就OK!)

【分库分表】面试题 PDF 下载  图1

 

 

资料内容:

 
为什么使用分库分表?
传统的将数据集中存储至单一数据节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足互联网的海
量数据场景。
1)性能
从性能方面来说,由于关系型数据库大多采用 B+ 树类型的索引,在数据量超过阈值的情况下,索引深度的增加也
将使得磁盘访问的 IO 次数增加,进而导致查询性能的下降。
同时,高并发访问请求也使得集中式数据库成为系统的最大瓶颈。
2)可用性
从可用性的方面来讲,服务化的无状态型,能够达到较小成本的随意扩容,这必然导致系统的最终压力都落在数据
库之上。而单一的数据节点,或者简单的主从架构,已经越来越难以承担。数据库的可用性,已成为整个系统的关
键。
3)运维成本
从运维成本方面考虑,当一个数据库实例中的数据达到阈值以上,对于 DBA 的运维压力就会增大。数据备份和恢
复的时间成本都将随着数据量的大小而愈发不可控。一般来讲,单一数据库实例的数据的阈值在 1TB 之内,是比
较合理的范围。
 
 那么为什么不选择 NoSQL 呢?
在传统的关系型数据库无法满足互联网场景需要的情况下,将数据存储至原生支持分布式的 NoSQL 的尝试越来越
多。 但 NoSQL SQL 的不兼容性以及生态圈的不完善,使得它们在与关系型数据库的博弈中始终无法完成致命
一击,而关系型数据库的地位却依然不可撼动。
 
什么是分库分表?
数据分片,指按照某个维度将存放在单一数据库中的数据分散地存放至多个数据库或表中以达到提升性能瓶颈以及
可用性的效果。数据分片的有效手段是对关系型数据库进行分库和分表
分库和分表均可以有效的避免由数据量超过可承受阈值而产生的查询瓶颈。除此之外,分库还能够用于有效
的分散对数据库单点的访问量。分表虽然无法缓解数据库压力,但却能够提供尽量将分布式事务转化为本地事务的可能,一旦涉及到跨库的
更新操作,分布式事务往往会使问题变得复杂。
使用多主多从的分片方式,可以有效的避免数据单点,从而提升数据架构的可用性。
通过分库和分表进行数据的拆分来使得各个表的数据量保持在阈值以下,以及对流量进行疏导应对高访问量,是应
对高并发和海量数据系统的有效手段。数据分片的拆分方式又分为垂直分片和水平分片。
 
 垂直分片
按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用。 在拆分之前,一个数据库由多个
数据表构成,每个表对应着不同的业务。而拆分之后,则是按照业务将表进行归类,分布到不同的数据库中,从而
将压力分散至不同的数据库。