我的Nosql总结

来源:互联网 发布:牛鞭效应模拟数据 编辑:程序博客网 时间:2024/05/05 19:33
Nosql介绍:----->>>Redis定位在"快",HBase定位于"大",mongodb定位在"灵活"。

Hbase:
hbase是bigtable的开源山寨版本。是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。
大:一个表可以有上亿行,上百万列
面向列:面向列(族)的存储和权限控制,列(族)独立检索。
稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
目标是高效存储大量数据,支持列压缩,行事务
定位与大的数据量;


mongoDB :
mongodb是文档型的非关系型数据库;(满足海量存储需求和面向文档的数据库)
与关系型数据库最为接近;
适合于网站的数据存储、内容管理与缓存应用,
优势在于查询功能比较强大,能存储海量数据,(适合大数据量的存储,倾向于存储);
C++编写,基于文档存储;
MongoDB还支持全文检索,基于文档的丰富查询、在数据处理与聚合等方面具有很强的灵活性;


redis :
redis是一个key-value存储系统;(满足极高读写性能的kv型数据库)
redis提供五种数据类型:string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型);
redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,
redis具备binlog功能,可以将所有操作写入日志,当redis出现故障,可依照binlog进行数据恢复。
并且在此基础上实现了master-slave(主从)同步。(区别与memcache);
redis 3.0将推出cluster,功能更加强大;


问题:为什么用redis做缓存而不用mongodb做缓存?
redis是一个key-value存储系统;(满足极高读写性能的kv型数据库)
mongodb是文档型的非关系型数据库;(满足海量存储需求和面向文档的数据库)



Pig :
Pig是一个基于Hadoop的大规模数据分析平台;(基于hadoop属于一门语言)
把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算;(帮助mapreduce工作)
为复杂的海量数据并行计算提供了一个简单的操作和编程接口;
与数据库的表类似,可以在关系数据库中找到它(其中,元组代表行,并且每个元组都由字段组成)。
Pig 拥有大量的数据类型,不仅支持包、元组和映射等高级概念,还支持简单的数据类型,
如 int、long、float、double、chararray 和 bytearray。并且,还有一套完整的比较运算符,包括使用正则表达式的丰富匹配模式

Hive :
hive是基于Hadoop的一个数据仓库工具;
可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制;
Hive 没有专门的数据格式,允许用户指定数据格式;
Hive 的最佳使用场合是大数据集的批处理作业,例如,网络日志分析。
● 支持索引,加快数据查询。
● 不同的存储类型,例如,纯文本文件、HBase 中的文件。
● 将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。
● 可以直接使用存储在Hadoop 文件系统中的数据。
● 内置大量用户函数UDF 来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF 函数来完成内置函数无法实现的操作。
● 类SQL 的查询方式,将SQL 查询转换为MapReduce 的job 在Hadoop集群上执行。
(形式自由,用法灵活)


Pig和Hive共同点:(两者没有太大区分,都是基于hdfs工作)
将MapReduce的实现进行简化,
读写操作数据最终都是存储在HDFS分布式文件系统上

区别:
在Hive中可以执行  插入/删除 等操作,
但是Pig中我没有发现有可以 插入 数据的方法,请允许我暂且认为这是最大的不同点吧。 
Hive中至少还有一个“表”的概念,
但是Pig中我认为是基本没有表的概念,所谓的表建立在Pig Latin脚本中,对与Pig更不要提metadata了。


mongoDb补充:
2.1  MongoDB的主要特点
(1)文件存储格式为Bson,使用易于掌握和理解的Json风格语法。相对Json来说,Bson拥有更好的性能,主要表现为更快的遍历速度、操作更简易、增加了额外的
数据类型。
(2)模式自由,支持嵌入子文档和数组,无需事先创建数据结构,属于逆规范化的数据模型,有利于提高查询速度。
(3)动态查询,支持丰富的查询表达式,使用Json形式的标记,可轻易查询文档中内嵌的对象和数组及子文档。
(4)完整的索引支持,包括文档内嵌对象和数据,同时还提供了全文索引方式,MongoDB的查询优化器会分析查询表达式,并生成一个高效的查询计划。
(5)使用高效的二进制数据存储,适合存储大型对象(如高清图片、视频等)。
(6)支持多种复制模式,提供冗余及自动故障转移。支持Master-Slave、Replica Pairs/Replica Sets、有限Master-Master模式。
(7)支持服务端脚本和Map/Reduce,可以实现海量数据计算,即实现云计算功能。
(8)性能高、速度快。在多数场合,其查询速度对于MySQL要快的多,对于CPU占用非常小。部署很简单,几乎是零配置。
(9)自动处理碎片,支持自动分片功能实现水平扩展的数据库集群,可以动态添加或移除节点。
(10)内置GridFS,支持海量存储。
(11)可通过网络访问,采用高效的MongoDB网络协议,在性能方面要优于http或Rest协议。
(12)第三方支持丰富,MongoDB社区活跃,越来越多的公司和网站在生产环境中使用MongoDB进行技术架构优化,同时由10gen公司官方提供强大技术支持。
2.2  MongoDB的适用场景
MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。
(1)网站数据:MongoDB非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
(2)缓存:由于性能很高,MongoDB也适合作为信息基础设施的缓存层。在系统重启之后,由MongoDB搭建的持久化缓存层可以避免下层的数据源过载。
(3)大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
(4)高伸缩性的场景:MongoDB非常适合由数十或数百台服务器组成的数据库。MongoDB的路线图中已经包含对MapReduce
引擎的内置支持。
(5)用于对象及JSON数据的存储:MongoDB的Bson数据格式非常适合文档化格式的存储及查询。
0 0
原创粉丝点击