求问:为什么 hbase 对大数据的支持比 mongo 好这么多?

2021-02-15 19:33:41 +08:00
 forPandaria

若 mongo 只创建一个索引,那么 mongo 索引锁占用的空间只是多了一点吧?

我大致看了 hbase 和 mongo 的分片原理,但也没发现可能的原因。 数据量过大时,读 /写请求都是会路由到某一个机器上去处理。 而在目标机器的单个分片中,hbase 采用 lsm 树,mongo 采用 b 树。

这些差别虽然有,但在对数据量的支持上,也不至于 hbase 比 mongo 高出一个数量级吧?

恳请大佬解惑!

2926 次点击
所在节点    程序员
18 条回复
vjnjc
2021-02-15 19:37:30 +08:00
个人看法:
“感觉对大数据的支持”这个意思是对分析型大数据的支持,对于分析型需求的话不需要查所有 column,hbase 是列存储天然支持这个场景。mongo 更多用在在线业务的后端上面,和分析型数据 query (大数据)需求场景不一样。
liprais
2021-02-15 19:48:03 +08:00
mongodb 是单机的
forPandaria
2021-02-15 20:01:05 +08:00
@vjnjc 我表述有误,“大数据”只是单存地指数百 TB 以及 PB 级别的数据。
forPandaria
2021-02-15 20:01:31 +08:00
@liprais mongodb 可以部署集群
YouLMAO
2021-02-15 20:14:58 +08:00
HBASE 我们家峰值几千万 QPS
vjnjc
2021-02-15 20:25:34 +08:00
@forPandaria 请问你们用上 tb/pb 级的数据了吗?这个量级的数据是无法做在线功能的
forPandaria
2021-02-15 20:34:54 +08:00
@vjnjc 我只是好奇,但从原理上看 mongodb 也可以构建上百台机器的集群,存储数百 tb 的数据。
做好数据负载均衡,请求打到不同节点。这不应该是 hbase 能做到的,mongodb 一样做吗?

我只接触过 hbase 集群,没有接触过 mongodb 集群,在网上查看相关信息都是说 mongo 要做到这样很难,所以就很好奇 [阿里云上 mongo 好像也是比 hbase 要贵很多吧?]
SingeeKing
2021-02-15 20:38:25 +08:00
这俩比较的话感觉就是因为列式存储
Jim2Chen
2021-02-15 20:48:47 +08:00
@YouLMAO 你们 hbase 集群有多大?单台机器配置如何?
RedrumSherlock
2021-02-15 22:59:52 +08:00
等等这俩就不是一类吧,一个是 column 一个是 document,根本设计和应用场景就不一样怎么比? hbase 是针对单列查询才快,你拿复杂多列查询到 hbase 上跑它也一样慢
YouLMAO
2021-02-15 23:03:55 +08:00
@RedrumSherlock 嗯啥? HBASE 就是多列,几万列,稀疏的,即一行通常只有其中数列有值
RedrumSherlock
2021-02-15 23:53:22 +08:00
@YouLMAO 当然可以多列,但是只有按主列查询的时候才最快,如果想在别的列上加 filter 查询也会慢下来
forPandaria
2021-02-16 00:25:20 +08:00
@RedrumSherlock 您说的主列,是指其作为 key 吧。
我前面有说“若 mongodb 只创建一个索引”。

我疑惑的是,这样来看 mongo 应该也能很好地支持 hbase 那样大的数据量,但网上都是说 hbase 支持的量级要大的多。
forPandaria
2021-02-16 00:32:40 +08:00
@RedrumSherlock
我的理解是,hbase 能做到的,mongo 应该也一样可以做到。
但为什么数据量超大的情况下,却只能选 hbase ?
难道是在这种情况下 mongodb 性能退化严重吗?


除了 “hbase 可以更好地支持 mapreduce” 这个理由之外, 还有其他理由吗?
RedrumSherlock
2021-02-16 01:03:54 +08:00
@forPandaria 对 HBase 不敢大放厥词,但是我觉得 Hbase 和 mangodb 底层的设计是大相径庭的,不像 postgres 和 mysql, oracle 那样都是一个框架下能够比较,就像你说的分片,hbase 是以列为最小粒度来分片的,mangodb 按我理解还是比较粗的来分片,这咋比?而且 mangodb 的索引和 hbase 的 row key 也不是一回事,所以这两者应用支持层面上比较一下还行,要来比较性能只能说 Hbase 天生就是给特定的大数据场景而设计的
sampeng
2021-02-16 03:34:39 +08:00
不用想你什么复杂的理由,一条就够了
在你需要扩容的时候,加一台机器即可。啥都不需要做。
vjnjc
2021-02-17 14:51:12 +08:00
@forPandaria 撇开 hbase 不计。光是 mongodb 就能满足很大规模的请求,用分库分表。
forPandaria
2021-02-20 00:12:55 +08:00
@RedrumSherlock
现在我能找到的就是:
LSM 树相比 B 树在磁盘中的碎片更少,尤其是对于‘稀疏表’而言。
这个应该算一个小点吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/753426

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX