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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介:

1240b84be5ff70852f881b274e8c3354d2c7a33b

NoSQL的四大种类

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

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

4df5171e7075c9d6b99167391fbaa1e513fa4326

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

9bbc393352b66d4eec3b93e01aba520ac85f001f

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的随机访问性能

3. 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允许用户实现消息机制

2. Redis 优势

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

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

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

3.Redis 缺点

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

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

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

4.Redis 应用场景:

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

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


原文发布时间为:2018-10-11

本文作者:yuer

本文来自云栖社区合作伙伴“终端研发部”,了解相关信息可以关注“终端研发部”。


相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
5天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
125 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
2月前
|
NoSQL 应用服务中间件 Linux
CentOS7搭建MySQL+Redis+MongoDB+FastDF
CentOS7搭建MySQL+Redis+MongoDB+FastDF
138 0
|
2月前
|
NoSQL 关系型数据库 MySQL
Windows、Linux、Mac安装数据库(mysql、MongoDB、Redis)#0
不同系统下进行MySQL安装、MongoDB安装、Redis安装【2月更文挑战第5天】
444 5
Windows、Linux、Mac安装数据库(mysql、MongoDB、Redis)#0
|
3月前
|
NoSQL 关系型数据库 MySQL
实习里项目使用mysql、mongodb、redis都用来干什么
实习里项目使用mysql、mongodb、redis都用来干什么
47 0
|
8月前
|
消息中间件 NoSQL 关系型数据库
Linux安装 OpenResty、Nginx、PHP、Mysql、Redis、Lua、Node、Golang、MongoDB、Kafka等
Linux安装 OpenResty、Nginx、PHP、Mysql、Redis、Lua、Node、Golang、MongoDB、Kafka等
106 0
|
4月前
|
NoSQL 应用服务中间件 MongoDB
2023年底复盘之大厂必问面试题:Redis+MongoDB+ZK+Nginx+数据库
今天分享给大家的都是目前主流企业使用最高频的面试题库,也都是 Java 版本升级之后,重新整理归纳的最新答案,会让面试者少走很多不必要的弯路。同时每个专题都做到了详尽的面试解析文档,以确保每个阶段的读者都能看得懂,同时这部分面试文档也是可以免费的提供给有需要的同学们学习的,有需要的可以查看文末的获取方式!
|
4月前
|
缓存 NoSQL MongoDB
缓存为什么要用Redis,而不是使用MongoDB呢?
缓存为什么要用Redis,而不是使用MongoDB呢?
40 0
|
4月前
|
NoSQL 关系型数据库 应用服务中间件
Linux安装 OpenResty、Nginx、PHP、Mysql、Redis、Lua、Node、Golang、MongoDB、Kafka等
Linux安装 OpenResty、Nginx、PHP、Mysql、Redis、Lua、Node、Golang、MongoDB、Kafka等
89 0
|
6月前
|
NoSQL JavaScript 中间件
Node.js Koa2 MongoDB Redis egg.js
Node.js Koa2 MongoDB Redis egg.js
Node.js Koa2 MongoDB Redis egg.js
|
7月前
|
NoSQL 关系型数据库 分布式数据库
RDS、PolarDB、Redis、MongoDB、DAS中执行一条修改语句为啥要开binlog呢
RDS、PolarDB、Redis、MongoDB、DAS中执行一条修改语句为啥要开binlog呢
114 1

热门文章

最新文章