No1:分布式数据库可以解决什么问题?
简单来说,分布式数据库就是用分布式架构实现的关系型数据库。
那为什么要用分布式架构呢?原因很简单,就是性能和可靠性。由于各种原因,IBM大型机这样的专用设备已经不再是多数企业的可选项,而采用x86架构的通用设备在单机性能和可靠性上都不能满足要求,因此分布式架构就成为了一个必然的选择。可以说,在各种因素的推动下,分布式数据库已经成为一种技术潮流,甚至是新基建的一部分。
我们要学分布式数据库的另一个原因在于,你可以通过学习它的设计思想,提高自己的架构设计水平和代码能力。分布式数据库是学术研究与工业实践的完美结合,深入其中你会看到很多极致的设计方法。通过学习分布式数据库的架构设计,形成内化的设计能力,一定是架构师的要诀之一。
No2:抓住主线,高效学习分布式数据库
数据库其实就做了两个操作,读和写。但就这两件事,有时也会冲突,写入快,读取可能就会慢,另外还得考虑存储空间的成本。有个RUM猜想就是说这个事情,读放大,写放大,存储空间放大,最多只能避免两个,三选二。这是第一个部分,存储的设计。系统总是要多人使用吧,这就带来并发的问题,出现写写冲突和读写冲突时采用什么策略,这是第二部分事物模型。数据库的操作接口是SQL,基于关系模型来定义数据结构和操作原语,而且还有各种索引,优化措施,让SQL执行得更快,这是第三个部分查询引擎。任何架构都要避免单点故障,所以数据库会有一个复制机制,多个节点形成主备关系,主备之间同步数据,这样可靠性就有了保障,这就是第四部分复制。最后,还有一些必备的辅助工作,客户端接入,权限控制,元数据的存储。这样一个基本的数据库就可以运行了。
归纳一下,数据库就是要做好五件事,存储,事务,查询,复制和其他。对分布式数据库来说,不仅要继续做这五件事,还要多做一件事,分片。在这六件事中,存储和其他这两件事与单体数据库差不多,难点就在事务,查询,复制和分片这四件。
No3:具体说说这四件事
第一件,也就是多出的那一件事,叫分片元数据存储和分片调度。既然已经是多个节点,那一张表的数据还放在一个节点上吗?是不是该分散一下提高性能?这样,表就不再是数据的最小存储单元了,换成了分片,也就是表的水平切分下来的一部分,这就和分区的概念很像。但是,这一分散,使用数据时总得知道去哪找吧?这就是分片元数据。另外,这分片也不是静止的,有很多因素会导致分片在节点移动,比如分片存储的数据太多或者访问压力太大,这就需要对分片进行拆分,合并以及调度。
第二件是事务,准确地说是分布式事务。它和单机事务完全不一样,虽然数据库早就有了XA协议作为标准,理论上支持跨库事务,可是那性能实在太差了啊。使用XA协议的MySql集群,操作延机是单机的10倍。这是什么概念?根本没法在生产环境用。所以,还得研究更加高效的分布式事务模型。
第三件是查询,查到数据很容易,难的还是高性能。而且数据都分片了,一个查询任务如何分配,是在某个节点上集中数据还是把逻辑推给各个节点,这都是要设计权衡的。
第四件是复制,也就是高可靠设计,原来的单机复制机也可以延用,但是在这种复制机机制下,只有主节点工作,备节点闲着。现在,新的设计是在分片基础上用Paxos协议建立复制组,这就有了更小的高可靠单元,让每个复制组的主副本交叉部署在多个节点上,就可以充分利用机器资源。
你看,只要抓住了这四件事,是不是就掌握了分布式数据库的学习要点。
Tips:以上都是博主的学习听课笔记,非原创!侵权我就删!小白刚起步自学阶段,不吝赐教!