๋“ค์–ด๊ฐ€๋ฉฐ

  • Hbase๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Key ์„ค๊ณ„๊ฐ€ ๋ฌด์—‡๋ณด๋‹ค ์ค‘์š”ํ•˜๋‹ค.
  • Hbase๋Š” ์–ด๋–ป๊ฒŒ ์ €์žฅ์ด ๋˜๊ณ  ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•˜๋Š”๊ฒŒ ์ข‹์€์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•œ๋‹ค.

Hbase Key Design์— ๋Œ€ํ•ด

Hbase๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ €์žฅํ• ๊นŒ?

  • ์™ผ์ชฝ ์ƒ๋‹จ์˜ ๊ทธ๋ฆผ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ทธ๋ฆผ์ด๋‹ค.
    • Row์™€ Column[Family:Qualifier]๋กœ ๊ตฌ์„ฑ๋œ ๋ชจ์Šต์ด๋‹ค.
  • ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ&ํ•˜๋‹จ ๊ทธ๋ฆผ์€ ๋…ผ๋ฆฌ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ณผ์ •์„ ํ‘œํ˜„ํ•œ ๊ทธ๋ฆผ์ด๋‹ค.
    • Column-Famliy๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ƒ‰๊น”์˜ ์ง„ํ•จ์€ Version์„ ์˜๋ฏธํ•˜๊ณ  ํƒ€์ž„์Šคํƒฌํ”„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ €์žฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Null๊ฐ’์„ ์ €์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— RowKey, Column ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.

์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด์„œ๋Š”?

  • ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐˆ์ˆ˜๋ก Scan ๋ฒ”์œ„๊ฐ€ ์ปค์ง€๋Š” ์ ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
    • Performance๊ฐ€ ์•ˆ์ข‹์•„์ง„๋‹ค.
  • ํŠน์ • RowKey๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ Column-Famliy๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ž‘์€ Scan ๋ฒ”์œ„๋กœ ๋น ๋ฅธ ์†๋„๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
  • Column-Qualifier ๋‹จ์œ„์˜ ์กฐ๊ฑด์€ ์„ฑ๋Šฅ์ƒ ์ด์ ์€ ํฌ๊ฒŒ ์—†๋‹ค.

๊ทธ๋Ÿผ ์–ด๋–ค ํ˜•ํƒœ๋กœ ์„ค๊ณ„ํ•˜์—ฌ ์ €์žฅํ•ด์•ผํ• ๊นŒ?

  • ๋‘ ์ข…๋ฅ˜์˜ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค.
    • ์™ผ์ชฝ : userID : colfam : messageID : timestamp : emali-message
    • ์˜ค๋ฅธ์ชฝ : userID-messageID : colfam : : timestamp : emali-message
    • ๋‘ ํ…Œ์ด๋ธ”์˜ ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์–‘์—๋Š” ์•„๋ฌด๋Ÿฐ ์ฐจ์ด๊ฐ€ ์—†์ง€๋งŒ..
      • Hbase ํŠน์„ฑ์ƒ RowKey ๊ธฐ์ค€์œผ๋กœ ๋ถ„ํ• ํ•˜๋Š” ํŠน์„ฑ๋•Œ๋ฌธ์— ์˜ค๋ฅธ์ชฝ ํ˜•ํƒœ์˜ ์„ค๊ณ„๋ฅผ ๊ถŒ์žฅํ•œ๋‹ค.
      • ์™ผ์ชฝ ์„ค๊ณ„๋ผ๋ฉด Heavy User์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•  ์ˆ˜ ์—†๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ํ•ญ์ƒ ๋ณตํ•ฉ RowKey๊ฐ€ ์ •๋‹ต์ผ๊นŒ?

  • ๋ณตํ•ฉ RowKey๋กœ ํ…Œ์ด๋ธ”์„ ๊ตฌ์„ฑํ•˜๋ฉด User๋กœ ์ง„ํ–‰ํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•ด ์›์ž์„ฑ์„ ์žƒ๊ฒŒ ๋œ๋‹ค.
    • ๋‹จ์ผ Rowkey๋Š” UserID๋กœ ๋ชจ๋“  Message๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ
    • ๋ณตํ•ฉ Rowkey์ธ ๊ฒฝ์šฐ UserID๋งŒ ๊ฐ€์ง€๊ณ ๋Š” ๋ชจ๋“  Message๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

Hbase์˜ Rowkey ๋””์ž์ธ ๊ฐ€์ด๋“œ

  • ์ž˜๋ชป๋œ RowKey๋Š” Hotspotting์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฃผ์˜ํ•˜์ž.
    • ํ•˜๋‚˜์˜ Region Server์— ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์ด ์ง‘์ค‘๋  ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋ฅผ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Salting / Hashing / Reversing Key์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํŠธ๋ž˜ํ”ฝ์€ ๋ถ„์‚ฐ๋˜์—ˆ์ง€๋งŒ.. Read ์„ฑ๋Šฅ์€ ๋–จ์–ด์ง€๋Š” ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ์ˆœ์ฐจ์ ์ธ Row Key / TimeseriesData ์„ค๊ณ„๋Š” ์ตœ๋Œ€ํ•œ ํ”ผํ•˜์ž.
    • ์ˆœ์ฐจ์ ์œผ๋กœ ์ •๋ ฌ๋œ RowKey ์ƒํ™ฉ์—์„œ ํŠน์ • Range๋งŒ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›๋Š” ๊ฒฝ์šฐ
    • Rowkey๊ธฐ๋ฐ˜์œผ๋กœ Region์„ ๋ถ„์‚ฐํ•ด๋„ ํŠธ๋ž˜ํ”ฝ์ด ์ œ๋Œ€๋กœ ๋ถ„์‚ฐ์ด ์•ˆ๋  ์ˆ˜ ์žˆ๋‹ค.
    • monotonically increasing values are bad
  • Row์™€ Column ์ด๋ฆ„์„ ์ž‘๊ฒŒ ๋งŒ๋“ค์ž.
    • Column Families : ์ตœ๋Œ€ํ•œ ์งง์€ ์ด๋ฆ„์œผ๋กœ ์„ค๊ณ„ (์˜ˆ: data๋Š” d)
    • Attributes๋กœ ์ฝ๊ธฐ ์‰ฌ์šด ๋„ค์ด๋ฐ๋ณด๋‹จ ์งง์€ ์ด๋ฆ„์œผ๋กœ ์„ค๊ณ„
    • Rowkey Length๋„ ์ตœ๋Œ€ํ•œ ์งง๊ฒŒ
    • long์„ byte๋กœ ์ €์žฅํ•˜๋ฉด 8byte ์ด๋ฅผ String์œผ๋กœ ์ €์žฅํ•˜์—ฌ byte๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ๊ฑฐ์˜ 3xbytes์— ์ €์žฅ๋œ๋‹ค.
      • ์ฝ๊ธฐ๋Š” ์–ด๋ ต์ง€๋งŒ / ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
    • ์™œ ์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ์„ค๊ณ„ํ•˜๋ผ๊ณ  ํ• ๊นŒ?

Reference