`

(分析比较到位)NoSql 分析 hbase,mongodb,redis

 
阅读更多

hbase,mongodb,redis都属于nosql型存储方案。在实际的项目实践上看,他们的系统存储及处理的数量由大到小。HBase基于列存储,提供<key, family:qualifier, timestamp>三项坐标方式定位数据,由于其qualifier的动态可扩展型(无需schema设计,可存储任意多的qualifier),特别适合存储稀疏表结构的数据(比如互联网网页类)。HBase不支持二级索引,读取数据方面只支持通过key或者key范围读取,或者全表扫描。

 

MongoDb在类SQL语句操作方面目前比HBase具备更多一些优势,有二级索引,支持相比于HBase更复杂的集合查找等。BSON的数据结构使得处理文档型数据更为直接。MongoDb也支持mapreduce,但由于HBase跟Hadoop的结合更为紧密,Mongo在数据分片等mapreduce必须的属性上不如HBase这么直接,需要额外处理
HBase与Mongodb的读写性能正好相反,HBase写优于随机读,MongoDB似乎写性能不如读性能。

Redis为内存型KV系统,处理的数据量要小于HBase与MongoDB

 

 

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文件,这样对内存的要求较高,至少需要容纳下热点数据和索引。

分享到:
评论

相关推荐

    实验四:NoSQL和关系数据库的操作比较

    A.4实验四:NoSQL和关系数据库的操作比较 本实验对应第6章的内容。 A.4.1实验目的 (1)理解4种数据库(MySQL、HBase,Redis和 MongoDB)的概念及不同点。(2)熟练使用4种数据库操作常用的 Shell命令。 (3)熟悉4种...

    NoSQL研究及选型报告

    该报告介绍了NoSQL的相关概念和实现技术,并选取三个NoSQL数据库(MongoDB、HBase、Redis)进行技术预研,从数据库的安装、部署、备份恢复、集群扩展、性能、客户端等方面进行比较,结合银行自身业务特点,分析每个...

    HBase编程开发

    HBase与关系数据库的关系以及其它NoSQL的关系 HBase的Java API编程接口 HBase的表设计、行键设计等 在非Java语言中使用HBase HBase的使用场景,与MongoDB、Redis、Memcache的区分

    Seven.Databases.in.Seven.Weeks.2nd.Edition.2018.4

    postgresql hbase mongodb couchdb neo4j dynamodb redis

    Nosql数据库原理与应用综合项目

    运行环境:包括Ubuntu 16.04、Windows 11操作系统,Hadoop 2.7.1大数据框架,以及Redis、MongoDB、HBase、Neo4j等NoSQL数据库。 数据集与预处理:通过Python爬取,得到14371个二手房数据,经过合并、字段调整、空值...

    nosql 入门教程

    5.3.1 使用MongoDB、HBase和Redis更新及修改数据 98 5.3.2 有限原子性和事务完整性 99 5.4 小结 100 第6章 查询NoSQL存储 101 6.1 SQL与MongoDB查询功能的相似点 101 6.1.1 加载MovieLens数据 103 6.1.2 ...

    NoSQL性能测试包YCSB

    Yahoo 专门用于主流的 nosql 性能测试,java 编写,内集成 hbase,mongodb,cassandra,voldemort,redis。使用时注意需要将相应的数据库驱动复制到对应的数据库 lib 下面。

    大数据技术体系.pdf

    ⼤数据技术体系 ⽂件存储:Hadoop HDFS、Tachyon、KFS 离线计算:Hadoop MapReduce、Spark 流式、实时计算:Storm、Spark Streaming、S4、Heron K-V、NOSQL数据库:HBase、Redis、MongoDB 资源管理:YARN、Mesos ⽇...

    NoSQL和Redis简介及Redis在Windows下的安装和使用教程

    现有Nosql DB 产品: Redis/MongoDB/Memcached/Hbase/Cassandra/ Tokyo Cabinet/Voldemort/Dynomite/Riak/ CouchDB/Hypertable/Flare/Tin/Lightcloud/ KiokuDB/Scalaris/Kai/ThruDB, 等等~~~ 为什么需要NoSQL非关系...

    大数据技术原理及应用课实验4 NoSQL和关系数据库的操作比较 林子雨实验

    实验4 NoSQL和关系数据库的操作比较 一、实验目的 1. 理解四种数据库(MySQL、HBase、Redis和MongoDB)的概念以及不同点; 2. 熟练使用四种数据库操作常用的Shell命令; 3. 熟悉四种数据库操作常用的Java API。 二、...

    8种Nosql数据库系统对比

    针对这种情况,这里对 Cassandra、 Mongodb、CouchDB、Redis、 Riak、 Membase、Neo4j和HBase进行了比较: (编注1:NoSQL:是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储。现今的...

    Mysql数据库相关⾯试题总结(30道)

    Mysql数据库相关⾯试题总结(30道) 1、列举常见的关系型数据库和⾮关系型都有那些? 关系型数据库:Oracle、DB2、Microsoft SQL Server、Microsoft Access...⾮关系型数据库:NoSql、Cloudant、MongoDb、redis、HBase

    Professional NoSQL

    The book includes illustrations and examples that relate to MongoDB, CouchDB, HBase, Hypertable, Cassandra, Redis, and Berkeley DB. A few other NoSQL products, besides these, are also referenced. An ...

    中图网爬取的不同种类书籍数据

    中图网爬取的不同种类书籍数据——NoSQL综合项目数据集,对HBase、Redis、MongoDB、Neo4j等NoSQL数据库进行增删改查操作,并对MongoDB进行基本的统计分析。

    SpringBoot模板:springboot和dubbo,netty的集成,redis mongodb的nosql模板,kafka rocketmq rabbit的MQ模板,solr solrcloud elasticsearch查询引擎

    [Spring Boot中使用MongoDB增删改查] [Spring Boot中使用RocketMQ] [Spring Boot中使用Redis] [Spring Boot中使用RabbitMQ] [Spring Boot中使用kafka] [Spring Boot中使用SolrCloud] [Spring Boot中使用...

    当下流行NOSQL的选型

    MongoDB、ElasitcSearch、Redis、HBase是现今最火的四款NoSQL数据库产品。在实际的开发中,这四种数据库有什么区别?我到底该选哪个?想必这是很多互联网开发都遇到过的难题。下面就给大家总结下这四种数据库产品的...

    NoSQL数据库笔谈

    Hadoop之Hbase 耶鲁大学之HadoopDB GreenPlum FaceBook之Cassandra Cassandra特点 Keyspace Column family(CF) s ebug . net / paper / dat abas es / nos q l / N os q l . ht ml 1/ 56 13-12-4 NoSQL数据库笔谈 ...

    七周七数据库

    它们依次是postgresql、riak、apache hbase、mongodb、apache couchdb、neo4j和redis。本书将深入每一种数据库,介绍它们的优势和不足,以及如何选取一种最符合你的应用需求的数据库。 《七周七数据库》适合数据库...

    NoSQL-Operators

    NoDA-NoSQL数据访问运算符 访问NoSQL存储的摘要层 这项工作提供了一组数据操作符,用于以统一的方式访问异构NoSQL存储。 对于希望在NoSQL数据库... 到目前为止,NoDA建立在MongoDB , HBase , Redis和Neo4j存储之上。

Global site tag (gtag.js) - Google Analytics