常见的nosql数据库有哪些?以及他们的特点与区别?
⼀、常见的nosql
⼆、Redis,Memcache,MongoDb的特点
1.Redis
优点:
1.⽀持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)
2.⽀持持久化操作,可以进⾏aof及rdb数据持久化到磁盘,从⽽进⾏数据备份或数据恢复等操作,较好的防⽌数据丢失 的⼿段。
3.⽀持通过Replication进⾏数据复制,通过master-slave机制,可以实时进⾏数据的同步复制,⽀持多级复制和增量复制,master-slave机制是Redis进⾏HA的重要⼿段。
4.单线程请求,所有命令串⾏执⾏,并发情况下不需要考虑数据⼀致性问题。
5.⽀持pub/sub消息订阅机制,可以⽤来进⾏消息订阅与通知。
6.⽀持简单的事务需求,但业界使⽤场景很少,并不成熟。
缺点:
1.Redis只能使⽤单线程,性能受限于CPU性能,故单实例CPU最⾼才可能达到5-6wQPS每秒(取决于数据结构,数据⼤⼩以及服务器硬件性能,⽇常环境中QPS⾼峰⼤约在1-2w左右)。
2.⽀持简单的事务需求,但业界使⽤场景很少,并不成熟,既是优点也是缺点。
3.Redis在string类型上会消耗较多内存,可以使⽤dict(hash表)压缩存储以降低内存耗⽤。
2.Memcache
优点:
1.Memcached可以利⽤多核优势,单实例吞吐量极⾼,可以达到⼏⼗万QPS(取决于key、value的字节⼤⼩以及服务器硬件性能,⽇常环境中QPS⾼峰⼤约在4-6w左右)。适⽤于最⼤程度扛量。
2.⽀持直接配置为session handle。
缺点:
1只⽀持简单的key/value数据结构,不像Redis可以⽀持丰富的数据类型。
2.⽆法进⾏持久化,数据不能备份,只能⽤于缓存使⽤,且重启后数据全部丢失。
3.⽆法进⾏数据同步,不能将MC中的数据迁移到其他MC实例中。
4.Memcached内存分配采⽤Slab Allocation机制管理内存,value⼤⼩分布差异较⼤时会造成内存利⽤率降低,并引发低利⽤率时依然出现踢出等问题。需要⽤户注重value设计。
3.MongoDB
优点:
1.更⾼的写负载,MongoDB拥有更⾼的插⼊速度。
2.处理很⼤的规模的单表,当数据表太⼤的时候可以很容易的分割表。
3.⾼可⽤性,设置M-S不仅⽅便⽽且很快,MongoDB还可以快速、安全及⾃动化的实现节点(数据中⼼)故障转移。
4.快速的查询,MongoDB⽀持⼆维空间索引,⽐如管道,因此可以快速及精确的从指定位置获取数据。MongoDB在启动后会将数据库中的数据以⽂件映射的⽅式加载到内存中。如果内存资源相当丰富的话,这将极⼤地提⾼数据库的查询速度。
5.⾮结构化数据的爆发增长,增加列在有些情况下可能锁定整个数据库,或者增加负载从⽽导致性能下降,由于MongoDB的弱数据结构模式,添加1个新字段不会对旧表格有任何影响,整个过程会⾮常快速。
缺点:
1.不⽀持事务。
2.MongoDB占⽤空间过⼤。
3.MongoDB没有成熟的维护⼯具。
三、Redis、Memcache和MongoDB的区别
1.性能
三者的性能都⽐较⾼,总的来讲:Memcache和Redis差不多,要⾼于MongoDB。
2.便利性
memcache数据结构单⼀。
redis丰富⼀些,数据操作⽅⾯,redis更好⼀些,较少的⽹络IO次数。
mongodb⽀持丰富的数据表达,索引,最类似关系型数据库,⽀持的查询语⾔⾮常丰富。
3,存储空间
redis在2.0版本后增加了⾃⼰的VM特性,突破物理内存的限制;可以对key value设置过期时间(类似memcache)。
memcache可以修改最⼤可⽤内存,采⽤LRU算法。
redis支持的数据结构 mongoDB适合⼤数据量的存储,依赖操作系统VM做内存管理,吃内存也⽐较厉害,服务不要和别的服务在⼀起。
4.可⽤性
redis,依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,
⽆增量复制,因性能和效率问题,所以单点问题⽐较复杂;不⽀ 持⾃动sharding,需要依赖程序设定⼀致hash 机制。⼀种替代⽅案是,不⽤redis本⾝的复制机制,采⽤⾃⼰做主动复制(多份存储),或者改成增量复制的⽅式(需要⾃⼰实现),⼀致性问题和性能的权衡。
Memcache本⾝没有数据冗余机制,也没必要;对于故障预防,采⽤依赖成熟的hash或者环状的算法,解决单点故障引起的抖动问题。 mongoDB⽀持master-slave,replicaset(内部采⽤paxos选举算法,⾃动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制。
5.可靠性
redis⽀持(快照、AOF):依赖快照进⾏持久化,aof增强了可靠性的同时,对性能有所影响。
memcache不⽀持,通常⽤在做缓存,提升性能。
MongoDB从1.8版本开始采⽤binlog⽅式⽀持持久化的可靠性。
6.⼀致性
Memcache 在并发场景下,⽤cas保证⼀致性。
redis事务⽀持⽐较弱,只能保证事务中的每个操作连续执⾏。
mongoDB不⽀持事务。
7.数据分析
mongoDB内置了数据分析的功能(mapreduce),其他两者不⽀持。
8.应⽤场景
redis:数据量较⼩的更性能操作和运算上。
memcache:⽤于在动态系统中减少数据库负载,提升性能;做缓存,提⾼性能(适合读多写少,对于数据量⽐较⼤,可以采⽤sharding)。
MongoDB:主要解决海量数据的访问效率问题。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论