1. MySQL数据库
MySQL是最受欢迎的开源SQL数据库管理系统,它由 MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB的注册商标。
MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass- deployed)的软件中去。
1、定位:
开源、多平台、关系型数据库
目前使用最广泛、流行度最高的的开源数据库。
2、特点:
(1)支持事务,符合关系型数据库原理,符合ACID,支持多数SQL规范,以二维表方式组织数据,有插件式存储引擎,支持多种存储引擎格式
(2)用编译安装的方式,或者二进制包的方式,按照“安装软件-创建实例-库表用户初始化”,可以很快完成数据库部署
(3)使用标准的SQL语句进行数据库管理,简单SQL语句的并发和性能较好,对视图、存储过程、函数、触发器等支持的不是太好
(4)在命令行界面有一些常用的命令显示状态和性能,在图形界面方面,有比较多的开源监控工具来监控和记录数据库的状态,比如zabbix,nagios,cacti,lepus等
(5)逻辑备份 mysqldump/mysqldumper ,物理备份 用xtrabackup等工具进行备份;
(6)MySQL高可用有多种方案,官方有基础的master-slave主从复制,新版本的innodb cluster,第三方的有MHA等高可用方案;
(7)MySQL水平拆分,可以通过水平拆分proxy中间进行逻辑映射和拆分,扩大MySQL数据库的并发能力和吞吐量。
3、适用场景:
默认的innodb存储引擎,支持高并发,简单的绝大部分OLTP场景;
Tokudb存储引擎,使用高并发insert的场景;
Inforbright存储引擎,可以进行列压缩和OLAP统计查询场景;
4、选择注意:
使用MySQL进行OLTP业务时,需要注意数据量级,如果数据量级过大,需要进行水平拆分;
如果有OLAP需求,可以结合其他架构综合考虑。
2. Microsoft SQL Server数据库
SQL Server是由微软开发的数据库管理系统,是Web上最流行的用于存储数据的数据库,它已广泛用于电子商务、银行、保险、电力等与数据库有关的行业。
目前最新版本是SQL Server 2005,它只能在Windows上运行,操作系统的系统稳定性对数据库十分重要。并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。
SQL Server 提供了众多的Web和电子商务功能,如对XML和Internet标准的丰富支持,通过Web对数据进行轻松安全的访问,具有强大的、灵活的、基于Web的和安全的应用程序管理等。而且,由于其易操作性及其友好的操作界面,深受广大用户的喜爱。
1、定位:
商业、Windows平台、关系型数据库
最早接触、与微软体系结合紧密的的商业数据库,属于“微软技术体系”
2、特点:
(1)支持事务,符合关系型数据库原理,符合ACID,支持多数SQL规范,以二维表方式组织数据
(2)在Windows平台,用图形界面进行软件安装;
使用:在Windows平台,使用SQL Server Mangement Studio图形界面进行安装;
(3)一般通过Windows资源管理和SQL server图形工具进行系统和数据库性能显示;
(4)通常用第三方备份恢复软件进行备份恢复;
高可用:通过共享存储和双机热备的方式,可以实现SQL Server数据库的高可用;
(5) SQL Server数据库集群采用共存存储的方式,通过硬件垂直升级来对数据库集群进行扩展;
3、适用场景:
大多数OLTP场景(与微软体系配合)
4、选择注意:
SQL Server与微软技术体系结合比较紧密,绝大多数工作,都是通过图形界面完成,对于习惯使用命令行的DBA可能会有不习惯;
SQL server对双引号,大小写,元信息的管理和处理方式,与其他数据库很不相同,需要注意;
使用SQL Server满足OLTP业务,会有比较好的效果,但对于大数据量的OLAP业务,最好还是选用专门的OLAP架构,不要在同一个SQL Server实例上混用OLTP和OLAP业务;
SQL server属于商业软件,需要注意版权和licence授权费用;
3. Oracle数据库
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。
1、定位:
商业、多平台、关系型数据库
功能最强大、最复杂、市场占比最高的商业数据库
2、特点:
(1)支持事务,符合关系型数据库原理,符合ACID,支持多数SQL规范,以二维表方式组织数据
(2)Oracle单实例数据库部署相对容易,但Oracle RAC集群环境,部署的步骤和依赖条件都比较多;
(3)通常使用命令行工具,进行各种数据库的管理,通常也可以用shell脚本和python脚本提高Oracle数据库管理效率;各种管理功能,都比较强大;
(4)Oracle官方有比较全面的监控工具,常用的第三方监控平台,如zabbix,cacti,lepus等都有对Oracle数据库的各项指标的完善监控;
(5)支持冷备份和热备份,可以用 exp/imp , expdp/impdp等进行逻辑备份和恢复,可以使用强大的RMAN工具进行专业的物理热备份和恢复;
(6)Oracle数据库的高可用架构,可以用第三方双机热备软件,结合Oracle单实例实现;可以使用Oracle Dataguard,实现master和standby的备份;可以使用 Oracle RAC集群实现实例级别的高可用和负载均衡,使用ASM实现存储级别的高可用;
(7)由于Oracle集群采用共享存储的方式,一般只能通过垂直硬件升级进行升级;
3、适用场景:
绝大多数OLTP场景,部分OLAP
4、选择注意:
Oracle从架构到运维,可以说是最难的数据库,学习和使用难度较高。
4. Postgresql数据库
PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。
PostgreSQL 是一个免费的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。
1、定位:
开源、多平台、关系型数据库,功能最强大的开源数据库。
2、特点:
(1)支持事务,符合关系型数据库原理,符合ACID,支持多数SQL规范,以二维表方式组织数据;
(2)postgresql需要先准备好Python等环境,然后编译安装软件,初始化数据库,启动实例,整个部署过程相对比较清晰;
(3)postgresql数据库可以使用命令行方式进行管理,也可以通过pgadmin图形工具进行管理;各种管理功能,都比较强大;
(4) 可以在命令行中查看各种性能视图和状态视图;相对其他其他数据库,并没有太好的图形监控工具和平台;
(5)支持冷备份和热备份,可以用 COPY命令进行逻辑导出和导入;用pgdump和pgrestore进行物理备份和恢复;
(6)postgresql 官方支持 master-standby复制;也可以用Slony-I第三方组件进行数据库同步;
(7)postgresql可以通过修改源码实现的postgres-XC实现水平扩展;
3、适用场景:
绝大多数OLTP场景,部分OLAP
适合目前互联网需要的一些信息,比如地理位置信息处理;
以postgresql作为底层数据库的greenplum数据仓库,是主流的MPP数据仓库;
基于postgresql的TimeScaleDB,是目前比较火的时序数据库之一;
4、选择注意:
Postgresql的架构、使用难度、功能性介于Oracle数据库和MySQL数据库之间,但因其开源的推动,各方面也有不错的发展;
Postgresql目前还没有比较主流和好用的监控平台,这是postgresql数据库目前存在的一个不足。
5. Sybase数据库
美国Sybase公司研制的一种关系型数据库系统,是一种典型的UNIX或WindowsNT平台上客户机/服务器环境下的大型数据库系统。
Sybase提供了一套应用程序编程接口和库,可以与非Sybase数据源及服务器集成,允许在多个数据库之间复制数据,适于创建多层应用。系统具有完备的触发器、存储过程、规则以及完整性定义,支持优化查询,具有较好的数据安全性。
Sybase通常与SybaseSQLAnywhere用于客户机/服务器环境,前者作为服务器数据库,后者为客户机数据库,采用该公司研制的PowerBuilder为开发工具,在我国大中型系统中具有广泛的应用。
6. DB2数据库
DB2主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境,应用于所有常见的服务器操作系统平台下。
DB2提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模应用程序的执行能力,具有与平台无关的基本功能和SQL命令。DB2采用了数据分级技术,能够使大型机数据很方便地下载到LAN数据库服务器,使得客户机/服务器用户和基于LAN的应用程序可以访问大型机数据,并使数据库本地化及远程连接透明化。
DB2以拥有一个非常完备的查询优化器而著称,其外部连接改善了查询性能,并支持多任务并行查询。 DB2具有很好的网络支持能力,每个子系统可以连接十几万个分布式用户,可同时激活上千个活动线程,对大型分布式应用系统尤为适用。
7. Access数据库
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一。
Microsoft Office Access是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。它是微软OFFICE的一个成员, 在包括专业版和更高版本的office版本里面被单独出售。
MS ACCESS以它自己的格式将数据存储在基于Access Jet的数据库引擎里。它还可以直接导入或者链接数据(这些数据存储在其他应用程序和数据库)。
软件开发人员和数据架构师可以使用Microsoft Access开发应用软件,“高级用户”可以使用它来构建软件应用程序。和其他办公应用程序一样,ACCESS支持Visual Basic宏语言,它是一个面向对象的编程语言,可以引用各种对象,包括DAO(数据访问对象),ActiveX数据对象,以及许多其他的ActiveX组件。可视对象用于显示表和报表,他们的方法和属性是在VBA编程环境下,VBA代码模块可以声明和调用Windows操作系统函数。
(1)完善地管理各种数据库对象,具有强大的数据组织、用户管理、安全检查等功能。
(2)强大的数据处理功能
(2)强大的数据处理功能(3)可以方便地生成各种数据对象,利用存储的数据建立窗体和报表,可视性好
(4)作为Office套件的一部分,可以与Office集成,实现无缝连接
(5)能够利用Web检索和发布数据,实现与Internet的连接。 Access主要适用于中小型应用系统,或作为客户机/服务器系统中的客户端数据库。
非关系型数据库
1. Mongodb数据库
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
1、定位:
开源、多平台、文档型nosql数据库
非常主流的文档型nosql数据库,“最像关系型数据库”,定位于“灵活”的nosql数据库
2、特点:
(1)数据文件存储格式为BSON,模式自由,整体架构与关系型数据库有对应关系,具有较好的高可用性和伸缩性,有插件式存储引擎,新版本默认是writedtiger存储引擎;
(2)部署比较简答,下载软件,设置好配置文件即可启动服务;
(3)不支持SQL语句,使用与SQL对应的json方式管理数据库;
(4)有比较丰富的监控和性能命令,官方有比较完善的图形监控系统,但需要购买;
(5)支持冷备份和热备份,可以使用mongoexport/mongimport进行逻辑备份,也可以使用基于oplog的mongodump/mongorestore物理热备份;
(6)MongoDB master-slave主从复制:在master节点上加 –master参数,从数据库加 -slave和-source参数,就可以实现同步,这种目前不建议;ReplicaSets复制集,在mongodb 1.6之后,开发了新的 replicaset,着呢家了故障自动切换和自动修复成员节点,各个DB将数据一致,建议使用这种方式;可以测试读写分离和故障转移;
(7)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了。
2. Redis数据库
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
1、定位:
开源、Linux平台、key-value键值型Nosql数据库
简单稳定,非常主流的、全数据in-momory、定位于“快”的键值型nosql数据库
2、特点:
(1)命令执行速度非常快,读写性能可达10万/秒;数据结构是key-value类似字典的功能,可以键过期-缓存,发布订阅-消息系统,简单的事物功能;
(2)用下载软件介质,编译安装的方式,可以很快完成数据库部署;服务启动redis-server,可以用默认配置、运行参数配置、配置文件启动,三种方式;redis在Linux平台支撑较好,官方没有Windows版本,微软维护了一个分支;
(3)用redis-cli客户端连接,一般用简单的 set ,get,del 进行数据管理; 在单实例redis的基础上,进行可以数据持久化,主从复制,高可用和分布式等功能;
(4)在命令行界面有一些常用的命令显示状态和性能,在图形界面方面,有开源监控工具来监控和记录数据库的状态,比如cachecloud;
(5)直接备份成物理问价的RDB持久化,基于AOF日志的实时AOF持久化
(6)官方的 redis sentinel哨兵高可用集群
(7)官方基于分配槽的 redis cluster分布式集群
3、适用场景:
缓存
基础消息队列系统
排行榜系统
计数器使用
社交网站的点赞、粉丝、下拉刷新等应用;
4、选择注意:
Redis的使用场景,是redis适合的解决的问题,也有不适合解决的问题。
从数据规模角度讲,小数据规模使用redis比较合适,大数据规模使用redis不合适;(大数据规模,在一定程度上,可以用SSDB替代redis使用);
从数据冷热角度看,热数据适合放在redis中,冷数据不适合放在redis中。
3. Hbase数据库
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。
HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
1、定位:
开源、Linux平台、列存储nosql数据库
可用于海量数据存储、与Hadoop生态圈结合、定位于“大”的列存储nosql数据库
2、特点:
(1)命令执行速度非常快,读写性能可达10万/秒;数据结构是key-value类似字典的功能,可以键过期-缓存,发布订阅-消息系统,简单的事物功能;
(2)相对其他数据库,hbase的部署比较复杂,依赖Hadoop,zookeeper等组件,Hbase集群包括一个mater节点,多个regionServer,zookeeper管理所有regionServer,需要依次部署Hadoop、zookeeper之后,再部署HBASE集群;
(3)用redis-cli客户端连接,一般用简单的 set ,get,del 进行数据管理; 在单实例redis的基础上,进行可以数据持久化,主从复制,高可用和分布式等功能;
(4)在命令行界面有一些常用的命令显示状态和性能,在图形界面方面,有开源监控工具来监控和记录数据库的状态,比如cachecloud;
(5)Hbase一般用作海量数据的仓库,本身通过多层副本来保证数据安全性,不用进行专门的备份
(6)HBASE集群基于Hadoop,需要依次部署Hadoop单机模式、集群模式、HA模式,通过Hadoop HA实现高可用;
(7)HBASE以集群形式,依次是单机模式,伪分布模式,完全分布模式,底层基于HDFS,zookeeper可以很好地进行扩展;
3、适用场景:
两大用途:
用于简单数据写入和海量、结构简单数据查询的业务场景;
用于成为其他数据库备份和下沉的数据库;
4、选择注意:
Hbase不适合的场景:对数据分析需求高,需要能够用sql或者简单的MapReduce实现分析需求的业务场景,不适合用Hbase;
单表数据量,不超过千万时,使用Hbase,体现不出Hbase的优势,而且会比较慢,不适合用Hbase。
4. Memcaced数据库
Memcaced是一个开源的、高性能的、具有分布式内存对象的缓存系统。通过它可以减轻数据库负载,加速动态的web应用,最初版本由LiveJoumal 的Brad Fitzpatrick在2003年开发完成。目前全球有非常多的用户都在使用它来架构主机的大负载网站或提升主机的高访问网站的响应速度。注意:Memcache 是这个项目的名称,而Memcached是服务端的主程序文件名。
缓存一般用来保存一些进程被存取的对象或数据,通过缓存来存取对象或数据要比在磁盘上存取快很多,前者是内存,后者是磁盘、Memcached是一种纯内存缓存系统,把经常存取的对象或数据缓存在memcached的内存中,这些被缓存的数据被程序通过API的方式被读取,memcached里面的数据就像一张巨大的hash表,数据以key-value对的方式存在。Memcached通过缓存经常被存取的对象或数据,从而减轻频繁读取数据库的压力,提高网站的响应速度,构建出快速更快的可扩展的Web应用。