Hbase企业实战读书笔记-第三章

1.行和列的交叉点叫做单元格,单元格是版本化的(能有多个版本的数据).

2.单元格的内容也就是列的值是一个不可用分割的字节数组(Byte[]),并且以二进制存储

3.Hbase是没用数据类型的,任何列值都被转换成字节数组来存储

4.Hbase的表的一行数据是通过rowkey来区分的

5.Hbase的行是通过rowkey排序的,排序是按照字典排序,从小到大

6.(逻辑)Hbase的存储格式 列族:列:属性 ,这样存储的,可以当成一个无限嵌套的MAP数据结构

7.(物理)Hbase的物理存储,Hbase的表是按列来分开存储的,Hbase的列是按列族来分组的
   HFile是面向列来存储的,一个列族里面的多个列分别存放在不同的HFile里面,重要的是一个列族的数据会被同一个Region管理

8.Hbase的空白Cell(单元格)是不存储的.

9.查询Hbase的值得时候,返回的都是最新数据


10.Hbase的表名是作为HDFS的存储路径的一部分来使用的,所有必须符合文件名规范

11.Hbase的表在HDFS上面都是单独的目录结构

12.Hbase的表有可能是存放在不同的分区,也就是不同的Region

13.每一个Region只在一个RegionServer上提供服务,而Region直接向客户端提供存储和读取服务

14.访问Hbase并不需要账号密码,只需要拷贝一个hbase-site.xml 配置文件到自己的项目里面,Hbase的API就会自动读取Hbase的连接

15.Hbase的创建链接是一个非常消耗时间的事情,但是Hbase已经提供好链接池的API给我们了.

16.rowkey的排序还按照 二进制字节从左到右来逐一对比,形成次序

17.同一个列族的列都是存放在一起的,所有存放的优化策略都是正对列族的

18.需要添加列族的时候,可以动态添加,但是需要修改列族的时候必须先使用命令停用表.

19.Hbase列族尽量少,并且把常用的列字段放到用一个列族里面,跨列族访问数据是非常低效的

20.Hbase的时间戳是64位整数,可以通过客户端写入数据的时候赋值,也可用痛过RegionServer自动赋值


三 数据库的操作

21.Hbase对数据模型只要有4个操作,Get,Scan,Put,Delete

22.创建HTable类实例是有代价的,每个实例都需要扫描.META.表,以检查该表是否存在,是否可用

23.如果用户需要使用多个HTable实例,应该考虑用到HTablePool,它可以复用多个Htable实例

24.Get类,Get类的操作默认可以返回全部列的数据,也可以指定返回某些列的数据,使用HTbale.get(new Get()) 获取数据的时候
        会返回一个Result实例给用户,用户可以解析Result获取里面的值
      Get内部也是使用Scan进行查询数据的,Get查询数据的时候会返回最新的版本

25.Put类,Put类可以进行新增一行数据的操作,也可以进行更新一行数据的操作,而且Put类的方法支持一次性把一个集合的数据入库 
     如果要频繁修改某些行的数据的时候,需要用到RowLock 锁,防止其他用户进行修改这个数据
     Put类既做Insert 也做 Update操作
     Put类操作每次都会发一起一次RPC操作到服务器,如果大量数据写入表的话,就有数千次RPC操作,这样效率就很低,所以不适合大量   数据的入库
    Put类有一个缓冲区,负责把大量的数据批量仅通过一次RPC发送到服务器.
    Put集合到服务端的时候,可能会出现一部分数据失败,失败数据存放在缓冲区进行重试
 


26.Hbase提供了compare-and-set的操作,这个操作先检查条件满足再执行,这个操作对于行来说就是原子性的

27.Scan类,Scan类就是扫描数据,可以用过startRow和stopRow来指定扫描的范围,通常配合过滤器来使用,可以很灵活的控制获取那些数据
    Scan类获取数据后把数据集封装在ResultScanner实例里面

28.Delete类,Delete类用于删除数据,和Htable的delete方法类似,不过能通过更多条件和方式去删除列
    例如:删除某个列族,某个列,某个时间戳,删除某个比这个时间更早的数据
    当然,Hbase的Delete类删除数据,并不是真正地从磁盘把数据删除掉,而且通过墓碑(tombstones)进行标记处理
    这些被标志了墓碑的值会和小于该数据版本的单元格在合并(major compact)时被删除.

四 Hbase的特有性

29.版本的意义  rowkey + Column + Version 组合起来就是一个Hbase的单元格,version就是一行的版本号
    Version使用一个长整形来表示的,这个是用java.util.Date.getDate() 或者 System.currentTimeMillis() 产生的,而且版本号是倒序排序的,所以读某一个单元的数据,是最新的原因就是这样了

30. 含版本的操作,Get类的setMaxVersions()可以返回2个版本以上,也可以通过setTimeRange(),它可以指定返回指定时间范围内的columns数据
Get.setMaxVersion() ,默认是最新的
Get.setMaxVersion(3) ,返回最后3个版本

31.Delete删除分3种类型,1.Delete:删除列的指定版本    2.Delete Column 删除列的所有版本   3.Delete Family 删除特定列族所有列

32.Hbase 实有 ACID的,能确保数据的原子性

33.行锁,RegionServer提供了行锁特性,这个特性保证了只有一个客户端能获取一行数据锁,同时可以对改行进行修改

34.自动分区,Hbase一个表的数据会被划分成多个Region,Region可以动态扩展并且保证Hbase的负载均衡
    多个Region汇合成一个大的Region,以减少HDFS上存储的文件数量
  
35.创建表的时候,被会一个Region管理者,随着数据的扩大,达到了Region上限的配置值时,Region会按照中间键拆分出 2个
        大致相等的Region.

36.每一个Region都会被一个RegionServer管理,一个RegionServer管理着多个Region.

37.一个RegionServer一台机器,里面有多个Region,Region分配的规则是按照字典顺序分割rowkey进行排序后,存储在不同的RegionServer上

38.每一个RegionServer大概可以管理者100~1000个Region,每一个大小大概是1~20G

39.Region的拆分和转移都是Hbase自动完成的,当一个RegionServer出现问题的时候,Region会快速转移到其他服务器上面
   当Region进行拆分的时候,首选Region下线(offline), 拆分后新的Region再上线(online),这一系列的东西速度很快,不会对数据的读写有影响的






     



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值