MongoDB、Hbase、Redis等NoSQL优劣势、应用场景

NoSQL的四大种类

NoSQL数据库在整个数据库领域的江湖地位已经不言而喻。在大数据时代,虽然RDBMS很优秀,但是面对快速增长的数据规模和日渐复杂的数据模型,RDBMS渐渐力不从心,无法应对很多数据库处理任务,这时NoSQL凭借易扩展、大数据量和高性能以及灵活的数据模型成功的在数据库领域站稳了脚跟。

目前大家基本认同将NoSQL数据库分为四大类:键值存储数据库,文档型数据库,列存储数据库和图形数据库,其中每一种类型的数据库都能够解决关系型数据不能解决的问题。在实际应用中,NoSQL数据库的分类界限其实没有那么明显,往往会是多种类型的组合体。

主流nosql的详解:MongoDB、Hbase、Redis

MongoDB

MongoDB 是一个高性能,开源,无模式的文档型数据库,开发语言是C++。它在许多场景下可用于替代统的关系型数据库或键/值存储方式。

1.MongoDB特点

所用语言:C++

特点:保留了SQL一些友好的特性(查询,索引)。

使用许可: AGPL(发起者: Apache)

协议: Custom, binary( BSON)

Master/slave复制(支持自动错误恢复,使用 sets 复制)

内建分片机制

支持 javascript表达式查询

可在服务器端执行任意的 javascript函数

update-in-place支持比CouchDB更好

在数据存储时采用内存到文件映射

对性能的关注超过对功能的要求

建议最好打开日志功能(参数 --journal)

在32位操作系统上,数据库大小限制在约2.5Gb

空数据库大约占 192Mb

采用 GridFS存储大数据或元数据(不是真正的文件系统)

2.MongoDB优点:

1)更高的写负载,MongoDB拥有更高的插入速度。

2)处理很大的规模的单表,当数据表太大的时候可以很容易的分割表。

3)高可用性,设置M-S不仅方便而且很快,MongoDB还可以快速、安全及自动化的实现节点 (数据中心)故障转移。

4)快速的查询,MongoDB支持二维空间索引,比如管道,因此可以快速及精确的从指定位置 获取数据。MongoDB在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内 存资源相当丰富的话,这将极大地提高数据库的查询速度。

5)非结构化数据的爆发增长,增加列在有些情况下可能锁定整个数据库,或者增加负载从而 导致性能下降,由于MongoDB的弱数据结构模式,添加1个新字段不会对旧表格有任何影响, 整个过程会非常快速。

3.MongoDB缺点:

1)不支持事务。

2)MongoDB占用空间过大 。

3)MongoDB没有成熟的维护工具。

4.MongoDB应用场景

1.)适用于实时的插入、更新与查询的需求,并具备应用程序实时数据存储所需的复制及高度伸缩性;

2) 非常适合文档化格式的存储及查询;

3.)高伸缩性的场景:MongoDB 非常适合由数十或者数百台服务器组成的数据库。

4.)对性能的关注超过对功能的要求。

HBase

HBase 是 Apache Hadoop 中的一个子项目,属于 bigtable 的开源版本,所实现的语言为Java(故依赖 Java SDK)。HBase 依托于 Hadoop 的 HDFS(分布式文件系统)作为最基本存储基础单元。

1.HBase 特点:

所用语言: Java

特点:支持数十亿行X上百万列

使用许可: Apache

协议:HTTP/REST (支持 Thrift,见编注4)

在 BigTable之后建模

采用分布式架构 Map/reduce

对实时查询进行优化

高性能 Thrift网关

通过在server端扫描及过滤实现对查询操作预判

支持 XML, Protobuf, 和binary的HTTP

Cascading, hive, and pig source and sink modules

基于 Jruby( JIRB)的shell

对配置改变和较小的升级都会重新回滚

不会出现单点故障

堪比MySQL的随机访问性能

  1. HBase 优点

1) 存储容量大,一个表可以容纳上亿行,上百万列;

2.)可通过版本进行检索,能搜到所需的历史版本数据;

3.)负载高时,可通过简单的添加机器来实现水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce);

4.)在第3点的基础上可有效避免单点故障的发生。

4.HBase 缺点

  1. 基于Java语言实现及Hadoop架构意味着其API更适用于Java项目;
  2. node开发环境下所需依赖项较多、配置麻烦(或不知如何配置,如持久化配置),缺乏文档;
  3. 占用内存很大,且鉴于建立在为批量分析而优化的HDFS上,导致读取性能不高;
  4. API相比其它 NoSql 的相对笨拙。

5.HBase 适用场景

1)bigtable类型的数据存储;

2)对数据有版本查询需求;

3)应对超大数据量要求扩展简单的需求。

Redis

Redis 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。目前由VMware主持开发工作。

1.Redis 特点:

所用语言:C/C++

特点:运行异常快

使用许可: BSD

协议:类 Telnet

有硬盘存储支持的内存数据库,

但自2.0版本以后可以将数据交换到硬盘(注意, 2.4以后版本不支持该特性!)

Master-slave复制(见编注3)

虽然采用简单数据或以键值索引的哈希表,但也支持复杂操作,例如 ZREVRANGEBYSCORE。

INCR & co (适合计算极限值或统计数据)

支持 sets(同时也支持 union/diff/inter)

支持列表(同时也支持队列;阻塞式 pop操作)

支持哈希表(带有多个域的对象)

支持排序 sets(高得分表,适用于范围查询)

Redis支持事务

支持将数据设置成过期数据(类似快速缓冲区设计)

Pub/Sub允许用户实现消息机制

  1. Redis 优势

1)非常丰富的数据结构;

2.)Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断;

3.)数据存在内存中,读写非常的高速,可以达到10w/s的频率。

3.Redis 缺点

1) Redis3.0后才出来官方的集群方案,但仍存在一些架构上的问题;

2.)持久化功能体验不佳——通过快照方法实现的话,需要每隔一段时间将整个数据库的数据写到磁盘上,代价非常高;而aof方法只追踪变化的数据,类似于mysql的binlog方法,但追加log可能过大,同时所有操作均要重新执行一遍,恢复速度慢;

3)由于是内存数据库,所以,单台机器,存储的数据量,跟机器本身的内存大小。虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。

4.Redis 应用场景:

最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。

例如:微博、数据分析、实时数据搜集、实时通讯等。

原文地址:http://blog.51cto.com/13732225/2166663

时间: 2024-11-05 12:18:59

MongoDB、Hbase、Redis等NoSQL优劣势、应用场景的相关文章

Linux系统安装NoSQL(MongoDB和Redis)步骤及问题解决办法

?更多技术干货请戳:听云博客 如下是我工作中的记录,介绍的是linux系统下NoSQL:MongoDB和Redis的安装过程和遇到的问题以及解决办法: 需要的朋友可以按照如下步骤进行安装,可以快速安装MongoDB和Redis,希望可以帮助大家:)! 一.MongoDB 1.MongoDB安装 (1)将安装包mongodb-linux-i686-3.0.2.tgz拷贝到要安装的服务器中 这里我用的rz命令,如果不支持需要安装yum -y install lrzsz (2)解压安装程序 tar x

数据库应用(Mysql、Mongodb、Redis、Memcached、CouchDB、Cassandra)

目前,主流数据库包括关系型(SQL)和非关系型(NoSQL)两种. 关系数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据,支持复杂的事物处理和结构化查询.代表实现有MySQL.Oracle.PostGreSQL.MariaDB.SQLServer等. 非关系数据库是新兴的数据库技术,它放弃了传统关系型数据库的部分强一致性限制,带来性能上的提升,使其更适用于需要大规模并行处理的场景.非关系型数据库是关系型数据库的良好补充,代表产品有MongoDB.Memca

MongoDB和Redis区别

简介 MongoDB更类似MySQL,支持字段索引.游标操作,其优势在于查询功能比较强大,擅长查询JSON数据,能存储海量数据,但是不支持事务. mysql在大数据量时效率显著下降,mongodb更多时候作为关系数据库的一种替代. 内存管理机制 Redis数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的LRU算法删除数据. MongoDB数据存在内存,由Linux系统mmap实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘. 支持的数据结构 redis支持的数据结构丰富,包

MongoDB与Redis的比较

MongoDB和Redis都是NoSQL,采用结构型数据存储.二者在使用场景中,存在一定的区别,这也主要由于二者在内存映射的处理过程,持久化的处理方法不同. MongoDB建议集群部署,更多的考虑到集群方案,Redis更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式. 比较指标 MongoDB(v2.4.9) Redis(v2.4.17) 比较说明 实现语言 c++ c/c++ - 协议 BSON,自定义二进制 类telnet - 性能 依赖内存,TPS较高 依赖内存,TPS非常高 Red

Mongodb 和Redis 的相同点和不同点

MongoDB和Redis都是NoSQL,采用结构型数据存储.二者在使用场景中,存在一定的区别,这也主要由于二者在内存映射的处理过程,持久化的处理方法不同.MongoDB建议集群部署,更多的考虑到集群方案,Redis更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式. 指标  MongoDB(v2.4.9)  Redis(v2.4.17)  比较说明 实现语言  C++ C/C++ - 协议 BSON.自定义二进制 类Telnet - 性能 依赖内存,TPS较高 依赖内存,TPS非常高 Re

Redis性能调优

Redis性能调优 尽管Redis是一个非常快速的内存数据存储媒介,也并不代表Redis不会产生性能问题.前文中提到过,Redis采用单线程模型,所有的命令都是由一个线程串行执行的,所以当某个命令执行耗时较长时,会拖慢其后的所有命令,这使得Redis对每个任务的执行效率更加敏感. 针对Redis的性能优化,主要从下面几个层面入手: 最初的也是最重要的,确保没有让Redis执行耗时长的命令 使用pipelining将连续执行的命令组合执行 操作系统的Transparent huge pages功能

MySQL、MongoDB、Redis 数据库之间的区别与使用(本章迭代更新)

MySQL.MongoDB.Redis 数据库之间的区别与使用 MySQL.MongoDB.Redis 数据库之间的区别与使用(本章迭代更新) update:2019年2月20日 15:21:19(本章迭代更新) 一.数据库之间的区别 MySQL MySQL概述 关系型数据库.无论数据还是索引都存放在硬盘中.到要使用的时候才交换到内存中.能够处理远超过内存总量的数据. 在不同的引擎上有不同 的存储方式. 查询语句是使用传统的 SQL 语句,拥有较为成熟的体系,成熟度很高. 开源数据库的份额在不断

百万级运维心得一:Mongodb和Redis数据不能放在同一个服务器

百万级运维经验一:Mongodb和Redis数据不能放在同一个服务器 一开始时,为了省服务器,把Mongodb和Redis放在一个服务器上.网站每到高峰期都特别卡,还经常出现502.找了很久的原因,发现硬盘的写数据很大,IOPS也很高,排查了很多原因都没找到.然后再仔细研究监控,发现写硬盘的操作很有规律,每隔几分钟就有一次频繁的写硬盘,联想到Redis同步数据到硬盘的间隔就是几分钟,所以开始怀疑是Redis引起的.于是加了一台服务器,把Redis单独放在那里,发现网站瞬间快了,502问题也不再出

R 语言的优劣势是什么?

R 语言的优劣势是什么? 2015-05-27 程序员 大数据小分析 R,不仅仅是一种语言 本文原载于<程序员>杂志2010年第8期,因篇幅所限,有所删减,这里刊登的是全文. 工欲善其事,必先利其器,作为一个战斗在IT界第一线的工程师,C/C++.java.perl.python.ruby.php.javascript.erlang等等等等,你手中总有一把使用自如的刀,帮助你披荆斩棘. 应用场景决定知识的储备与工具的选择,反过来,无论你选择了什么样的工具,你一定会努力地把它改造成符合自己应用场