
owkey長(zhǎng)度原則
rowkey是一個(gè)二進(jìn)制碼流,可以是任意字符串,最大長(zhǎng)度 64kb ,實(shí)際應(yīng)用中一般為10-100bytes,以 byte[]形式保存,一般設(shè)計(jì)成定長(zhǎng)。
建議越短越好,不要超過(guò)16個(gè)字節(jié),原因如下:
1. 數(shù)據(jù)的持久化文件HFile中是按照KeyValue存儲(chǔ)的,如果rowkey過(guò)長(zhǎng),比如超過(guò)100字節(jié),1000w行數(shù)據(jù),光rowkey就要占用100*1000w=10億個(gè)字節(jié),將近1G數(shù)據(jù),這樣會(huì)極大影響HFile的存儲(chǔ)效率;
2. MemStore將緩存部分?jǐn)?shù)據(jù)到內(nèi)存,如果rowkey字段過(guò)長(zhǎng),內(nèi)存的有效利用率就會(huì)降低,系統(tǒng)不能緩存更多的數(shù)據(jù),這樣會(huì)降低檢索效率。
3. 目前操作系統(tǒng)都是64位系統(tǒng),內(nèi)存8字節(jié)對(duì)齊,控制在16個(gè)字節(jié),8字節(jié)的整數(shù)倍利用了操作系統(tǒng)的最佳特性。
rowkey散列原則
如果rowkey按照時(shí)間戳的方式遞增,不要將時(shí)間放在二進(jìn)制碼的前面,建議將rowkey的高位作為散列字段,由程序隨機(jī)生成,低位放時(shí)間字段,這樣將提高數(shù)據(jù)均衡分布在每個(gè)RegionServer,以實(shí)現(xiàn)負(fù)載均衡的幾率。如果沒(méi)有散列字段,首字段直接是時(shí)間信息,所有的數(shù)據(jù)都會(huì)集中在一個(gè)RegionServer上,這樣在數(shù)據(jù)檢索的時(shí)候負(fù)載會(huì)集中在個(gè)別的RegionServer上,造成熱點(diǎn)問(wèn)題,會(huì)降低查詢(xún)效率。
rowkey唯一原則
必須在設(shè)計(jì)上保證其唯一性,rowkey是按照字典順序排序存儲(chǔ)的,因此,設(shè)計(jì)rowkey的時(shí)候,要充分利用這個(gè)排序的特點(diǎn),將經(jīng)常讀取的數(shù)據(jù)存儲(chǔ)到一塊,將最近可能會(huì)被訪(fǎng)問(wèn)的數(shù)據(jù)放到一塊。








暫無(wú)數(shù)據(jù)