HBase - µ¥ÀÌÅÍ ¸ðµ¨ ÀÌÇØ Á¤¸®
# HBase µ¥ÀÌÅÍ ¸ðµ¨ Á¤¸®
HBase µ¥ÀÌÅÍ ¸ðµ¨ °³¿ä
* Å×À̺í(Table) : HBase´Â µ¥ÀÌÅ͸¦ Å×ÀÌºí¿¡ Á¶Á÷ÈÇÑ´Ù.
Å×À̺í À̸§Àº ½ºÆ®¸µ(String)ÀÌ´Ù. ±×¸®°í ÆÄÀÏ ½Ã½ºÅÛÀÇ °æ·Î·Î »ç¿ëÇصµ ¾ÈÀüÇÑ ¹®ÀÚ·Î ±¸¼ºµÇ¾î ÀÖ´Ù.
* ·Î¿ì(Row) : Å×ÀÌºí ³»¿¡ ÀÖ°í, µ¥ÀÌÅÍ´Â Å×À̺íÀÇ ·Î¿ì¿¡ µû¶ó ÀúÀåµÈ´Ù.
·Î¿ì´Â ·Î¿ìÅ°(rowkey)¿¡ ÀÇÇØ À¯ÀÏÇÏ°Ô ½Äº°µÈ´Ù. ·Î¿ìÅ°´Â µ¥ÀÌÅÍ Å¸ÀÔÀ» °¡Áö°í ÀÖÁö ¾Ê°í byte[]·Î Ãë±ÞµÈ´Ù.
* Ä®·³ Æйи®(Column Family) : ·Î¿ì ³»¿¡ ÀÖ´Â µ¥ÀÌÅÍ´Â Ä®·³ Æйи®¿¡ ÀÇÇØ ±×·ìȵȴÙ.
Ä®·³ Æйи®´Â ¶ÇÇÑ HBase ³»ÀÇ µ¥ÀÌÅÍ ÀúÀåÀ» À§ÇÑ ¹°¸®Àû 󸮹æ½Ä¿¡ ¿µÇâÀ» ÁØ´Ù.
ÀÌ·¯ÇÑ ÀÌÀ¯ ¶§¹®¿¡ ±×µéÀº ¸ÕÀú Á¤ÀǵǾî¾ß ÇÏ°í ½±°Ô º¯°æÇÒ ¼ö ¾ø´Ù.
Ä®·³ Æйи®¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÒ ÇÊ¿ä°¡ ¾ø´Ù°í Çصµ Å×À̺íÀÇ ¸ðµç ·Î¿ì´Â µ¿ÀÏÇÑ Ä®·³ Æйи®¸¦ °¡Áø´Ù.
Ä®·³ Æйи® À̸§Àº ½ºÆ®¸µ(String)ÀÌ°í ÆÄÀÏ ½Ã½ºÅÛÀÇ °æ·Î »ó¿¡¼ ¾ÈÀüÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â ¹®ÀÚ·Î ±¸¼ºµÇ¾î¾ß ÇÑ´Ù.
* Ä®·³ ÇÑÁ¤ÀÚ(Column Qualifier) : Ä®·³ Æйи® ³»ÀÇ µ¥ÀÌÅÍ´Â Ä®·³ ÇÑÁ¤ÀÚ ¶Ç´Â °£´ÜÈ÷ Ä®·³À» ÅëÇؼ Ç¥ÇöµÈ´Ù.
Ä®·³ ÇÑÁ¤ÀÚ´Â »çÀü¿¡ ÁöÁ¤µÉ ÇÊ¿ä°¡ ¾ø´Ù. Ä®·³ ÇÑÁ¤ÀÚ´Â ·Î¿ì »çÀÌ¿¡ ÀÏ°ü¼ºÀÌ ÀÖÀ» ÇÊ¿ä°¡ ¾ø´Ù.
·Î¿ìÅ°¿Í °°ÀÌ Ä®·³ ÇÑÁ¤ÀÚ´Â Ä®·³ ŸÀÔÀ» °¡ÁöÁö ¾Ê°í Ç×»ó byte[]·Î ´Ù·ç¾îÁø´Ù.
* ¼¿(Cell) or °ª(Value) : ·Î¿ìÅ°¿Í Ä®·³ Æйи®, Ä®·³ ÇÑÁ¤ÀÚÀÇ Á¶ÇÕÀº À¯ÀÏÇÏ°Ô ¼¿À» ½Äº°ÇÏ´Â °ªÀÌ´Ù.
¼¿¿¡ ÀúÀåµÈ µ¥ÀÌÅÍ´Â ¼¿ÀÇ °ªÀ¸·Î ÂüÁ¶µÈ´Ù.
°ªµéÀº µ¥ÀÌÅÍ Å¸ÀÔÀ» °¡ÁöÁö ¾Ê°í Ç×»ó byte[]·Î Ãë±ÞµÈ´Ù.
* ¹öÀü(Version) : ¼¿ ³»ÀÇ °ªµéÀº ¹öÀüº°·Î ÀúÀåµÈ´Ù.
¹öÀüµéÀº long ŸÀÔÀÇ Å¸ÀÓ½ºÅÆÇÁ¿¡ ÀÇÇØ ½Äº°µÇ°í ÇöÀç ŸÀÓ½ºÅÆÇÁ´Â ±âº»°ªÀ¸·Î »ç¿ëµÈ´Ù.
HBase¿¡ ÀÇÇØ À¯ÁöµÇ´Â ¼¿ °ªµéÀÇ ¹öÀüµéÀº Ä®·³ Æйи®¸¦ ÅëÇØ ¼³Á¤µÈ´Ù.
¼¿ ¹öÀüµéÀÇ ±âº» °³¼ö´Â ¼ÂÀÌ´Ù.
ÀÌµé ¿©¼¸ °³ÀÇ ±âº»ÀûÀÎ ÄÁ¼ÁÀº HBaseÀÇ ±âÃʸ¦ ÀÌ·ç°í ÀÖ´Ù.
À̵éÀº API¿¡ ÀÇÇØ Ç¥ÇöµÇ´Â ³í¸® ºä¸¦ ÅëÇؼ »ç¿ëÀÚ¿¡°Ô ³ëÃâµÈ´Ù.
À̵éÀº ±¸Çöü°¡ °ü¸®ÇÏ´Â ¹°¸®ÀûÀÎ µð½ºÅ© »óÀÇ µ¥ÀÌÅÍ À§ÀÇ ±¸Á¶ÀÌ´Ù.
ÀÌ ¿©¼¸ °¡Áö ÄÁ¼ÁÀ» È®½ÇÈ÷ ¾Ë°í ÀÖÀ¸¸é HBase¸¦ ÀÌÇØÇÏ´Â µ¥ Å©°Ô µµ¿òÀÌ µÉ °ÍÀÌ´Ù.
HBase¿¡¼ À¯ÀÏÇÑ µ¥ÀÌÅÍ °ªÀº ÄÚµð³×ÀÌÆ®¿¡ ÀÇÇØ Á¢¼ÓµÈ´Ù.
°ªÀ» À§ÇÑ ¿ÏÀüÇÑ ÄÚµð³×ÀÌÆ®´Â ·Î¿ìÅ°, Ä®·³ Æйи®, Ä®·³ ÇÑÁ¤ÀÚ, ¹öÀü ÀÌ´Ù.
# µ¥ÀÌÅÍ ÄÚµð³×ÀÌÆ®
³í¸®ÀûÀÎ µ¥ÀÌÅÍ ¸ðµ¨¿¡¼ ¹öÀü ¼ýÀÚ´Â µ¥ÀÌÅÍ Á¶°¢ÀÇ À§Ä¡¸¦ ¾Ë·ÁÁÖ´Â ÄÚµð³×ÀÌÆ®ÀÇ ÀϺκÐÀÌ´Ù.
·Î¿ì¿Í Ä®·³¿¡ ±â¹ÝÇÑ 2D ÄÚµð³×ÀÌÆ® ½Ã½ºÅÛÀÎ Å×ÀÌºí¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÏ´Â °ü°èÇü µ¥ÀÌÅͺ£À̽º¸¦ »ý°¢ÇÒ ¼ö ÀÖ´Ù.
HBase´Â 4D ÄÚµð³×ÀÌÆ® ½Ã½ºÅÛ¿¡ ±â¹ÝÇÑ Å×ÀÌºí¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÑ´Ù.
HBase¿¡ ÀÇÇØ »ç¿ëµÇ´Â ÄÚµð³×ÀÌÆ®µéÀº ¼ø¼´ë·Î ·Î¿ìÅ° > Ä®·³ Æйи® > Ä®·³ ÇÑÁ¤ÀÚ > ¹öÀü ÀÌ´Ù.
ÄÚµð³×ÀÌÆ®¸¦ ÀüºÎ ÇϳªÀÇ ´ÜÀ§·Î °í·ÁÇÑ´Ù¸é HBase¸¦ Å° ¹ë·ù ÀúÀå¼Ò·Î »ý°¢ÇÒ ¼ö ÀÖ´Ù.
³í¸® µ¥ÀÌÅÍ ¸ðµ¨ÀÇ Ãß»óȸ¦ ¿°µÎ¿¡ µÐ´Ù¸é ÄÚµð³×ÀÌÆ®¸¦ Å°·Î, ¼¿ÀÇ µ¥ÀÌÅ͸¦ °ªÀ¸·Î »ý°¢ÇÒ ¼ö ÀÖ´Ù.
# »ùÇà µ¥ÀÌÅÍ Å×½ºÆ®
# RDBMS ¿Í HBase Å×ÀÌºí ±¸Á¶
# HBase Å×ÀÌºí »ý¼º¹× Á¶È¸
> test_table Å×ÀÌºí »ý¼º
hbase(main):065:0> create 'test_table', 'fam1'
> test_table¿¡ Column family Ãß°¡
hbase(main):065:0> alter 'test_table', 'fam2'
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 1.9410 seconds
> row1 ÀÔ·Â
put 'test_table', 'row1', 'fam1:id', '101'
put 'test_table', 'row1', 'fam1:name_first', 'Adam'
put 'test_table', 'row1', 'fam1:name_last', 'Wiley'
put 'test_table', 'row1', 'fam2:department', 'Sales'
> row2 ÀÔ·Â
put 'test_table', 'row2', 'fam1:id', '102'
put 'test_table', 'row2', 'fam1:name_first', 'Brian'
put 'test_table', 'row2', 'fam1:name_last', 'Chester'
put 'test_table', 'row2', 'fam2:department', 'Service'
> row3 ÀÔ·Â
put 'test_table', 'row3', 'fam1:id', '103'
put 'test_table', 'row3', 'fam1:name_first', 'Julian'
put 'test_table', 'row3', 'fam2:department', 'Sales¡®> test_table ·Î¿ì Á¶È¸
hbase(main):113:0> scan 'test_table'
ROW COLUMN+CELL
row1 column=fam1:id, timestamp=1446797570439, value=101
row1 column=fam1:name_first, timestamp=1446797570461, value=Adam
row1 column=fam1:name_last, timestamp=1446797570480, value=Wiley
row1 column=fam2:department, timestamp=1446797570892, value=Sales
row2 column=fam1:id, timestamp=1446799156978, value=102
row2 column=fam1:name_first, timestamp=1446799156999, value=Brian
row2 column=fam1:name_last, timestamp=1446799157018, value=Chester
row2 column=fam2:department, timestamp=1446799157866, value=Service
row3 column=fam1:id, timestamp=1446799886855, value=103
row3 column=fam1:name_first, timestamp=1446799886868, value=Julian
row3 column=fam2:department, timestamp=1446799887276, value=Sales
3 row(s) in 0.0120 seconds -- ·Î¿ì ±×·ì °Ç¼ö
hbase(main):114:0> get 'test_table', 'row1'
COLUMN CELL
fam1:id timestamp=1446797570439, value=101
fam1:name_first timestamp=1446797570461, value=Adam
fam1:name_last timestamp=1446797570480, value=Wiley
fam2:department timestamp=1446797570892, value=Sales
4 row(s) in 0.0040 seconds -- Ä÷³ °Ç¼ö
hbase(main):135:0> get 'test_table', 'row3', 'fam1:name_first'
COLUMN CELL
fam1:name_first timestamp=1446799799517, value=Julian
1 row(s) in 0.0210 secondshbase(main):149:0> get 'test_table', 'row1', ['fam1:id', 'fam1:name_first', 'fam1:name_last']
COLUMN CELL
fam1:id timestamp=1446797570439, value=101
fam1:name_first timestamp=1446797570461, value=Adam
fam1:name_last timestamp=1446797570480, value=Wiley
3 row(s) in 0.0060 seconds
hbase(main):150:0> get 'test_table', 'row1', ['fam1:name_first', 'fam1:name_last']
COLUMN CELL
fam1:name_first timestamp=1446797570461, value=Adam
fam1:name_last timestamp=1446797570480, value=Wiley
2 row(s) in 0.0050 seconds
hbase(main):161:0> scan 'test_table', {"COLUMNS" => ['fam1:id', 'fam1:name_first', 'fam1:name_last']}
ROW COLUMN+CELL
row1 column=fam1:id, timestamp=1446797570439, value=101
row1 column=fam1:name_first, timestamp=1446797570461, value=Adam
row1 column=fam1:name_last, timestamp=1446797570480, value=Wiley
row2 column=fam1:id, timestamp=1446799156978, value=102
row2 column=fam1:name_first, timestamp=1446799156999, value=Brian
row2 column=fam1:name_last, timestamp=1446799157018, value=Chester
row3 column=fam1:id, timestamp=1446799886855, value=103
row3 column=fam1:name_first, timestamp=1446799886868, value=Julian
3 row(s) in 0.0090 seconds
hbase(main):162:0> get 'test_table', 'row1', {"COLUMNS" => ['fam1:id', 'fam1:name_first', 'fam1:name_last']}
COLUMN CELL
fam1:id timestamp=1446797570439, value=101
fam1:name_first timestamp=1446797570461, value=Adam
fam1:name_last timestamp=1446797570480, value=Wiley
3 row(s) in 0.0080 seconds
Âü°í µµ¼ : HBase Àξ׼Ç