zoukankan      html  css  js  c++  java
  • MySQL、Redis 和 MongoDB 的优缺点

    一、关系型数据库:MySQL

    二、非关系型的数据库:MongoDB 和 Redis

     三、Mysql MongoDB Redis 的适用场景


     一、MySQL

    MySQL 是一个关系型数据库。
    MySQL在 WEB 应用方面 MySQL是最好的RDBMS(Relational Database Management System,关系数据库管理系统) 应用软件之一。
    MySQL 是一种关联数据库管理系统, 关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
    MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

    优点

    1、体积小、速度快、总体拥有成本低,开源,提供的接口支持多种语言连接操作。
    2、支持多种操作系统。
    3、MySQL 的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的MySQL 能很容易充分利用CPU。 
    4、 MySQL 有一个非常灵活而且安全的权限和口令系统。当客户与MySQL 服务器连接时,他们之间所有的口令传送被加密,而且MySQL 支持主机认证。
    5.、MySQL 能够提供很多不同的使用者界面,包括命令行客户端操作,网页浏览器,以及各式各样的程序语言界面,例如 C++,Perl,Java,PHP,以及Python。你可以使用事先包装好的客户端,或者干脆自己写一个合适的应用程序。MySQL可用于 Unix,Windows,以及OS/2等平台,因此它可以用在个人电脑或者是服务器上。

     

    缺点 

    1、不支持热备份。

    2、MySQL不支持自定义数据类型。

    3、MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变。

    4、MySQL对存储过程和触发器支持不够良好。

    5、尽管 MySQL 理论上仍是开源产品,也有人抱怨它诞生之后更新缓慢。然而,应该注意到有一些基于 MySQL 并完整集成的数据库(如 MariaDB),在标准的 MySQL 基础上带来了额外价值。

    6、MySQL对XML支持不够良好。

     

    二、MongoDB 和 Redis

    MongoDB 和 Redis 都是 NoSQL(非关系型的数据库),采用结构型数据存储。
    二者在使用场景中,存在一定的区别, 这也主要由于二者在内存映射的处理过程,持久化的处理方法不同。
    MongoDB建议集群部署,更多的考虑到集群方案,Redis更偏重于进程顺序写入,虽然支持集群,也仅限于主从模式。

     

    1.Redis

    Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
    它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
     

    优点:

    1、读写性能优异。
    2、支持数据持久化,支持 AOF 和 RDB 两种持久化方式。
    3、支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
    4、数据结构丰富:数据结构丰富:支持 string、hash、set、sortedset、list 等数据结构。
     

    缺点:

    1、Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的 IP 才能恢复。
    2、主机宕机,宕机前有部分数据未能及时同步到从机,切换 IP 后还会引入数据不一致的问题,降低了系统的可用性。
    3、Redis 的主从复制采用全量复制,复制过程中主机会 fork 出一个子进程对内存做一份快照, 并将子进程的内存快照保存为文件发送给从机,这一过程需要确保主机有足够多的空余内存。若快照文件较大,对集群的服务能力会产生较大的影响,而且复制过程是在从机新加入 集群或者从机和主机网络断开重连时都会进行,也就是网络波动都会造成主机和从机间的一 次全量的数据复制,这对实际的系统运营造成了不小的麻烦。
    4、Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

     

    2.MongoDB

    MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
    在高负载的情况下,添加更多的节点,可以保证服务器性能。
    MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
    MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

     

    优点:

    1、弱一致性(最终一致),更能保证用户的访问速度。

    2、文档结构的存储方式,能够更便捷的获取数。
    3、内置 GridFS,高效存储二进制大对象 (比如照片和视频)。

    4、内置Sharding。提供基于Range的Auto Sharding机制:一个collection可按照记录的范围,分成若干个段,切分到不同的Shard上。

    5、第三方支持丰富。(这是与其他的NoSQL相比,MongoDB也具有的优势)。

    6、性能优越:在使用场合下,千万级别的文档对象,近10G的数据,对有索引的ID的查询不会比mysql慢,而对非索引字段的查询,则是全面胜出。 

     

    缺点: 

    1、mongodb不支持事务操作。所以事务要求严格的系统(如果银行系统)肯定不能用它。
    2、mongodb占用空间过大。
    3、MongoDB没有如MySQL那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方。
     
    三、Mysql MongoDB Redis 的适用场景

    Mysql 或 postgresql 、 mssql 关系型数据库,作为最终的数据存储(稳定)

    MongoDB 可以作为一个中间数据缓存层组合出一个必要的数据实体(灵活的 json 结构可以组合出复杂数据类型,又可以复制多台服务器),读取速度也快,高并发构建主从服务器无压力。

    Redis 用于统计列表排序等环节 (对 redis 理解不深,只知道是内存数据库读写操作速度快)

  • 相关阅读:
    android:background背景图片被拉伸问题
    面试积累(String和StringBuffer, StringBuilder的理解)
    面试积累(冒泡排序和选择排序)
    面试积累(java的内存分析)
    面试积累(java配置环境变量)
    异常积累(SQLException)
    【linux】fdisk磁盘分区
    【走马观花】十一月十八日通州雨
    【linux】CentOS查看硬件信息
    【linux】go安装及配置
  • 原文地址:https://www.cnblogs.com/aaaazzzz/p/12791055.html
Copyright © 2011-2022 走看看