数据库的七种武器,是我在工作维护和接触到的七种常用数据库,包括 4 种常用的关系型数据库,3 种常用 nosql 数据库.
这些数据库作为业务底层的存储选型,每种数据库都有各自的定位和特点,结合业务,有各自的适用场景,在具体使用和运维时,也有一些特别的注意点.
本文按照顺序依次对这 "七种武器",进行介绍和总结,希望能够帮助大家理清每种 "武器" 的特点和用法,在合适的场景,使用合适的武器,构建好自己的数据存储体系.
第一种武器:MySQL 数据库
1,定位:开源,多平台,关系型数据库
目前使用最广泛,流行度最高的的开源数据库.
2,特点:
功能:支持事务,符合关系型数据库原理,符合 ACID,支持多数 SQL 规范,以二维表方式组织数据,有插件式存储引擎,支持多种存储引擎格式
部署:用编译安装的方式,或者二进制包的方式,按照 "安装软件 - 创建实例 - 库表用户初始化",可以很快完成数据库部署
使用:使用标准的 SQL 语句进行数据库管理,简单 SQL 语句的并发和性能较好,对视图,存储过程,函数,触发器等支持的不是太好
监控:在命令行界面有一些常用的命令显示状态和性能,在图形界面方面,有比较多的开源监控工具来监控和记录数据库的状态,比如 zabbix,nagios,cacti,lepus 等
备份:逻辑备份 mysqldump/mysqldumper ,物理备份 用 xtrabackup 等工具进行备份;
高可用:MySQL 高可用有多种方案,官方有基础的 master-slave 主从复制,新版本的 innodb cluster,第三方的有 MHA 等高可用方案;
扩展:MySQL 水平拆分,可以通过水平拆分 proxy 中间进行逻辑映射和拆分,扩大 MySQL 数据库的并发能力和吞吐量.
3,适用场景:
默认的 innodb 存储引擎,支持高并发,简单的绝大部分 OLTP 场景;
Tokudb 存储引擎,使用高并发 insert 的场景;
Inforbright 存储引擎,可以进行列压缩和 OLAP 统计查询场景;
4,选择注意:
使用 MySQL 进行 OLTP 业务时,需要注意数据量级,如果数据量级过大,需要进行水平拆分;
如果有 OLAP 需求,可以结合其他架构综合考虑.
第二种武器:SQL Server 数据库
1,定位:商业,Windows 平台,关系型数据库
最早接触,与微软体系结合紧密的的商业数据库,属于 "微软技术体系"
2,特点:
功能:支持事务,符合关系型数据库原理,符合 ACID,支持多数 SQL 规范,以二维表方式组织数据
部署:在 Windows 平台,用图形界面进行软件安装;
使用:在 Windows 平台,使用 SQL Server Mangement Studio 图形界面进行安装;
监控:一般通过 Windows 资源管理和 SQL server 图形工具进行系统和数据库性能显示;
备份:通常用第三方备份恢复软件进行备份恢复;
高可用:通过共享存储和双机热备的方式,可以实现 SQL Server 数据库的高可用;
扩展: SQL Server 数据库集群采用共存存储的方式,通过硬件垂直升级来对数据库集群进行扩展;
3,适用场景:大多数 OLTP 场景(与微软体系配合)
4,选择注意:
SQL Server 与微软技术体系结合比较紧密,绝大多数工作,都是通过图形界面完成,对于习惯使用命令行的 DBA 可能会有不习惯;
SQL server 对双引号,大小写,元信息的管理和处理方式,与其他数据库很不相同,需要注意;
使用 SQL Server 满足 OLTP 业务,会有比较好的效果,但对于大数据量的 OLAP 业务,最好还是选用专门的 OLAP 架构,不要在同一个 SQL Server 实例上混用 OLTP 和 OLAP 业务;
SQL server 属于商业软件,需要注意版权和 licence 授权费用;
第三种武器:Oracle 数据库
1,定位:
商业,多平台,关系型数据库
功能最强大,最复杂,市场占比最高的商业数据库
2,特点:
功能:支持事务,符合关系型数据库原理,符合 ACID,支持多数 SQL 规范,以二维表方式组织数据
部署:Oracle 单实例数据库部署相对容易,但 Oracle RAC 集群环境,部署的步骤和依赖条件都比较多;
使用:通常使用命令行工具,进行各种数据库的管理,通常也可以用 shell 脚本和 python 脚本提高 Oracle 数据库管理效率;各种管理功能,都比较强大;
监控:Oracle 官方有比较全面的监控工具,常用的第三方监控平台,如 zabbix,cacti,lepus 等都有对 Oracle 数据库的各项指标的完善监控;
备份:支持冷备份和热备份,可以用 exp/imp , expdp/impdp 等进行逻辑备份和恢复,可以使用强大的 RMAN 工具进行专业的物理热备份和恢复;
高可用:Oracle 数据库的高可用架构,可以用第三方双机热备软件,结合 Oracle 单实例实现;可以使用 Oracle Dataguard,实现 master 和 standby 的备份;可以使用 Oracle RAC 集群实现实例级别的高可用和负载均衡,使用 ASM 实现存储级别的高可用;
扩展:由于 Oracle 集群采用共享存储的方式,一般只能通过垂直硬件升级进行升级;
3,适用场景:绝大多数 OLTP 场景,部分 OLAP
4,选择注意:Oracle 从架构到运维,可以说是最难的数据库,学习和使用难度较高.
第四种武器:Postgresql 数据库
1,定位:开源,多平台,关系型数据库,功能最强大的开源数据库.
2,特点:
功能:支持事务,符合关系型数据库原理,符合 ACID,支持多数 SQL 规范,以二维表方式组织数据;
部署: postgresql 需要先准备好 Python 等环境,然后编译安装软件,初始化数据库,启动实例,整个部署过程相对比较清晰;
使用: postgresql 数据库可以使用命令行方式进行管理,也可以通过 pgadmin 图形工具进行管理;各种管理功能,都比较强大;
监控: 可以再命令行中查看各种性能视图和状态视图;相对其他其他数据库,并没有太好的图形监控工具和平台;
备份:支持冷备份和热备份,可以用 COPY 命令进行逻辑导出和导入;用 pgdump 和 pgrestore 进行物理备份和恢复;
高可用:postgresql 官方支持 master-standby 复制;也可以用 Slony-I 第三方组件进行数据库同步;
扩展:postgresql 可以通过修改源码实现的 postgres-XC 实现水平扩展;
3,适用场景:
绝大多数 OLTP 场景,部分 OLAP
适合目前互联网需要的一些信息,比如地理位置信息处理;
以 postgresql 作为底层数据库的 greenplum 数据仓库,是主流的 MPP 数据仓库;
基于 postgresql 的 TimeScaleDB,是目前比较火的时序数据库之一;
4,选择注意:
Postgresql 的架构,使用难度,功能性介于 Oracle 数据库和 MySQL 数据库之间,但因其开源的推动,各方面也有不错的发展;
Postgresql 目前还没有比较主流和好用的监控平台,这是 postgresql 数据库目前存在的一个不足.第五种武器:Mongodb 数据库
1,定位:开源,多平台,文档型 nosql 数据库
非常主流的文档型 nosql 数据库,"最像关系型数据库",定位于 "灵活" 的 nosql 数据库
2,特点:
功能:数据文件存储格式为 BSON,模式自由,整体架构与关系型数据库有对应关系,具有较好的高可用性和伸缩性,有插件式存储引擎,新版本默认是 writedtiger 存储引擎;
部署: 部署比较简答,下载软件,设置好配置文件即可启动服务;
使用:不支持 SQL 语句,使用与 SQL 对应的 json 方式管理数据库;
监控:有比较丰富的监控和性能命令,官方有比较完善的图形监控系统,但需要购买;
备份:支持冷备份和热备份,可以使用 mongoexport/mongimport 进行逻辑备份,也可以使用基于 oplog 的 mongodump/mongorestore 物理热备份;
高可用:MongoDB master-slave 主从复制:在 master 节点上加 --master 参数,从数据库加 -slave 和 - source 参数,就可以实现同步,这种目前不建议;
ReplicaSets 复制集,在 mongodb 1.6 之后,开发了新的 replicaset,着呢家了故障自动切换和自动修复成员节点,各个 DB 将数据一致,建议使用这种方式;可以测试读写分离和故障转移;
扩展:mongodb 海量数据水平拆分,将数据分别存储在 sharding 各个节点上,构建出分布式集群.Sharding 架构由 底层多个 mongodb Shared Server,config 水平拆分配置库 config server,前端路由 route process,三部分构成.Sharding 集群底层可以是 mongodb 单实例,也可以高可用的 replicaSet 复制集.
3,适用场景:
网站后台数据库:mongodb 非常适合实话实说插入,更新与查询,并可以实时复制和高伸缩性,适合更新迭代快,需求变更多,以对象为主的网站应用;
小文件系统:对于 json 文件,二进制数据,适合用 mongodb 进行存储和查询
日志分析系统:对于数据量大的日志文件,IM 会话消息记录,适合用 mongodb 来保存和查询;
缓存系统:mongodb 数据库也会使用大量的内存,合理的设计,也可以作为缓存系统使用;不过目前缓存系统使用更多的方案是 memcached 和 redis.
4,选择注意:
Mongodb 不适合的场景:
高度事务性的系统:即传统的 OLTP 业务,mongodb,乃至其他 nosql,对事务性支持都不太好;
传统的统计分析应用:即传统的 OLAP 业务,需要高度优化的查询方式,mongodb 支持不好;
使用 SQL 语句比较方便的业务:mongodb 是 json 类型的查询方式,虽然也灵活,但不如用 SQL 方便,如果业务和适合 SQL,则就不太合适 mongodb 了.
第六种武器:Redis 数据库
1,定位:
开源,Linux 平台,key-value 键值型 Nosql 数据库
简单稳定,非常主流的,全数据 in-momory,定位于 "快" 的键值型 nosql 数据库
2,特点:
功能: 命令执行速度非常看,读写性能可达 10 万 / 秒;数据结构是 key-value 类似字典的功能,可以键过期 - 缓存,发布订阅 - 消息系统,简单的事物功能;
部署: 用下载软件介质,编译安装的方式,可以很快完成数据库部署;服务启动 redis-server,可以用默认配置,运行参数配置,配置文件启动,三种方式;redis 在 Linux 平台支撑较好,官方没有 Windows 版本,微软维护了一个分支;
使用:用 redis-cli 客户端连接,一般用简单的 set ,get,del 进行数据管理; 在单实例 redis 的基础上,进行可以数据持久化,主从复制,高可用和分布式等功能;
监控:在命令行界面有一些常用的命令显示状态和性能,在图形界面方面,有开源监控工具来监控和记录数据库的状态,比如 cachecloud;
备份:直接备份成物理问价的 RDB 持久化,基于 AOF 日志的实时 AOF 持久化
高可用:官方的 redis sentinel 哨兵高可用集群
扩展:官方基于分配槽的 redis cluster 分布式集群
3,适用场景:
缓存
基础消息队列系统
排行榜系统
计数器使用
社交网站的点赞,粉丝,下拉刷新等应用;
4,选择注意:
Redis 的使用场景,是 redis 适合的解决的问题,也有不适合解决的问题.
从数据规模角度讲,小数据规模使用 redis 比较合适,大数据规模使用 redis 不合适;(大数据规模,在一定程度上,可以用 SSDB 替代 redis 使用);
从数据冷热角度看,热数据适合放在 redis 中,冷数据不适合放在 redis 中.
第七种武器:Hbase 数据库
1,定位:开源,Linux 平台,列存储 nosql 数据库
可用于海量数据存储,与 Hadoop 生态圈结合,定位于 "大" 的列存储 nosql 数据库
2,特点:
功能:命令执行速度非常看,读写性能可达 10 万 / 秒;数据结构是 key-value 类似字典的功能,可以键过期 - 缓存,发布订阅 - 消息系统,简单的事物功能;
部署:相对其他数据库,hbase 的部署比较复杂,依赖 Hadoop,zookeeper 等组件,Hbase 集群包括一个 mater 节点,多个 regionServer,zookeeper 管理所有 regionServer,需要依次部署 Hadoop,zookeeper 之后,再部署 HBASE 集群;
使用:用 redis-cli 客户端连接,一般用简单的 set ,get,del 进行数据管理; 在单实例 redis 的基础上,进行可以数据持久化,主从复制,高可用和分布式等功能;
监控:在命令行界面有一些常用的命令显示状态和性能,在图形界面方面,有开源监控工具来监控和记录数据库的状态,比如 cachecloud;
备份:Hbase 一般用作海量数据的仓库,本身通过多层副本来保证数据安全性,不用进行专门的备份
高可用:HBASE 集群基于 Hadoop,需要依次部署 Hadoop 单机模式,集群模式,HA 模式,通过 Hadoop HA 实现高可用;
扩展:HBASE 以集群形式,依次是单机模式,伪分布模式,完全分布模式,底层基于 HDFS,zookeeper 可以很好地进行扩展;
3,适用场景:
两大用途:
用于简单数据写入和海量,结构简单数据查询的业务场景;
用于成为其他数据库备份和下沉的数据库;
4,选择注意:
Hbase 不适合的场景:对数据分析需求高,需要能够用 sql 或者简单的 MapReduce 实现分析需求的业务场景,不适合用 Hbase;
单表数据量,不超过千万时,使用 Hbase,体现不出 Hbase 的优势,而且会比较慢,不适合用 Hbase.
通过对上面数据库 "七种" 武器的描述,也可以看到目前常用数据库的使用脉络和选择顺序,对应一个业务,可以优先选择最流行的开源数据库--MySQL;如果出于稳定和商业版考虑,可以选择 Oracle 数据库,或者 SQL Server 数据库(与 Windows 体系结合);如果想用开源,有想要有足够的功能来应对各种场景,可以使用 postgresql 数据库.这四种数据库,都是关系型数据库,可以很好地满足大多数业务场景,解决通用性问题.
对于一些特殊性问题,尤其是想要在扩展性方面有比较高的要求,可以考虑 nosql 数据库.Mongodb 数据库,介于关系型数据库和非关系型数据库之间,兼具两者的特点,是非常流行的文档型 nosql 数据库;redis 定位于内存型键值 nosql 数据库;hbase 是海量文件存储的列式 nosql 数据库.根据合适的业务场景,选择适合的 nosql 数据库,可以对某一类,或某几类业务问题有很好的解决,可以作为关系型数据库的一种补充.
换个角度,MySQL,Oracle,SQL Server,Postgresql,mongodb 这五种数据库,也是 DB-Engines 排行榜上最流行的排名前五的五种数据库,从使用量和受欢迎程度,也可以看出这些数据库使用的广泛性.
来源: https://yq.aliyun.com/articles/399316