总体来说两者的设计思路差不多,主要就是通过划区间去分布数据,后台进程进行数据分裂
两者的区别主要在于:
1、HBase依赖于HDFS;MongoDB直接存储在本地磁盘中
2、HBase按照列族将数据存储在不同的文件中;MongoDB不分列,整个文档都存储在一个(或者说一组)文件中,通过一个有一个通用的.ns文件保存名称空间(Column-based和Document-Based之间的区别应该是指这个地方吧)
3、HBase一个region只有一个HRegionServer对外提供服务(没有负载均衡的概念);MongoDB的shards(类似于region)支持负载均衡(主从结构,通过日志进行同步,这个HBase也在开发计划当中)
4、HBase根据文件的大小来控制region的分裂;MongoDB根据负载来决定shards的分裂(没有深入研究,不知道如何根据负载的)
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文件,这样对内存的要求较高,至少需要容纳下热点数据和索引。
http://blog.csdn.net/xuebo_911/article/details/8448653
相关推荐
连接 HBASE和MongoDB的驱动程序,配置后可直接导数据。很好用.zip
HBase 权威指南, 带目录高清版MongoDB权威指南, 带目录高清版
2. JDK安装部署 3. Zookeeper安装部署 4. Nginx安装部署 5. Hadoop安装部署 6. HBase安装部署 7. MongoDB数据库安装部署; 8. ElasticSearch集群安装部署; 9. 应用服务器的安装及部署
一个封装了 hbase、cassandra 和 mongodb 的 java 地图实现。 允许人们通过本机地图界面在这些 NoSQL 数据库中缓存对象。 它使 NoSQL 数据库的迁移变得容易。 这个想法也是为了让 Hazelcast 赚钱。 先决条件 您需要...
HBase、Redis、MongoDB、Couchbase、LevelDB对比
hbase的JAVA客户端所需jar包 jedis的JAVA客户端所需jar包 mongo的JAVA客户端所需...大数据——四种数据库(MySQL,HBase,MongoDB,Redis)操作实例总结:https://blog.csdn.net/weixin_43042683/article/details/106230370
自己做的,仅供参考 2.进程1向进程2顺序发送三条信息…… 4.写一段可出现在某main方法中的Java程序片段,用于打开一个最多接受100个字节数据的数据包socket,设置超时周期为5秒…… ……
1)、底层为 HDFS 存储,数据存储在 HBase分 布式数据库中,完成数据库和表的设计与创建。 2)实现对数据的添加、查询等基本的数据库操作。 3)使用 MapReduce 编程模型实现问题的计算和结果展示。
大数据实验报告,1-8合集 熟悉常用的HBase操作 熟悉常用的mongoDB数据库操作等等 大数据实验报告(实验一到八) 实验一: 熟悉常用的Linux操作和Hadoop操作 实验二: 熟悉常用的HDFS操作 实验三: 熟悉常用的HBase...
(1)理解4种数据库(MySQL、HBase,Redis和 MongoDB)的概念及不同点。(2)熟练使用4种数据库操作常用的 Shell命令。 (3)熟悉4种数据库操作常用的Java API。 A.4.2实验平台 (1)操作系统:Linux(建议Ubuntu 16.04)。(2...
就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非...
在2013年,NoSQL数据库的种类达到了150多个,并且一直在增长,多种多样的NoSQL数据库令人难以做出选择。更糟的是,鼓吹自己产品的海量广告宣传材料令人难以以理解该产品是否适合用户的需要。 为了向客户的项目提供...
The HBase design patterns apply equally well to Cassandra, MongoDB, and so on. In Detail With the increasing use of NoSQL in general and HBase in particular, knowing how to build practical ...
HBase与关系数据库的关系以及其它NoSQL的关系 HBase的Java API编程接口 HBase的表设计、行键设计等 在非Java语言中使用HBase HBase的使用场景,与MongoDB、Redis、Memcache的区分
Apache Spark 的公共访问层支持从多个 NoSQL 和 JDBC ... 以下大数据源支持读取请求: 卡桑德拉弹性搜索HBase MongoDB 实木复合地板此外,该项目还为与分析相关的数据源提供了越来越多的连接器: 谷歌分析 v3 Shopify
Hadoop+Hbase搭建云存储总结
文档总结了各种数据库特性及比较,包括HDFS、HBASE、Redis、mysql、MongoDB、fastdfs等
《Redis、MongoDB、HBase大咖直播大讲堂》技术直播峰会