前言

传统数据库遇到的问题,数据量很大的时候无法存储;没有很好的备份机制;数据达到一定数量开始缓慢,很大的话基本无法支撑;因此我们需要探究更加合适的数据库来支撑我们的业务。

HBase

什么是HBase

Hbase(Hadoop Database)是建立在HDFS之上的分布式、面向列的NoSQL的数据库系统。

HBase特点

优点

  1. 海量存储:适合存储PB级别的海量数据,采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。
  2. 列式存储(半结构化或非结构化数据):即列族存储,对于数据结构字段不够确定或杂乱无章非常难按一个概念去进行抽取的数据适合用。
  3. 极易扩展:一个是基于上层处理能力(RegionServer)的扩展,提升Hbsae服务更多Region的能力。一个是基于存储的扩展(HDFS),通过横向添加Datanode的机器,进行存储层扩容,提升Hbase的数据存储能力和提升后端存储的读写能力。
  4. 高并发:采用廉价PC,能获得高并发、低延迟、高性能的服务。
  5. 稀疏:列族中,可以指定任意多的列,列数据为空不会占用存储空间的,也提高了读性能。
  6. 多版本号数据:依据Row key和Column key定位到的Value能够有随意数量的版本号值,版本号默认是单元格插入时的时间戳。
  7. 适用于插入比查询操作更频繁的情况:比如,对于历史记录表和日志文件。
  8. 数据类型单一:HBase中数据类型都是字符串。
  9. 无模式:每一行都有一个可以排序的rowKey和任意多的截然不同的列。

缺点

  1. 单一RowKey固有的局限性决定了它不可能有效地支持多条件查询。
  2. 不适合于大范围扫描查询。
  3. 不直接支持 SQL 的语句查询。
  4. 仅支持行级(单行)事务(HBase的事务是行级事务,可以保证行级数据的原子性、一致性、隔离性以及持久性)。
  5. HBase的配置非常麻烦,最低的限度都需要包括Zookeeper ensemble、primary HMaster、secondary HMaster、RegionServers、active NameNode、standby NameNode、HDFS quorum journal manager及DataNodes。使用HBase需求大量的专业知识——甚至是最简单的监视。RegionServer存在单点故障,当它发生故障时,一个新的RegionServer必须被选举出,而在可以投入之前,必须重新完成write-ahead日志里的内容,即故障恢复较慢,WAL回放较慢。HBase的API非常笨拙并且具有太强的Java特色,非Java客户端只能委托给Thrit或者REST。

HBase的体系结构

值得参考的网址:HBase基本概念与基本使用 - 牧梦者 - 博客园

HBase使用场景

Hbase是一个通过廉价PC机器集群来存储海量数据的分布式数据库解决方案。它比较适合的场景概括如下:

  1. 是巨量大(百T、PB级别)
  2. 查询简单(基于rowkey或者rowkey范围查询)
  3. 不涉及到复杂的关联

有几个典型的场景特别适合使用Hbase来存储:

  1. 海量订单流水数据(长久保存)
  2. 交易记录
  3. 数据库历史数据

如何使用HBase

三种模式:单机模式,伪分布式模式,分布式模式

一般生产环境用的是分布式模式,如果是学习的话,可以用单机模式和伪分布式模式。

安装zookeeper

zookeeper 安装及配置_CN-LILU的博客-CSDN博客_zookeeper配置

全分布式模式的Hbase集群需要运行ZooKeeper实例,默认情况下HBase自身维护着一组默认的ZooKeeper实例,可以自己配置实例,这样Hbase会更加健壮

注意:使用默认的实例时,HBase将自动启动或停止ZooKeeper,当使用独立的ZooKeeper实例时,需要用户手动启动和停止ZooKeeper实例

安装Hadoop

hadoop分布式安装

安装HBase

Hbase学习笔记(安装和基础知识及操作) - wishyouhappy - 博客园

    hbase_home/conf/hbase-site.xml文件中的configuration加入:    

 1 <property>  2   <name>hbase.rootdir</name>  3   <value>hdfs://hadoop0:9000/hbase</value>4 </property>5 <property>6   <name>hbase.cluster.distributed</name>7   <value>true</value>8 </property>9 <property>
10   <name>hbase.zookeeper.quorum</name>
11   <value>hadoop0</value>
12 </property>
13 <property>
14   <name>dfs.replication</name>   //指定Hlog和Hfile副本数,此参数值并不能大于HDFS节点数,如果datanode只有一台则此参数应该设置为1
15   <value>1</value>
16 </property>

注意事项

1.关于Hadoop

  1.  目前的HBase只能依赖特定的Hadoop版本,HBae和Hadoop之间的RPC是版本话的,需要调用方与被调用方相互匹配,细微的差异可能导致通信失败

  2. 由于Hadoop依赖于Hadoop,它要求Hadoop的JAR必须部署在HBase的lib目录下。HBase使用的Hadoop版本必须与底层Hadoop集群上使用的Hadoop版本一直,因而使用Hadoop集群上运行的JAR替换HBase的lib目录中依赖的Hadoop的JAR可以避免版本不匹配的问题

  3. 集群中所有的节点都要更新为一样的JAR,否则版本不匹配问题可能造成集群无法启动或者假死现象

2.关于HBase Shell

  1.如果使用的分布式模式,那么在关闭Hadoop之前一定要确认HBase已经被正常关闭了

  2. 使用stop-hbase.sh关闭HBase时,控制台会打印关于停止的信息,会周期性的打印 ".",关闭脚本需要几分钟完成,如果集群中机器数量很多,那么执行时间会更长

介绍比较全面的网址:hbase总结~hbase配置和使用 - 皇族极炫 - 博客园

了解完HBase后,可带着问题看这一篇文章:https://blog.csdn.net/nosqlnotes/article/details/79647096

MongoDB

什么是MongoDB

MongoDB是一个介于关系数据库和非关系数据库之间,基于分布式文件存储,由C 语言编写的数据库。

MongoDB特点

优点      

高性能
     MongoDB提供高性能的数据持久性。特别是,

对嵌入式数据模型的支持减少了数据库系统上的I / O活动。

索引支持更快的查询,并且可以包括来自嵌入式文档和数组的键。

丰富的查询语言
    MongoDB支持丰富的查询语言,以支持读写操作(CRUD)以及:

资料汇总
    文本搜索和地理空间查询。

    SQL到MongoDB的映射图

SQL到聚合的映射图

高可用性
    MongoDB的复制工具(称为副本集)提供:

自动故障转移
    数据冗余。
    甲副本集是一组保持相同的数据集,从而提供冗余和提高数据可用性的MongoDB服务器。

水平可伸缩性
    MongoDB提供水平可伸缩性作为其核心 功能的一部分:

分片在一组计算机集群分布数据。
    从3.4开始,MongoDB支持基于shard键创建数据区域。在平衡的集群中,MongoDB仅将区域覆盖的读写定向到区域内的那些分片。

支持多种存储引擎
    MongoDB支持多个存储引擎:

WiredTiger存储引擎(包括对静态加密的支持 )
    内存中存储引擎。
    此外,MongoDB提供可插拔的存储引擎API,允许第三方为MongoDB开发存储引擎。

MongoDB原理

mongodb在电脑磁盘文件系统之上,又包装了自己的一套文件系统---gridfs,里面存储的是一个一个的json二进制对象,也就是Bson。

存储容量需求超出单机磁盘容量时,用分片技术去解决

  详情可参考网址:

MongoDB分片原理篇 - 王守昌 - 博客园

mongodb主要用来干嘛,什么时候用,存什么样的数据?_justlpf的专栏-CSDN博客_mongodb一般用来干啥

场景适用

适用场景

MongoDB 的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS 系统(具有丰富的功能)之间架起一座桥梁,它集两者的优势于一身。根据官方网站的描述,Mongo 适用于以下场景。

● 网站数据:Mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。

● 缓存:由于性能很高,Mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo 搭建的持久化缓存层可以避免下层的数据源过载。

● 大尺寸、低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。

● 高伸缩性的场景:Mongo 非常适合由数十或数百台服务器组成的数据库,Mongo 的路线图中已经包含对MapReduce 引擎的内置支持。

● 用于对象及JSON 数据的存储:Mongo 的BSON 数据格式非常适合文档化格式的存储及查询。

不适场景

● 传统的商业智能应用:针对特定问题的BI 数据库会产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。

● 需要SQL 的问题。

如何使用MongoDB

linux平台安装MongoDB

Linux 平台安装 MongoDB | 菜鸟教程

spring中集成MongoDB,通过引入MongoDB的maven依赖,引入约束mongo来配置spring托管

xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation=" http://www.springframework.org/schema/data/mongohttp://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd"

  配置连接池

<!--连接池配置-->
<mongo:mongo host="${mongo.host}" port="${mongo.port}"><mongo:options connections-per-host="${mongo.options.connections-per-host}"threads-allowed-to-block-for-connection-multiplier="${mongo.options.threads-allowed-to-block-for-connection-multiplier}"connect-timeout="${mongo.options.connect-timeout}"max-wait-time="${mongo.options.max-wait-time}"auto-connect-retry="${mongo.options.auto-connect-retry}"socket-keep-alive="${mongo.options.socket-keep-alive}"socket-timeout="${mongo.options.socket-timeout}"slave-ok="${mongo.options.slave-ok}"write-number="${mongo.options.write-number}"write-timeout="${mongo.options.write-timeout}"write-fsync="${mongo.options.write-fsync}"/>
</mongo:mongo>
<!--连接池工厂配置-->
<mongo:db-factory dbname="${mongo.dbname}" username="${mongo.username}" password="${mongo.password}"  mongo-ref="mongo"/>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"><constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
</bean>
<!--实体映射自动扫描注入的包-->
<mongo:mapping-converter><mongo:custom-converters base-package="com.xyh.mongodb_model" />
</mongo:mapping-converter>

在实体类中加入相应的@Document、@id、@Indexed、@PersistenceConstructor注解,来实现对数据实例化对象进行增删改查的操作。

详细信息可参考网址:在Spring项目中集成使用MongoDB_禤永豪-CSDN博客

MangoDB与HBase对比相关推荐

  1. 为什么国内流行hbase,国外反而多用cassandra?

    为什么国内流行hbase,国外反而多用cassandra? Google trend上的数据 只有中韩在使用hbase,其他地区大多都在用cassandra,这是什么原因导致的?hbase和cassa ...

  2. 大数据Hadoop、Hive、Kafka、Hbase、Spark等框架面经

    大数据组件 学习路线: 阶段1:学习绿色箭头的知识点: 阶段2:学习红色箭头的知识点: 阶段3:学习蓝色箭头的知识点: 1 Hadoop 1.1 Hadoop1.x与Hadoop2.x的区别 1.2 ...

  3. 分布式NoSQL列存储数据库Hbase(六)

    文章目录 分布式NoSQL列存储数据库Hbase(六) 知识点01:回顾 知识点02:目标 知识点03:SQL on Hbase 知识点04:Hive on Hbase 介绍 知识点05:Hive o ...

  4. HBase应该知道的

    1 摘要 本文是一篇HBase学习综述,将会介绍HBase的特点.对比其他数据存储技术.架构.存储.数据结构.使用.过滤器等. 关于Phoenix on HBase,即Sql化的HBase服务,可以参 ...

  5. Java MongoDB 资料集合

    一.Mongodb介绍及对比 1.NoSQL介绍及MongoDB入门  http://renial.iteye.com/blog/684829 2.mongoDB 介绍(特点.优点.原理)  http ...

  6. Scylladb学习笔记

    文章目录 特点概述 应用场景 安装部署 操作 Cql Java Golang Scylla-manager 安装 管理集群 安全检查 修复 数据备份和恢复 监控 Scylla-Monitor node ...

  7. 大数据数据湖之hudi

    hudi介绍 Hudi将带来流式处理大数据, 提供新数据集,同时比传统批处理效率高一个数据量级. 特性 (1)快速upsert,可插入索引 (2)以原子方式操作数据并具有回滚功能 (3)写入器之间的快 ...

  8. JAVA_基础部分_综合篇

    JVM (1) 基本概念: JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收,堆 和 一个存储方法域.JVM 是运行在操作系统之上的,它与硬件没有直接的 ...

  9. 面试杂谈之我的实习求职之路(7个offer)

    现在是5月11号,刚从北京到家,总算也可以歇歇了,最近一段时间真是忙于奔命的感觉,也确实体会到了找工作的艰辛,总而言之,求职之路,如人饮水,冷暖自知. 我想把这段时间找工作的体验和经历分享出来告诉大家 ...

最新文章

  1. HALCON基于形变的模板匹配实现
  2. cd 地址 linux,Ubuntu10.10 CD/DVD下?地址+校??
  3. 嗓子痛引发大抢救!33岁程序员的垂死经历,为所有人敲响警钟!
  4. [css] 举例说明:not()的使用场景有哪些
  5. S3C6410 裸机硬件JPEG解码(转)
  6. mysql8 修改加密方式_mysql8修改密码加密方式
  7. Webpack3 从入门到放弃
  8. pycharm的background task一直更新index,速度慢的解决方法
  9. 定位叠放次序z-index(HTML、CSS)
  10. Objective-C入门教程(摘录)
  11. Android设计模式之单例模式
  12. php5 Trace如何配置,配置参考 · ThinkPHP5.0完全开发手册 · 看云
  13. [LeetCode][easy]Create Target Array
  14. Modelsim 教程
  15. java翻译_java实现英文翻译程序
  16. 什么是内部类?内部类的作用
  17. 13 Scrapy框架介绍
  18. 如果应下载文件,请添加 MIME 映射
  19. springboot生成PDF文件返回给前台
  20. doc命令大全(经典收藏)

热门文章

  1. GitHub + VSTS 开源代码双向同步
  2. php l10n,国际化 (i18n) 与本地化 (l10n) - PHP 编程之道
  3. 读《高效能人士的七个习惯》笔记
  4. 华为鸿蒙系统曝光细节,华为P50手机细节确定,首发鸿蒙OS,国产屏幕+全新影像系统...
  5. django指定mysql数据库 ORM查询
  6. 前端学习:文本溢出隐藏
  7. 2018世界500强出炉,好用的邮箱品牌是否榜上有名?
  8. DIV层的五条叠加法则
  9. vs如何预览html页面,vscode如何用浏览器预览运行html文件
  10. day67 ORM模型之高阶用法整理,聚合,分组查询以及F和Q用法,附练习题整理