首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HBase rowkey设计案例

hbase所谓的三维有序存储的三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储。...rowkey是行的主键,而且hbase只能用个rowkey,或者一个rowkey范围即scan来查找数据。所以 rowkey的设计是至关重要的,关系到你应用层的查询效率。...rowkey的设计和数据的分布有很大关系,rowkey设计的时候需要保证数据入库时的并发度,但又不能过于分散。...时间属性放在rowkey中需要注意数据分布和并发度的问题:hbase数据是按照rowkey排序的,时间属性放在rowkey中容易造成数据总是在末尾写入的情况,这种情况下并发度很差。...根据hbase的原理,key的周期需要至少比TTL大2* hbase.hregion.majorcompaction(默认24小时)的时间,才能够保证过期的数据能够在key循环回来之前得到完全清理。

35720
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    HBase设计之rowkey设计

    HBase应用场景非常广泛;社区前面有一系列文章。大家可以到社区看看看;张少华同学本篇主要讲HBASE最重要的一个基础知识,rowkey的涉及,非常赞!大力推荐!...HBase查询只能通过其rowkey来查询(我们可以认为是HBase中表的唯一索引)。...所以rowkey的设计在使用HBase的设计中尤为重要,另外rowkey设计也关乎到数据库中数据的存放位置,若rowkey设计不当,在HBase分区中,会引发数据热点(hotspot)问题出现,即数据访问集中在某个节点或者...由于在HBase中数据存储是k-v形式,若在HBase中同一表的同一列插入相同rowkey(除自带版本),则原先的数据会被覆盖掉,所以为了保证rowkey的唯一性,在实际的设计中我们可能更多的是结合多种设计方法来实现...最后,rowkey的长度也会关乎到我们的性能,由于HBase属于列式数据库,若rowkey长度增加一倍那么整体的存储量会成倍增加。

    2.4K60

    面试,HBase如何设计rowkey

    HBase中的rowkey是按字典顺序排序的,通过rowkey查询可以对千万级的数据实现毫秒级响应。然而,如果rowkey设计不合理的话经常会出现一个很普遍的问题----热点。...(account))+account 此外,通过md5散列之后的rowkey,在创建表预分区时候,可以使用hbase自带的HexStringSplit方法 第三:反转(Reversing) 如果定义的...第四:最小化rowkey和列簇长度 rowkey可以是任意的字符串,最大长度64KB,但是建议在设计rowkey时候,尽可能的短,原因: 1.hbase数据存储是以key-value的形式存储的,如果..."md5 digest as string length: " + sbDigest.length); // returns 26 但是,也有一个缺点,就是如果使用这种二进制表示的类型时候,在hbase...shell界面查数据的时候,可读性比较差,比如: hbase(main):002:0> get 'table1', 'rowkey1' COLUMN

    1.1K10

    HBaserowkey 设计原则

    rowkey是行的主键,而且hbase只能用个rowkey,或者一个rowkey范围即scan来查找数据。所以 rowkey的设计是至关重要的,关系到你应用层的查询效率。...由于在HBase中数据存储是Key-Value形式,若HBase中同一表插入相同Rowkey,则原先的数据会被覆盖掉(如果表的version设置为1的话),所以务必保证Rowkey的唯一性. 2.Rowkey...的排序原则 HBaseRowkey是按照ASCII有序设计的,我们在设计Rowkey时要充分利用这点。...可以使用"Long.MAX_VALUE - 弹幕发表时间"的 long 值作为 Rowkey 的前缀。 3.Rowkey的散列原则 我们设计的Rowkey应均匀的分布在各个HBase节点上。...,而且列族名、列名等尽量使用短名字,因为HBase属于列式数据库,这些名字都是会写入到HBase的持久化文件HFile中去,过长的Rowkey、列族、列名都会导致整体的存储量成倍增加。

    96520

    HBaserowKey设计技巧

    本篇博客小菌为大家带来的是HBaserowKey设计技巧!...HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定位...HBaserowkey可以唯一标识一行记录,在HBase查询的时候,有以下几种方式: 通过get方式,指定rowkey获取唯一一条记录 通过scan方式,设置startRow和stopRow参数进行范围匹配...[key] 的最新值可以通过scan [key]获得[key]的第一条记录,因为HBaserowkey是有序的,第一条记录是最后录入的数据。...其他一些建议: 尽量减少行键和列族的大小在HBase中,value永远和它的key一起传输的。当具体的值在系统间传输时,它的rowkey,列名,时间戳也会一起传输。

    91010

    HBase RowKey 设计与查询实践

    RowKey 设计 HBase 作为一款分布式的NoSQL数据库,数据的分布根据rowKey range方式来划分,每个Region 存储了一定范围rowKey 的数据, 数据的读写通常情况下需要指定rowKey...散列原则 设计的RowKey应均匀的分布在各个HBase节点上,避免产生热点。...HexStringSplit HBase 自带的十六进制的字符串预分区算法,那么在rowKey 设计时通常使用hash后字符串作为前缀或者完整的RowKey。...UniformSplit HBase 自带的二进制byte的预分区算法, 那么rowKey 需要设计为字节数据模式。...不同字段排序存储 HBase 是按照rowKey 进行排序的,如果要按照不同字段排序就需要在rowKey中添加对应的字段,并且提前加工好其排序的方式,排序的字段越多冗余的数据就越多。

    1.2K20

    再谈|Rowkey设计_HBase表设计

    HBaserowkey设计可以说是使用HBase最为重要的事情,直接影响到HBase的性能,常见的RowKey的设计问题及对应访问为: Hotspotting 的行由行键按字典顺序排序,这样的设计优化了扫描...如果需要导入时间顺序的文件(如log)到HBase中,可以学习OpenTSDB的做法。它有一个页面来描述它的HBase模式。...在HBase的存储文件( storefiles )中,有一个索引用来方便值的随机访问,但是访问一个单元的坐标要是太大的话,会占用很大的内存,这个索引会被用尽。...下例便是当需要增加一个值时会看到的shell: hbase(main):001:0> incr 't', 'r', 'f:q', 1 COUNTER VALUE = 1 hbase(main):002...由于HBase行键是排序的,该键排在任何比它老的行键的前面,所以是第一个。 该技术可以用于代替版本数,其目的是保存所有版本到“永远”(或一段很长时间) 。

    1.2K21

    大数据入门:Hbase Rowkey设计

    Hbase的原型来自Google的BigTable,各方面性能优异,这其实得益于Hbase的内部设计。今天的大数据入门分享,我们就来具体讲讲,Hbase Rowkey设计。...Hbase Rowkey设计 对于分布式数据库,数据是分布在不同服务器节点,HBase作为列式数据库,一张表可以达到十亿行,这就需要将表拆分成多个部分储备起来,分别存入region中,由regionserver...HBase通过Rowkey进行划分,在设计Rowkey时,如有大量连续编号的Rowkey,会导致大量Rowkey相近的记录集中在个别region里,也就是集中在一台或几台regionServer当中。...HBase将部分数据加载到内存当中,如果Rowkey过长,内存的有效利用率就会下降。...关于大数据入门,Hbase Rowkey设计,以上就为大家做了简单的介绍了。

    40910

    Hbase 基础 Rowkey CF 架构 概述 预分区及Rowkey设计 学习笔记

    Hbase Rowkey CF 架构 概述 预分区及Rowkey设计 学习笔记 1. 概述 HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。...1.2 使用场景 是巨量大(百T、PB级别) 查询简单(基于rowkey或者rowkey范围查询) 不涉及到复杂的关联 有几个典型的场景特别适合使用Hbase来存储: 海量订单流水数据(长久保存) 交易记录...2.2 Rowkey Rowkey的概念和mysql中的主键是完全一样的,Hbase使用Rowkey来唯一的区分某一行的数据。...由于Hbase只支持3中查询方式: 基于Rowkey的单行查询 基于Rowkey的范围扫描 全表扫描 因此,RowkeyHbase的性能影响非常大,Rowkey的设计就显得尤为的重要。...2.4 TimeStamp TimeStamp对Hbase来说至关重要,因为它是实现Hbase多版本的关键。在Hbase中使用不同的timestame来标识相同rowkey行对应的不通版本的数据。

    1.3K51

    hbaserowkey设计原则和实现方式

    一:hbase的存储形式 hbase的内部使用KeyValue的形式存在,其key是有rowkey:family:column:logTime,value是其存储的内容。...这样,最重要的提高索引速度的就是设计合适的rowkey。 二:rowkey的设计原则 1、长度原则 最短越好,最大不能超过64K。太长的影响有两点,一是极大影响了HFile的存储效率。...2、唯一原则 保证rowkey的唯一性,这条没有什么要讲的。 3、自己一条原则 尽量保证经常一起用的rowkey存储在同一个region上,有助于提升检索效率。但要避免热点问题。...三:rowkey引起热点问题的集中解决方法 1、加盐:在rowkey前面加一个冗余信息,这样可以把数据分散到不同的region中。...优点:可以有效的防止rowkey集中分配到一个或多个region中。有效避免了热点问题; 缺点:无形中增加了rowkey的长度;范围检索得不到有效使用。

    1.2K20

    优化 HBase - HBase 的预分区及 rowkey 设计原则与方法

    可见,HBase 是通过 rowkey 来进行查询的,rowkey 设计的优劣会直接影响读写性能。...那如何才能设计出既符合业务使用逻辑,又能满足系统性能需求的 rowkey 呢? 1预分区 在介绍 rowkey 设计之前,先来了解 HBase 的预分区,因为预分区跟 rowkey 设计密不可分。...2rowkey 设计原则 HBase 中的 rowkey 设计需要遵循以下原则: 2.1rowkey 唯一原则 若在 HBase 中向同一张表插入相同 rowkey 的记录,如没有设置版本数量,则此 rowkey...2.2rowkey 排序原则 在《初识 HBase - HBase 基础知识》中我们提到过,rowkey 是按照 ASCII 字典排序(byte order)由低到高存储在表中的。...由于 HBase 中的 rowkey 是按照 ASCII 字典顺序由低到高排序,因此若使用递增的 rowkey,最新产生的数据会被放到旧数据的后面。

    3.7K34

    HBase存储IM消息,RowKey该怎么设计?

    RowKeyHBase表设计中最重要的一个方面,它决定了应用程序与HBase表的交互方式,还会影响您从HBase中提取数据的性能。参看《HBase的表结构你设计得不对!》...参看《基于TimeLine模型的消息同步机制》,《TimeLine模型下确保消息有序不丢》 以下是瓜子IM系统消息存储的RowKey设计 一、RowKey的格式设计 会话ID和消息ID采用snowflake...算法生成,RowKey包括了三部分内容。...在没有采用HBase存储消息之前,消息使用Mysql存储。采用会话Id%4,分为4个库。如下图 ? HBase依照rowkey实现同样的分区效果,理论上和分库是一个效果。...采用rowkey前置3位预分区,每一个rowkey到来时,选取与region相同位数的前3位进行匹配,例图中,002|…..|….rowkey会选择3位002进行region匹配,然后把数据放入对应分区

    2.6K10

    设计HBase RowKey需要注意的二三事

    HBase中,定位一条数据(即一个Cell)需要4个维度的限定:行键(RowKey)、列族(Column Family)、列限定符(Column Qualifier)、时间戳(Timestamp)。...其中,RowKey是最容易出现问题的。除了根据业务和查询需求来设计之外,还需要注意以下三点。 1. 打散RowKey HBase中的行是按照RowKey字典序排序的。...控制RowKey长度 在HBase中,RowKey、列族、列名等都是以byte[]形式传输的。 RowKey的最大长度限制为64KB,但在实际应用中最多不会超过100B。...设计短RowKey有以下两方面考虑: 在HBase的底层存储HFile中,RowKey是KeyValue结构中的一个域。...HBase官方不推荐使用3个以上列族,因此实际上列族命名几乎都用一个字母,比如‘c’或‘f’。 3. 保证RowKey唯一性 这个就是显而易见的了,不再赘述。

    1.4K51

    OpenTSDB 底层 HBaseRowkey 是如何设计的

    熟悉 HBase 的同学肯定知道,要看 HBase 的表设计的好不好,关键是看其 Rowkey 设计的好不好,HBaseRowkey 设计会考虑到实际的查询场景。...(因为本文侧重于介绍 HBaseRowkey 设计,所以关于 OpenTSDB 的其他一些知识本文并不会涉及,如果你对这部分知识感兴趣,请自行去网上搜索相关文章。)...2.1 Rowkey 设计版本一 OpenTSDB 为我们提供的查询业务场景已经有了,我们可以很快设计出 HBaseRowkey: metric + timestamp + tagk1 + tagv1...有些同学可能已经看出来了,如果我们按照这样的方式去设计 HBase 表的 Rowkey,虽然可以满足我们的查询需求,但是这种存储数据的方式导致 Key 大量的重复存储,这样会导致数据的急剧增加,所以 OpenTSDB...基于这个特点,OpenTSDB 对 Rowkey 进行了进一步的优化,思想为:将 Rowkey 中时间戳由原来的秒级别或毫秒级别统一转换成小时级别的,多余的秒数据或者毫秒数据作为 HBase 的列名称。

    2.1K31

    大白话彻底讲透 HBase Rowkey 设计和实现!

    - 前言 - 大家都知道 HBase 由于它存储和读写的高性能,在 OLAP 即时分析中发挥着非常重要的作用,而 RowKey 作为 HBase 的核心知识点,其设计势必会影响到数据在...HBase 中的分布,甚至会影响我们查询的效率,可以说 RowKey 的设计质量关乎了 HBase 的质量。...- RowKey 概念 - HBaseRowKey 可以唯一标识一行记录,在 HBase 查询的时候有以下几种方式: 通过 get 方式,指定 RowKey 获取唯一一条记录;...- RowKey 的设计原则 - 通过前面的分析,我们知道了 HBaseRowKey 设计的重要性。...为了帮助我们设计出完美的 RowKeyHBase 提出了 RowKey 的设计原则主要有以下四点:长度原则、唯一原则、排序原则、散列原则。

    1.7K20
    领券