RowKey作用 1.1 RowKey对查询的影响 HBase中 RowKey 用来唯一标识一行记录。...1.2 RowKey对Region划分影响 HBase 表的数据是按照 RowKey 来分散到不同 Region,不合理的 RowKey 设计会导致热点问题。...RowKey设计原则 唯一原则:RowKey对应关系型数据库的唯一键,必须保证 RowKey 的唯一性。若向 HBase 同一张表插入相同 RowKey 的数据,则原先存在的数据会被新的数据覆盖。...,但 RowKey 尾部的数据却呈现出了良好的随机性,此时可以考虑将 RowKey 翻转,或者直接将尾部部分放到 RowKey 的前面,这样就可以把最频繁发生变化的部分放在前面。...3.3.3 RowKey长度 RowKey 尽可能的短,但仍可用于必需的数据访问(例如,Get 与 Scan)。如果 RowKey 短的对于数据访问没有用处,那么还不如使用一个长的 RowKey。
经常查 避免热点 尽量短,并且尽量长度一致
Hbase Rowkey CF 架构 概述 预分区及Rowkey设计 学习笔记 1. 概述 HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。...2.2 Rowkey Rowkey的概念和mysql中的主键是完全一样的,Hbase使用Rowkey来唯一的区分某一行的数据。...由于Hbase只支持3中查询方式: 基于Rowkey的单行查询 基于Rowkey的范围扫描 全表扫描 因此,Rowkey对Hbase的性能影响非常大,Rowkey的设计就显得尤为的重要。...3.2 Rowkey设计 3.2.1 Rowkey长度原则(最好不超过16字节) Rowkey是一个二进制码流,Rowkey的长度被很多开发者建议说设计在10~100个字节,不过建议是越短越好,不要超过...3.2.2 rowkey散列原则 把主键哈希后当成rowkey的头部 3.2.3 rowkey唯一原则 必须在设计上保证其唯一性,rowkey是按照字典顺序排序存储的,因此,设计rowkey的时候,要充分利用这个排序的特点
rowkey是行的主键,而且hbase只能用个rowkey,或者一个rowkey范围即scan来查找数据。所以 rowkey的设计是至关重要的,关系到你应用层的查询效率。...rowkey的设计和数据的分布有很大关系,rowkey设计的时候需要保证数据入库时的并发度,但又不能过于分散。...可枚举属性值较少的属性放在rowkey前面 在rowkey中,需要放入多个属性,这多个属性的先后次序和访问的效率有直接的关系。...时间属性放在rowkey中需要注意数据分布和并发度的问题:hbase数据是按照rowkey排序的,时间属性放在rowkey中容易造成数据总是在末尾写入的情况,这种情况下并发度很差。...通过rowkey设计来控制并发度 在相同业务模式下,不同的rowkey设计系统的并发度不一样。
本节介绍了 HBase 中的行键(Rowkey)设计。 Hotspotting HBase 中的行按行键按顺序排序。这种设计优化了扫描(scan),允许您将相关的行或彼此靠近的行一起读取。...使用确定性 Hashing 允许客户端重建完整的 rowkey 并使用 Get 操作正常检索该行。...Rowkey长度 保持它们尽可能短,这样它们仍然可以用于所需的数据访问(例如,Get 和 Scan)。对数据访问无用的短密钥并不比具有更好的 get/scan 属性的更长密钥更好。...因此,相同的 rowkey 可以存在于没有碰撞的表中存在的每个 ColumnFamily 中。 Rowkeys的不变性 行键无法更改。他们可以在表格中“更改”的唯一方法是该行被删除然后重新插入。...RowKeys与区域分割之间的关系 如果您预先拆分表格,了解您的 rowkey 如何在区域边界上分布是非常重要的。
所以rowkey的设计在使用HBase的设计中尤为重要,另外rowkey设计也关乎到数据库中数据的存放位置,若rowkey设计不当,在HBase分区中,会引发数据热点(hotspot)问题出现,即数据访问集中在某个节点或者...若HBase中表region按照每个字母前缀来区分,我们来对比rowkey 加salt前后的变化,首先我们给一组未salt前的rowkey: rk001 rk002 rk003 上述rowkey根据分区来看是在同一个...上面介绍的两种rowkey常用的rowkey设计方法。...rowkey来直接查询数据的性能高,同时实时性也不高,所以我们在rowkey设计时我们应该包含更多可用信息。...所以rowkey的设计没有固定的模式,在实际的实践中需要我们参考各种因素来实现rowkey的最优化。
开头,先功夫一个好消息,浪尖的微信公众号支持内容搜索了,入口请点击原文阅读。 https://data.newrank.cn/m/s.html?s=PSkwPS...
一直以来对rowkey的设计都比较迷茫,《hbase权威指南》倒是给出了个还算靠谱的例子。...下面这个例子有点儿像帖子表结构,它的rowkey设计是这样的,可以简单的理解为,什么人在什么时间发了什么信息,信息包括什么附件,它是用户为主线的一个设计。...--- 如果我们想查某个用户发的信息,我们可以设置scan的start rowkey 为该userId,end rowkey...当我们要查某个具体的帖子的内容,rowkey过滤--即可。 所以rowkey的设计是要看具体的应用的。...但是这样子的话,以后你想取某个用户的userId的时候只能开多线程去访问了,因为你不能逆推出来它的rowkey。
HBase中的rowkey是按字典顺序排序的,通过rowkey查询可以对千万级的数据实现毫秒级响应。然而,如果rowkey设计不合理的话经常会出现一个很普遍的问题----热点。...避免产生热点的方式也就是尽可能的将rowkey均匀分散到所有的region上,下面介绍了几种rowkey设计常用的方式: 第一:加盐(salting) 加盐是指在rowkey的前缀添加随机数据,使rowkey...hash之后,然后查询rowkey;通过反转方式设计的rowkey同理。...第四:最小化rowkey和列簇长度 rowkey可以是任意的字符串,最大长度64KB,但是建议在设计rowkey时候,尽可能的短,原因: 1.hbase数据存储是以key-value的形式存储的,如果...rowkey比较长,比如100字节,那么1000w行数据,光rowkey存储就需要100*1000w=10亿个字节,将近1G的数据。
rowkey是行的主键,而且hbase只能用个rowkey,或者一个rowkey范围即scan来查找数据。所以 rowkey的设计是至关重要的,关系到你应用层的查询效率。...rowkey是以字典顺序排序的,存储的是字节码。 Rowkey设计原则 1.Rowkey的唯一原则 必须在设计上保证其唯一性。...的排序原则 HBase的Rowkey是按照ASCII有序设计的,我们在设计Rowkey时要充分利用这点。...Region热点问题 1、Reverse反转 针对固定长度的Rowkey反转后存储,这样可以使Rowkey中经常改变的部分放在最前面,可以有效的随机Rowkey。...4.Rowkey的长度原则复制代码 Rowkey长度设计原则:Rowkey是一个二进制,Rowkey的长度被很多开发者建议说设计在10~100个字节,建议是越短越好。
RowKey 设计 HBase 作为一款分布式的NoSQL数据库,数据的分布根据rowKey range方式来划分,每个Region 存储了一定范围rowKey 的数据, 数据的读写通常情况下需要指定rowKey...唯一原则 RowKey 本身具有唯一性, 写入相同RowKey的数据下相同的列会被覆盖。 排序原则 数据的存储是按照RowKey进行字典方式升序存储,主要是为了方便检索。...RowKey尾部的数据却呈现出了良好的随机性,此时,可以考虑将RowKey的信息翻转,或者直接将尾部的bytes提前到RowKey的开头。...Reversing可以有效的使RowKey随机分布,但是牺牲了RowKey的有序性。...Salting(加盐) Salting的原理是在原RowKey的前面添加固定长度的随机数,也就是给RowKey分配一个随机前缀使它和之间的RowKey的开头不同。
2 rowkey散列原则 如果rowkey按照时间戳的方式递增,不要将时间放在二进制码的前面,建议将rowkey的高位作为散列字段,由程序随机生成,低位放时间字段,这样将提高数据均衡分布在每个...3 rowkey唯一原则 必须在设计上保证其唯一性,rowkey是按照字典顺序排序存储的,因此,设计rowkey的时候,要充分利用这个排序的特点,将经常读取的数据存储到一块,将最近可能会被访问的数据放到一块...下面是一些常见的避免热点的方法以及它们的优缺点: 1.加盐 这里所说的加盐不是密码学中的加盐,而是在rowkey的前面增加随机数,具体就是给rowkey分配一个随机前缀以使得它和之前的rowkey...这样可以使得rowkey中经常改变的部分(最没有意义的部分)放在前面。这样可以有效的随机rowkey,但是牺牲了rowkey的有序性。...反转rowkey的例子以手机号为rowkey,可以将手机号反转后的字符串作为rowkey,这样的就避免了以手机号那样比较固定开头导致热点问题 4.时间戳反转 一个常见的数据处理问题是快速获取数据的最近版本
HBase的rowkey设计可以说是使用HBase最为重要的事情,直接影响到HBase的性能,常见的RowKey的设计问题及对应访问为: Hotspotting 的行由行键按字典顺序排序,这样的设计优化了扫描
HBase通过Rowkey进行划分,在设计Rowkey时,如有大量连续编号的Rowkey,会导致大量Rowkey相近的记录集中在个别region里,也就是集中在一台或几台regionServer当中。...Rowkey设计原则和方法 ①Rowkey长度原则 一般越短越好,不要超过16个字节,原因如下: 目前操作系统都是64位系统,内存8字节对齐,控制在16字节,8字节的整数倍利用了操作系统的最佳特性。...②Rowkey散列原则 如果Rowkey按照时间戳的方式递增,不要将时间放在二进制码的前面,建议将Rowkey的高位字节采用散列字段处理,由程序随即生成。...③Rowkey唯一原则 必须在设计上保证其唯一性,Rowkey是按照字典顺序排序存储的,因此,设计Rowkey的时候,要充分利用这个排序的特点,将经常读取的数据存储到一块,将最近可能会被访问的数据放到一块...关于大数据入门,Hbase Rowkey设计,以上就为大家做了简单的介绍了。
rowKey的作用 读写数据时通过 RowKey 找到对应的 Region; MemStore 中的数据按 RowKey 字典顺序排序; HFile 中的数据按 RowKey 字典顺序排序。...rowkey设计原则 唯一性:类似于MySQL、Oracle中的主键,用于标示唯一的行; 随机性:有效解决hbase热点问题,避免大量客户端只访问一个或几个节点; 长度设计:越短越好,8字节的整数倍利用了操作系统的最佳特性...解决hbase热点问题 即增加rowkey的随机性,常见一下三种做法: 反转:如手机号或者时间等,开始位相似性较高,手机号第一位都是1,结束位有一定随机性,做rowkey时反转即可 加盐:在rowkey
这样,最重要的提高索引速度的就是设计合适的rowkey。 二:rowkey的设计原则 1、长度原则 最短越好,最大不能超过64K。太长的影响有两点,一是极大影响了HFile的存储效率。...2、唯一原则 保证rowkey的唯一性,这条没有什么要讲的。 3、自己一条原则 尽量保证经常一起用的rowkey存储在同一个region上,有助于提升检索效率。但要避免热点问题。...三:rowkey引起热点问题的集中解决方法 1、加盐:在rowkey前面加一个冗余信息,这样可以把数据分散到不同的region中。...优点:可以有效的防止rowkey集中分配到一个或多个region中。有效避免了热点问题; 缺点:无形中增加了rowkey的长度;范围检索得不到有效使用。...2、字段交换,提升权重:如果rowkey中含有几个信息字段,可以调整信息字段的顺序。 缺点:对于单个信息字段,或者无论怎么调整都会遇到region热点的rowkey是解决不了的。
- RowKey 概念 - HBase 中 RowKey 可以唯一标识一行记录,在 HBase 查询的时候有以下几种方式: 通过 get 方式,指定 RowKey 获取唯一一条记录;...从字面意思来看,RowKey 就是行键的意思,在增删改查的过程中充当了主键的作用。它可以是任意字符串,在 HBase 内部 RowKey 保存为字节数组。...- RowKey 的设计原则 - 通过前面的分析,我们知道了 HBase 中 RowKey 设计的重要性。...为了帮助我们设计出完美的 RowKey,HBase 提出了 RowKey 的设计原则主要有以下四点:长度原则、唯一原则、排序原则、散列原则。...比如设计 RowKey 的时候,当 Rowkey 是按时间戳的方式递增,就不要将时间放在二进制码的前面,可以将 Rowkey 的高位作为散列字段,由程序循环生成,可以在低位放时间字段,这样就可以提高数据均衡分布在每个
熟悉 HBase 的同学肯定知道,要看 HBase 的表设计的好不好,关键是看其 Rowkey 设计的好不好,HBase 的 Rowkey 设计会考虑到实际的查询场景。...2.1 Rowkey 设计版本一 OpenTSDB 为我们提供的查询业务场景已经有了,我们可以很快设计出 HBase 的 Rowkey: metric + timestamp + tagk1 + tagv1...我们仔细观察可以发现,Rowkey 组成中同一个指标的监控数据除了的时间不一样,其他都是一样的!...基于这个特点,OpenTSDB 对 Rowkey 进行了进一步的优化,思想为:将 Rowkey 中时间戳由原来的秒级别或毫秒级别统一转换成小时级别的,多余的秒数据或者毫秒数据作为 HBase 的列名称。...如果想通过例子进一步了解 Rowkey 到底是如何组织以及列名称是如何组成的,可以进一步阅读 通过例子剖析 OpenTSDB 的 Rowkey 及列名设计。
RowKey是HBase表设计中最重要的一个方面,它决定了应用程序与HBase表的交互方式,还会影响您从HBase中提取数据的性能。参看《HBase的表结构你设计得不对!》...参看《基于TimeLine模型的消息同步机制》,《TimeLine模型下确保消息有序不丢》 以下是瓜子IM系统消息存储的RowKey设计 一、RowKey的格式设计 会话ID和消息ID采用snowflake...算法生成,RowKey包括了三部分内容。...HBase依照rowkey实现同样的分区效果,理论上和分库是一个效果。通过会话Id取模后的128个取值均匀散列到了不同region。 ? 分区值为000—127,预分区效果如下图 ?...采用rowkey前置3位预分区,每一个rowkey到来时,选取与region相同位数的前3位进行匹配,例图中,002|…..|….rowkey会选择3位002进行region匹配,然后把数据放入对应分区
其中,RowKey是最容易出现问题的。除了根据业务和查询需求来设计之外,还需要注意以下三点。 1. 打散RowKey HBase中的行是按照RowKey字典序排序的。...它是指在RowKey的前面增加一些前缀。 加盐的前缀种类越多,RowKey就被打得越散。 前缀不可以是随机的,因为必须要让客户端能够完整地重构RowKey。...控制RowKey长度 在HBase中,RowKey、列族、列名等都是以byte[]形式传输的。 RowKey的最大长度限制为64KB,但在实际应用中最多不会超过100B。...设计短RowKey有以下两方面考虑: 在HBase的底层存储HFile中,RowKey是KeyValue结构中的一个域。...假设RowKey长度100B,那么1000万条数据中,只算RowKey就占用掉将近1G空间,会影响HFile的存储效率。 ?
领取专属 10元无门槛券
手把手带您无忧上云