Mongdb、MySQL、Redis区别和Nginx、Haproxy、LVS的优缺点对比

Mongdb、MySQL、Redis区别和Nginx、Haproxy、LVS的优缺点对比
Mongdb的优势:1、快速!拥有适量级内存的Mongdb的性能是非常迅速的,它将热数据存储在物理内存中(而不仅仅是索引和少部分数据),使得热数据的读写变得十分快速,从而提高了整体的速度和效率。
2、高扩展性!Mongdb的高可用与集群架构拥有十分高效的扩展性,通过物理机器的增加,以及sharding的增加,Mongdb的扩展将达到一个十分惊人的地步。
3、自身的Failover!Mongdb的副本集配置中,当主库遇到问题,无法继续提供服务的时候,副本集将选举出一个新的主库来继续提供服务。
4、Json的存储格式!Mongdb和Bson存储格式十分适合文档格式的存储和查询。
MongoDB 的劣势:不支持事务操作(最主要的缺点)、MongoDB 占用空间过大、MongoDB 没有如 MySQL 那样成熟的维护工具。
Redis:内存数据库,持久化方式:Redis所有数据库都是放在内存中的,持久化是使用RDB方式或AOF方式。

数据量和性能的比较:

当物理内存够用的时候,Redis > MongoDB > MySQL
当物理内存不够用的时候,Redis 和 MongoDB 都会使用虚拟内存。
实际上如果Redis要开始虚拟内存,那很明显要么加内存条,要么你就该换个数据库了。
但是,MongoDB 不一样,只要业务上能保证冷热数据的读写比,使得热数据在物理内存中 mmap 的交换较少,MongoDB 还是能够保证性能。有人使用 MongoDB 存储了上T的数据。
MySQL,MySQL根本就不需要担心数据量跟内存下的关系。不过,内存的量跟热数据的关系会极大地影响性能表现。
当物理内存和虚拟内存都不够用的时候,估计除了 MySQL 你没什么好选择了。
其实,从数据存储原理来看,我更倾向于将 MongoDB 归类为硬盘数据库,但是使用了 mmap 作为加速的手段而已。
MongoDB 与 MySQL 命令对比
传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB 是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。
MongoDB (文档型数据库):提供可扩展的高性能数据存储
1、基于分布式文件存储
2、高负载情况下添加更多节点,可以保证服务器性能
3、将数据存储为一个文档
MongoDB 与 MySQL 的比较
1、稳定性
2、索引,索引放在内存中,能够提升随机读写的性能。如果索引不能完全放在内存,一旦出现随机读写比较高的时候,就会频繁地进行磁盘交换,MongoDB 的性能就会急剧下降
3、占用的空间很大,因为它属于典型空间换时间原则的类型。那么它的磁盘空间比普通数据库会浪费一些,而且到目前为止它还没有实现在线压缩功能,
在 MongoDB 中频繁的进行数据增删改时,如果记录变了,例如数据大小发生了变化,这时候容易产生一些数据碎片,出现碎片引发的结果,一个是索引会出现性能问题,另外一个就是在一定的时间后,所占空间会莫明其妙地增大,所以要定期把数据库做修复,定期重新做索引,这样会提升MongoDB 的稳定性和效率。在最新的版本里,它已经在实现在线压缩,估计应该在2.0版左右,应该能够实现在线压缩,可以在后台执行现在repair DataBase 的一些操作。如果那样,就解决了目前困扰我们的大问题。
4、MongoDB 对数据间的事务关系支持比较弱
5、运维不方便
MongoDB 相对于 MySQL 的优势

  1. 适合那些对数据库具体数据格式不明确或者数据库数据格式经常变化的需求模型,而且对开发者十分友好。
    2. 自带一个分布式文件系统,可以很方便地部署到服务器机群上。
    MongoDB 里有一个Shard的概念,就是方便为了服务器分片使用的。每增加一台Shard,MongoDB 的插入性能也会以接近倍数的方式增长,磁盘容量也很可以很方便地扩充。
  2. 自带了对map-reduce运算框架的支持,这也很方便进行数据的统计。类似于group by。
    MongoDB 和 Redis 的区别:

    MongoDB 更类似 MySQL,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询 JSON 数据,能存储海量数据,但是不支持事务。
    MySQL 在大数据量时效率显著下降,MongoDB 更多时候作为关系数据库的一种替代。
    内存管理机制
    Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。
    MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
    支持的数据结构
    Redis 支持的数据结构丰富,包括hash、set、list等。
    MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
    集群:MongoDB 集群技术比较成熟,Redis从3.0开始支持集群。二者均可支持持久化。
    不适用场景:1、需要使用复杂sql的操作;2、事务性系统;
    Mongdb、MySQL、Redis区别和Nginx、Haproxy、LVS的优缺点对比

    MySQL 与 Redis 的区别:

    MySQL 是持久化存储,存放在磁盘里面,检索的话,会涉及到一定的 IO,为了解决这个瓶颈,于是出现了缓存,比如现在用的最多的 memcached(简称mc)。首先,用户访问mc,如果未命中,就去访问 MySQL,之后像内存和硬盘一样,把数据复制到mc一部分。Redis 和mc都是缓存,并且都是驻留在内存中运行的,这大大提升了高数据量web访问的访问速度。然而mc只是提供了简单的数据结构,比如 string存储;Redis却提供了大量的数据结构,比如string、list、set、hashset、sorted set这些,这使得用户方便了好多,毕竟封装了一层实用的功能,同时实现了同样的效果,当然用Redis而慢慢舍弃mc。
    内存和硬盘的关系,硬盘放置主体数据用于持久化存储,而内存则是当前运行的那部分数据,CPU访问内存而不是磁盘,这大大提升了运行的速度,当然这是基于程序的局部化访问原理。
     推理到 Redis + MySQL,它是内存+磁盘关系的一个映射,MySQL 放在磁盘,Redis放在内存,这样的话,web应用每次只访问Redis,如果没有找到想要的数据,才去访问 MySQL。
     然而 Redis + MySQL 和内存+磁盘的用法最好是不同的。
    前者是内存数据库,数据保存在内存中,当然速度快。
    后者是关系型数据库,功能强大,数据访问也就慢。
    像memcache,MongoDB,Redis,都属于No SQL系列。
    不是一个类型的东西,应用场景也不太一样,还是要看你的需求来决定。

    LVS、Haproxy、Nginx的优缺点:

    LVS的优点:抗负载能力强,工作在第4层仅做分发之用,没有流量产生,这也决定了它在负载均衡软件里的性能最强,同时保证了均衡器的IO性能不会受大流量的影响。工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Hear+Beat;应用范围广,可以对所有应用做负载均衡,配置性能低,不需要太多的接触,大大减少了人为出错的机率。
    LVS的缺点:软件本身不支持正则,不能做动静分离,若网站应用较庞大,LVS+Keepalived就较复杂。
    Nginx的优点:工作在第7层,可以针对http应用做一些分流的策略,比如针对域名,目录结构等,它的正则比Haproxy更强大灵活;对网络依赖小,理论上能ping通就能进行负载功能,安装和配置较简单,测试较方便,可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;可以通过端口检测到服务器内部故障,如根据服务器处理网页返回的状态码,超时等等;且会把返回错误的请求重新提交到另一个节点;同时是功能强大的web应用服务器,在处理静态页面、抗高并发方面相对Apache有优势。
    Nginx的缺点:不支持url来检测,仅支持http、https和email,比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。Nginx和Session的保持,Cookie的引导能力较弱。
    Haproxy的优点:1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段);2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。3、HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。 4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡。
    Haproxy的缺点:不支持POP/SMTP协议;不支持HTTP cache功能。现在不少开源的lb项目,都或多或少具备HTTP cache功能; 重载配置的功能需要重启进程,虽然也是soft restart,但没有Nginx的reaload更为平滑和友好;多进程模式支持不够好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章