HDFS:
Hadoop 的分布式文件系统称为 HDFS,它是为以流式数据访问模式存储超大文件而设计的文件系统。 HDFS适合:
不适合:
总结: HDFS 是设计成适应一次写入,多次读出的场景,且不支持文件的修改。
Hive: Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目 。 它建立在Hadoop之上的数据仓库软件工具,它提供了一系列的工具,帮助用户对大规模的数据进行提取、转换和加载,即通常所称的ETL(Extraction,Transformation,and Loading)操作。Hive可以直接访问存储在HDFS或者其他存储系统(如Hase)中的数据,然后将这些数据组织成表的形式,在其上执行ETL操作。
HBase:
HBase是一个分布式、面向列的开源非关系型数据库(NoSQL),基于HDFS文件系统之上,支持记录级别的高效读写,不适合离线分析场景。 适合结构简单,但数据量非常大的的数据(通常在TB/PB),查询条件简单,列与列之间联系不大的轻查询应用场景,如历史订单记录,日志数据,监控数据等。每一行数据定义一个key,提供了简单的基于key值的快速查询能力,查询灵活性较弱。 数据会按照列进行分组和存储,同一列的数据存储在同一个地方,若干列又构成一个列族,一个列族的所有列存储在同一个底层的存储文件里,这个存储文件叫做HFile。列族需要在表创建的时候定义好,并且不能修改的太频繁,数量也不能太多。
MongoDB:
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。将数据存储为一个文档,数据结构由键值(key->value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。 模式自由,表结构灵活可变,字段类型可以随时修改。修改很方便,不适合多表查询、复杂事务等高级操作。 很适合那些表结构经常改变,数据的逻辑结构没那么复杂不需要多表查询操作,数据量又比较大的应用场景。
Redis: Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 速度快,读写性能优异;支持数据持久化;数据结构丰富,如list,set;支持主从复制备份;支持事务,操作都是原子性;数据存储在内存中,不能用作海量数据的高性能读写,主要局限在较小数据量的高性能操作和运算上;查询依赖key,不能进行复杂的查询。 适合那些对读写性能要求极高,且数据表结构简单(key-value、list、set之类)、查询条件也同样简单的应用场景。 1、会话缓存(Session Cache) 最常用的一种使用 Redis 的情景是会话缓存(session cache)。用 Redis 缓存会 话比其他存储(如 Memcached)的优势在于:Redis 提供持久化。当维护一个不 是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不 高兴的,现在,他们还会这样吗? 幸运的是,随着 Redis 这些年的改进,很容 易找到怎么恰当的使用 Redis 来缓存会话的文档。甚至广为人知的商业平台 Magento 也提供 Redis 的插件。 2、全页缓存(FPC) 除基本的会话 token 之外,Redis 还提供很简便的 FPC 平台。回到一致性问题, 即使重启了 Redis 实例,因为有磁盘的持久化,用户也不会看到页面加载速度的 下降,这是一个极大改进,类似 PHP 本地 FPC。 再次以 Magento 为例,Magento 提供一个插件来使用 Redis 作为全页缓存后端。 此外,对 WordPress 的用户来 说,Pantheon 有一个非常好的插件 wp-redis,这个插件能帮助你以最快速度加 载你曾浏览过的页面。 3、队列 Reids 在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得 Redis 能作为一个很好的消息队列平台来使用。Redis 作为队列使用的操作,就类似于本 地程序语言(如 Python)对 list 的 push/pop 操作。 如果你快速的在 Google 中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就 是利用 Redis 创建非常好的后端工具,以满足各种队列需求。例如,Celery 有一 个后台就是使用 Redis 作为 broker,你可以从这里去查看。 4,排行榜/计数器 Redis 在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序 集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis 只是 正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的 10 个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可: 当然, 这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数, 你需要这样执行: ZRANGE user_scores 0 10 WITHSCORES Agora Games 就 是一个很好的例子,用 Ruby 实现的,它的排行榜就是使用 Redis 来存储数据的, 你可以在这里看到。 5、发布/订阅 最后(但肯定不是最不重要的)是 Redis 的发布/订阅功能。发布/订阅的使用场景 确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚 本触发器,甚至用 Redis 的发布/订阅功能来建立聊天系统!
ES:
Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。 自动对字段建立索引,支持高性能的复杂聚合查询,适合数据分析;字段类型无法修改,写入性能较低,高硬件资源消耗。 (1)分布式的搜索引擎和数据分析引擎 搜索:百度,网站的站内搜索,IT系统的检索 (2)全文检索,结构化检索,数据分析 全文检索:我想搜索商品名称包含牙膏的商品,select * from products where product_name like "%牙膏%" (3)对海量数据进行近实时的处理 分布式:ES自动可以将海量数据分散到多台服务器上去存储和检索 跟分布式/海量数据相反的:lucene,单机应用,只能在单台服务器上使用,最多只能处理单台服务器可以处理的数据量 |
HDFS Hive HBase MongoDB Redis elasticsearch
最新推荐文章于 2022-06-28 22:51:15 发布