V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
forPandaria
V2EX  ›  程序员

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

  •  1
     
  •   forPandaria · 2021-02-15 19:33:41 +08:00 · 2898 次点击
    这是一个创建于 1383 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    恳请大佬解惑!

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

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

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


    除了 “hbase 可以更好地支持 mapreduce” 这个理由之外, 还有其他理由吗?
    RedrumSherlock
        15
    RedrumSherlock  
       2021-02-16 01:03:54 +08:00
    @forPandaria 对 HBase 不敢大放厥词,但是我觉得 Hbase 和 mangodb 底层的设计是大相径庭的,不像 postgres 和 mysql, oracle 那样都是一个框架下能够比较,就像你说的分片,hbase 是以列为最小粒度来分片的,mangodb 按我理解还是比较粗的来分片,这咋比?而且 mangodb 的索引和 hbase 的 row key 也不是一回事,所以这两者应用支持层面上比较一下还行,要来比较性能只能说 Hbase 天生就是给特定的大数据场景而设计的
    sampeng
        16
    sampeng  
       2021-02-16 03:34:39 +08:00 via iPhone
    不用想你什么复杂的理由,一条就够了
    在你需要扩容的时候,加一台机器即可。啥都不需要做。
    vjnjc
        17
    vjnjc  
       2021-02-17 14:51:12 +08:00
    @forPandaria 撇开 hbase 不计。光是 mongodb 就能满足很大规模的请求,用分库分表。
    forPandaria
        18
    forPandaria  
    OP
       2021-02-20 00:12:55 +08:00
    @RedrumSherlock
    现在我能找到的就是:
    LSM 树相比 B 树在磁盘中的碎片更少,尤其是对于‘稀疏表’而言。
    这个应该算一个小点吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2523 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 01:15 · PVG 09:15 · LAX 17:15 · JFK 20:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.