(RDBMS) 关系型数据库
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织。
- 关系型数据库的优点如下:
- 易于维护:都是使用表结构,格式一致;
- 使用方便:SQL语言通用,可用于复杂查询;
- 复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
- 关系型数据库的缺点如下:
- 读写性能比较差,尤其是海量数据的高效率读写;
- 固定的表结构,灵活度稍欠;
- 高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
非关系型数据库
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
- 非关系型数据库的优点如下:
- 格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
- 速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
- 高扩展性;
- 成本低:nosql数据库部署简单,基本都是开源软件。
- 非关系型数据库的缺点如下:
- 不提供sql支持,学习和使用成本较高;
- 无事务处理;
- 数据结构相对复杂,复杂查询方面稍欠。
分布式数据库
传统数据库面临难以解决的问题如下:
- 海量数据存储
一般来说,传统数据库的做法就是纵向扩展(scale-up)存储不够就加磁盘,计算不够就加 CPU,内存不够就加内存,加到后面加不动了就上小型机大型机。但这种扩展方式总会达到一个极限,而且随着数据库越来越大,实际成本和收益比会越来越小。 分布式数据库采用了横向扩展(scale-out)思路,也就是说遇到瓶颈通过加机器而不是加配置解决,这样就能实现无限水平扩展。再多的数据都能使用一定的分片策略分散到不同的机器,分而治之就是分布式的核心理念。
- 分库分表的痛点
在分布式数据库出来之前,针对大数据量的读写场景广泛采用分库分表方案,这样的设计给后期数据库运维带来了很大的困难。 在分布式数据库中不用考虑单表的存储限制,几十亿上百亿行的表非常常见,它能充分利用每一个节点的计算存储资源,绝大部分的分布式数据库自带多副本特性,并且能保证副本之间的强一致性,这就相当于天生拥有高可用能力。 这种多副本同步能力不仅可以应用在多主机中,甚至能扩展到多机柜、多数据中心、以及跨区域的能力,极大地减少了硬件成本和运维成本。由于多副本的存在,它可以做到 RPO 为 0,自动故障转移可以让 RTO 在秒级。