一、rowkey長(zhǎng)度原則
rowkey是一個(gè)二進(jìn)制碼流,可以為任意字符串,最大長(zhǎng)度為64kb,實(shí)際應(yīng)用中一般為10-100bytes,它以byte[]形式保存,一般設(shè)定成定長(zhǎng)。
一般越短越好,不要超過16個(gè)字節(jié),注意原因如下:
1、目前操作系統(tǒng)都是64位系統(tǒng),內(nèi)存8字節(jié)對(duì)齊,控制在16字節(jié),8字節(jié)的整數(shù)倍利用了操作系統(tǒng)的最佳特性。
2、hbase將部分?jǐn)?shù)據(jù)加載到內(nèi)存當(dāng)中,如果rowkey過長(zhǎng),內(nèi)存的有效利用率就會(huì)下降。
二、rowkey散列原則
如果rowkey按照時(shí)間戳的方式遞增,不要將時(shí)間放在二進(jìn)制碼的前面,建議將rowkey的高位字節(jié)采用散列字段處理,由程序隨即生成。低位放時(shí)間字段,這樣將提高數(shù)據(jù)均衡分布,各個(gè)regionServer負(fù)載均衡的幾率。
如果不進(jìn)行散列處理,首字段直接使用時(shí)間信息,所有該時(shí)段的數(shù)據(jù)都將集中到一個(gè)regionServer當(dāng)中,這樣當(dāng)檢索數(shù)據(jù)時(shí),負(fù)載會(huì)集中到個(gè)別regionServer上,造成熱點(diǎn)問題,會(huì)降低查詢效率。
三、rowkey唯一原則
必須在設(shè)計(jì)上保證其唯一性,rowkey是按照字典順序排序存儲(chǔ)的,因此,設(shè)計(jì)rowkey的時(shí)候,要充分利用這個(gè)排序的特點(diǎn),將經(jīng)常讀取的數(shù)據(jù)存儲(chǔ)到一塊,將最近可能會(huì)被訪問的數(shù)據(jù)放到一塊。但是這里的量不能太大,如果太大需要拆分到多個(gè)節(jié)點(diǎn)上去。
所以良好的rowkey設(shè)計(jì),應(yīng)當(dāng)遵循三大原則,并且能讓數(shù)據(jù)分散,從而避免熱點(diǎn)問題。