NoSQL数据库——Hbase

NoSQL数据库——Hbase

1、什么叫做NoSQL数据库?

NoSQL是非关系型数据库的统称,它采用类似键/值、列族、文档等非关系模型。

2、已经有了使用这莫方便的MySQL等关系型数据库,为什莫还需要NoSQL数据库?

NoSQL数据库的产生是为了解决传统关系型数据库应对大数据的应用难题,包括大规模数据集存储、多重数据种类等方面的挑战。

常见的NoSQL数据库种类:

  • 列族数据库:Hbase
  • 文档数据库:mongoDB
  • 键值数据库:Redis
  • 图数据库:Neo4j

这里用Hbase做个简单的了解:

  • 传统关系型数据库无法应对在数据量剧增的时候导致系统扩展性和性能分析(分表分库也不能很好解决)。
    • 比如MySQL数据库在怎莫分库分表引擎也就一个,数据的处理速度会变慢。但是对于比如Hbase这样的NoSQL数据库,他的底层是HDFS以及MapReduce,所以可以扩展计算以及存储节点会更快。
  • 传统关系型数据库在数据结构变化是时候一般需要停机维护;并且空列会浪费存储空间。
  • 关系型数据库在你更新某个用户信息的时候采用覆盖,而Hbase是生成新的记录。

NoSQL数据库——Hbase_第1张图片

谷歌和Facebook每天为他们的用户收集万亿比特的数据,这些数据存储并非固定模式。

3、Hbase列族数据库

NoSQL数据库——Hbase_第2张图片

Hbase是一个高可靠、高性能、可伸缩的分布式数据库。主要用来存储非结构化以及半结构化的松散数据。

Hbase的目标是处理非常庞大的表,可以同过水平扩展的方式,利用廉价的计算机集群处理超过10亿行数据和数百万列元素组成的数据表。

Hbase是一个构建在HDFS上的分布式列存储系统。

补充:

半结构化数据是结构化数据的一种形式,它并不符合关系型数据库或其他数据表的形式关联起来的数据模型结构,但包含相关标记,用来分隔语义元素以及对记录和字段进行分层。因此,它也被称为自描述的结构。半结构化数据,属于同一类实体可以有不同的属性,即使他们被组合在一起,这些属性的顺序并不重要。常见的半结构数据有XML和JSON

非结构化数据:顾名思义,就是没有固定结构的数据。各种文档、图片、视频/音频等都属于非结构化数据。对于这类数据,我们一般直接整体进行存储,而且一般存储为二进制的数据格式。

4、Hbase的特点:

  • :一个表可以有数十亿行,上百万列
  • 面向列:面向列(族)的存储以及权限控制,列(族)独立检索
  • 多版本:每个单元的数据中可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳。
  • 无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表格中不同的行可以有截然不同的列。
  • 稀疏:空[Null]列并不占用存储空间,表可以设计的非常稀疏
  • 类型单一:数据都是字符串,没有类型

5、Hbase数据坐标:

NoSQL数据库——Hbase_第3张图片

6、Hbase概念视图

NoSQL数据库——Hbase_第4张图片

7、Hbase物理视图

NoSQL数据库——Hbase_第5张图片

8、Hbase shell基本操作

1.进入HBase客户端命令行

[@hadoop102 hbase]$ bin/hbase shell
2.查看帮助命令

hbase(main):001:0> help
3.查看当前数据库中有哪些表

hbase(main):002:0> list

4.表的操作

4.1. 创建表

hbase(main):002:0> create 'student','info'
4.2.插入数据到表

hbase(main):003:0> put 'student','1001','info:sex','male'

hbase(main):004:0> put 'student','1001','info:age','18'

hbase(main):005:0> put 'student','1002','info:name','Janna'

hbase(main):006:0> put 'student','1002','info:sex','female'

hbase(main):007:0> put 'student','1002','info:age','20'

4.3.扫描查看表数据

hbase(main):008:0> scan 'student'

查询前几条数据

scan 'student',{LIMIT=>5}

hbase(main):009:0> scan 'student',{STARTROW => '1001', STOPROW  => '1001'}

hbase(main):010:0> scan 'student',{STARTROW => '1001'}

4.4.查看表结构

hbase(main):011:0> describe 'student'
hbase(main):011:0> desc 'student'
4.5.更新指定字段的数据

hbase(main):012:0> put 'student','1001','info:name','Nick'

hbase(main):013:0> put 'student','1001','info:age','100'
4.6.查看“指定行”或“指定列族:列”的数据

hbase(main):014:0> get 'student','1001'

hbase(main):015:0> get 'student','1001','info:name'
4.7.统计表数据行数

hbase(main):021:0> count 'student'
4.8.删除数据

删除某rowkey的全部数据:

hbase(main):016:0> deleteall 'student','1001'
删除某rowkey的某一列数据:

hbase(main):017:0> delete 'student','1002','info:sex'
4.9.清空表数据

hbase(main):018:0> truncate 'student'
提示:清空表的操作顺序为先disable,然后再truncate。

4.10.删除表

首先需要先让该表为disable状态:

hbase(main):019:0> disable 'student'
然后才能drop这个表:

hbase(main):020:0> drop 'student'
提示:如果直接drop表,会报错:ERROR: Table student is enabled. Disable it first.

4.11.变更表信息

将info列族中的数据存放3个版本:

hbase(main):022:0> alter 'student',{NAME=>'info',VERSIONS=>3}

hbase(main):022:0> get 'student','1001',{COLUMN=>'info:name',VERSIONS=>3}

总结:这篇博客只是方便给初学一个认知,并没有涉及底层原理知识!

你可能感兴趣的:(数据库,Hbase,hbase,nosql,数据库)