hbase时间戳注意事项

自定义时间戳注意事项一

   hbase添加数据时使用的时间戳默认使用的是数据添加时的时间,在存储实时数据的时候是很方便,此时数据时间戳可以当做数据本身的一种属性来使用。但是如果处理的是离线数据,数据产生时间和数据存储时间没有任何关系,那时间戳这个重要的属性就被浪费来。
   所以,hbase提供了自定义时间戳的方法。即在使用put方法添加数据的时候手动添加时间戳:

public Put add(Cell kv)  //cell是keyValue的接口

public KeyValue(final byte[] row, final byte[] family,
      final byte[] qualifier, final long timestamp, final byte[] value) {
    this(row, family, qualifier, timestamp, Type.Put, value);
  }

这里需要注意的是时间戳不能随意指定,最好新的时间戳要大于等于旧的的时间戳(这里说的是最好),原因主要有两个:

  1. 因为hbase并不会保留最新插入的数据,而是保留时间戳最大的数据,也就是说如果新添加的数据时间戳小于之前的数据,在版本数足够的情况下可能添加成功,如果版本数不足则无法添加成功(如果有建表的时候设置的版本数是3,已经有三个版本,如果新添加的数据时间戳比三个版本都小,那这个数据就不会添加成功)
  2. 使用api读取数据的时候,并不是按时间戳大小来读取的,是按存入时间读取的,例如,如果有一行数据,新值的时间戳小于旧值的时间戳,使用scan读取数据在不指定maxversion的情况下,默认读取的是最新插入的数据而不是时间戳最小的数据。

总结上面两点就是:时间戳小于旧时间戳有可能插入不成功,如果插入成功使用api读取的就是最新插入的数据。

自定义时间戳注意事项二

   hbase的时间戳单位默认是毫秒,但是由于时间戳支持自定义,所以并不能严格说默认单位是毫秒。
  &emsp例如笔者做过一个项目,要存入hbase的一批数据的时间戳是秒级的,存入时并没有将时间戳转换为毫秒级就直接存入了,此时时间戳是毫秒级的,但是用却要当做秒来用。所以在我的项目里hbase的时间戳就是秒级,在用api读取数据指定范围时也要按秒来指定时间范围。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值