MongoDB、Hbase、Redis等NoSQL优缺点及应用场景对比
NoSQL的四种主要类型
NoSQL数据库在整个数据库领域的地位不言而喻。在大数据时代,RDBMS虽然优秀,但由于数据规模的快速增长和数据模型的日益复杂,RDBMS逐渐无法应对很多数据库处理任务。 NoSQL目前凭借易扩展、大数据量、高性能、灵活的数据模型在数据库领域成功立足。
如今,大家基本一致认为NoSQL数据库分为四大类:键值数据库、文档数据库、列数据库、图数据库。每种类型的数据库都可以解决关系数据无法解决的问题。在实际应用中,NoSQL数据库分类的界限并不是那么明显,往往是几种类型的组合。
主流nosql详解:MongoDB、Hbase、Redis
MongoDB
MongoDB是一个高性能、无模式的开源文档数据库,开发语言为C++。它可以在许多场景中用来替代传统的关系数据库或键/值存储。
1。 MongoDB 的特点
- 使用的语言:C++
- 特点:保留了一些友好的 SQL 功能(查询、索引)。
- 许可证:AGPL(发起方:Apache)
- 协议:自定义、二进制(BSON)
- 主从复制(支持自动错误恢复,采用集合复制)
- 内置分片机制支持javascript表达式查询
- 可以执行任意服务器端javascript函数
- 就地更新支持比CouchDB更好
- 存储数据时使用内存进行文件映射
- 性能相关比功能需求更关注
- 建议启用日志功能(参数--journal)
- 在 32 位操作系统上,数据库的大小限制为约 2.5 Gb
- 空数据库占用约 192 Mb
- 使用 GridFS 存储大数据或元数据(不是真正的文件系统)
2。 MongoDB 的优点:
1)更高的写入负载,MongoDB 具有更高的插入速度。
2)操作大型简单表格。当数据表太大时,可以方便地进行表拆分。
3)高可用性,M-S设置不仅方便,而且快捷。 MongoDB还可以快速、安全、自动地实现节点(数据中心)故障转移。
4)快速查询,MongoDB支持像管道一样的二维空间索引,因此可以快速准确地从指定位置检索数据。当MongoDB启动时,数据库中的数据以文件映射的形式加载到内存中。如果内存资源足够丰富,将会显着提高数据库的查询速度。
5) 随着非结构化数据的快速增长,添加列在某些情况下可能会阻塞整个数据库或增加负载,从而导致性能下降。由于MongoDB的数据结构模式较弱,添加新字段不会影响旧表。没有影响,整个过程会很快。
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
- 特点:支持数十亿行 编者注 4)
- 根据 BigTable 建模
- 采用真正的分布式 Map/Reduce 架构O
- 高-性能 Thrift 网关
- 在服务器端通过扫描和过滤实现查询
- 流量预测
- 支持 XML、Protobuf 和二进制 HTTP
- Cascade、Hive 和 Pig 源和接收器模块
- 基于 Jruby 的 shell (JIRB)
- 配置更改和小升级将回滚
- 不会出现单点故障率
- 与随机访问的 MySQL 的性能相当
3。 HBase的优点
1)存储容量大,一张表可以容纳数亿行、数百万列;
2。 )可以通过版本获取,可以找到需要的历史版本数据;
3.)负载较高时,只需添加机器即可实现水平分段的扩展,与Hadoop无缝集成保证数据可靠性(HDFS)和海量数据分析(MapReduce)的高性能;
4.)基于第3点,可以有效防止个别故障点的发生。 ?如何配置,比如持久化配置),缺乏文档;
3。占用大量内存,而且由于是基于针对批量解析优化的HDFS构建的,因此读取性能不高;
4。 API 比较 其他 NoSql 相当笨重。
5。 HBasic可用场景
1)bigtable数据存储;
2)请求数据版本的要求;
3)应对海量数据的简单扩展需求。
Redis
Redis是一个用ANSI C编写的开源日志型键值数据库,支持网络,可以基于内存和持久化,并提供多种语言的API。目前开发工作由 VMware 提供。 ?
2。 Redis的优点
1)非常丰富的数据结构;
2.)Redis提供了事务功能,可以保证一系列命令的原子性,不会被任何操作打断;
3.)数据存储在内存中,读写速度非常快,可以达到10w/s的频率。 ?如果是这样,整个数据库数据需要定期写入磁盘,这是非常昂贵的;而aof方法只跟踪变化的数据,类似于mysql的binlog方法,但是添加的日志可能太大,所有操作都要重复。这样做一次,恢复速度会很慢;
3)由于是内存数据库,一台机器存储的数据量取决于机器本身的内存大小。即使redis本身有key过期策略,但仍然需要提前猜测并存储。如果内存增长过快,则需要定期删除数据。
4.Redis应用场景:
最佳应用场景:适合数据变化快、数据库大小可以保持的应用(适合内存容量)。
例如:微博、数据分析、实时数据采集、实时沟通等。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。