MongoDB和Hbase的区别

1.Mongodb bson文档型数据库,整个数据都存在磁盘中,hbase是列式数据库,集群部署时每个familycolumn保存在单独的hdfs文件中。

2.Mongodb 主键是“_id”,主键上面可以不建索引,记录插入的顺序和存放的顺序一样,hbase的主键就是row key可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在hbase内部,row key保存为字节数组。存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。

字典序对int排序的结果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行键必须用0作左填充。

3.Mongodb支持二级索引,而hbase本身不支持二级索引

4.Mongodb支持集合查找,正则查找,范围查找,支持skip和limit等等,是最像mysql的nosql数据库,而hbase只支持三种查找:通过单个row key访问,通过row key的range,全表扫描

5.mongodb的update是update-in-place,也就是原地更新,除非原地容纳不下更新后的数据记录。而hbase的修改和添加都是同一个命令:put,如果put传入的row key已经存在就更新原记录,实际上hbase内部也不是更新,它只是将这一份数据已不同的版本保存下来而已,hbase默认的保存版本的历史数量是3。

6.mongodb的delete会将该行的数据标示为已删除,因为mongodb在删除记录时并不是真把记录从内存或文件中remove,而是将该删除记录数据置空(写0或特殊数字加以标识)同时将该记录所在地址放到一个list列表“释放列表”,这样做的好就是就是如果有用户要执行插入记录操作时,mongodb会首先从该“释放列表”中获取size合适的“已删除记录”地址返回,这种方法会提升性能(避免了malloc内存操作),同时mongodb也使用了bucket size数组来定义多个大小size不同的列表,用于将要删除的记录根据其size大小放到合适的“释放列表”中。Hbase的delete是先新建一个tombstonemarkers,然后读的时候会和tombstonemarkers做merge,在 发生major compaction时delete的数据记录才会真真删除。

7.mongodb和hbase都支持mapreduce,不过mongodb的mapreduce支持不够强大,如果没有使用mongodb分片,mapreduce实际上不是并行执行的

8.mongodb支持shard分片,hbase根据row key自动负载均衡,这里shard key和row key的选取尽量用非递增的字段,尽量用分布均衡的字段,因为分片都是根据范围来选择对应的存取server的,如果用递增字段很容易热点server的产生,由于是根据key的范围来自动分片的,如果key分布不均衡就会导致有些key根本就没法切分,从而产生负载不均衡。

9.mongodb的读效率比写高,hbase默认适合写多读少的情况,可以通过hfile.block.cache.size配置,该配置storefile的读缓存占用Heap的大小百分比,0.2表示20%。该值直接影响数据读的性能。如果写比读少很多,开到0.4-0.5也没问题。如果读写较均衡,0.3左右。如果写比读多,果断默认0.2吧。设置这个值的时候,你同时要参考hbase.regionserver.global.memstore.upperLimit,该值是memstore占heap的最大百分比,两个参数一个影响读,一个影响写。如果两值加起来超过80-90%,会有OOM的风险,谨慎设置

10.hbase采用的LSM思想(Log-Structured Merge-Tree),就是将对数据的更改hold在内存中,达到指定的threadhold后将该批更改merge后批量写入到磁盘,这样将单个写变成了批量写,大大提高了写入速度,不过这样的话读的时候就费劲了,需要merge disk上的数据和memory中的修改数据,这显然降低了读的性能。mongodb采用的是mapfile+Journal思想,如果记录不在内存,先加载到内存,然后在内存中更改后记录日志,然后隔一段时间批量的写入data文件,这样对内存的要求较高,至少需要容纳下热点数据和索引。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: mongoDB 是一种面向文档的数据库,它以JSON格式存储数据,并提供灵活的查询功能。HBase 是一种面向列的NoSQL数据库,它提供高性能的读写速度。两者的最大区别在于存储结构:mongoDB存储的是文档,而HBase存储的是表格。 ### 回答2: MongoDBHBase都是非关系型数据库,但在一些方面有一些区别。 首先,在数据模型方面,MongoDB是面向文档的数据库,而HBase是面向列的数据库MongoDB使用BSON(二进制JSON)文档来存储数据,每个文档可以具有不同的结构。而HBase使用一个稀疏的、分布式的多维表来存储数据,每个表由行和列组成,其中行键和列族用来确定数据的位置。所以MongoDB更适合存储复杂的结构化和半结构化数据,而HBase更适合存储大量的结构相对简单的数据。 其次,在数据访问方面,MongoDB支持丰富的查询语言和灵活的数据模型,可以支持复杂的查询操作,适合用于实时查询和聚合分析。而HBase主要支持通过行键直接访问单个记录,能够快速地获取一条或少量记录的数据。 另外,HBase是一个分布式数据库,它可以水平扩展,可以在大规模的数据集上处理高负载。MongoDB也可以进行分片(sharding)以实现分布式存储,但相对来说不如HBase那么强大。 此外,HBase建立在Hadoop分布式文件系统(HDFS)之上,可以与其他Hadoop生态系统的工具和框架集成。而MongoDB则不依赖Hadoop,它有自己的复制和分片机制。 总的来说,MongoDB适用于需要高度灵活性和复杂查询的应用,适合用于Web应用、社交媒体、内容管理和实时分析等场景。而HBase适用于海量数据的存储和批处理分析,适合用于日志处理、广告分析、物联网和大数据应用。 ### 回答3: mongoDBHBase是两种不同的NoSQL数据库系统,它们有以下几点区别: 1. 数据模型:mongoDB是面向文档的数据库,而HBase则是面向列的数据库mongoDB存储的数据是以文档(通常使用JSON格式)的形式存储,每个文档都是一个独立的记录。而HBase则将数据存储为表格形式,每个表格可以有多个列族。 2. 数据存储方式:mongoDB使用BSON(一种二进制的JSON格式)进行数据存储,而HBase则将数据存储在Hadoop文件系统(HDFS)中。mongoDB以文档的形式存储数据,支持动态模式,可以灵活地添加、删除、修改字段。HBase则使用HDFS存储数据,适用于大规模数据的存储和处理。 3. 数据访问方式:mongoDB支持通过文档ID进行数据的高效查询,同时还提供了索引来加快查询速度。HBase则通过行键(row key)来定位数据,查询速度相对较慢,但可以进行范围查询。 4. 数据一致性:mongoDB在默认情况下提供最终一致性,即对于同一份数据的多次读取可能会得到不同的结果,但可以通过配置实现强一致性。HBase则提供强一致性,保证了多个读取操作会得到一致的结果。 5. 数据分布和扩展性:mongoDB使用分片(sharding)的方式将数据分布到不同的节点上,以支持水平扩展。HBase则使用HDFS作为底层存储,可以将数据分布在多个节点上,支持大规模的数据存储和处理。 总的来说,mongoDB适用于存储和查询结构相对简单的数据,支持动态模式和灵活的查询方式。HBase适用于大规模数据的存储和处理,提供强一致性和高可靠性,适合于需要处理海量数据和实时查询的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值