±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚÍøÂç
Ö÷Òª½éÉÜÁËÒ»¸öÔËÐÐÔÚHadoop¼¯ÈºµÄÊý¾Ý¿â£¬Apache HBaseÊÇÒ»¸ö·Ö²¼Ê½µÄ¡¢ÃæÏòÁеĿªÔ´Êý¾Ý¿â£¬Ï£Íû¶ÔÄúµÄѧϰÓÐһЩ°ïÖú¡£ |
|
Apache HBaseÊÇÒ»¸öÔËÐÐÔÚHadoop¼¯ÈºµÄÊý¾Ý¿â¡£ µ«ÊÇHBaseºÍ´«Í³ÒâÒåÉϵĹØÏµÐÍÊý¾Ý¿â(RDBMS)ÓÐËù²»Í¬£¬ËüÎþÉüÁË´«Í³Êý¾Ý¿âµÄACID(Ô×ÓÐÔ,Ò»ÖÂÐÔ,¸ôÀëÐԺͳ־ÃÐÔ)ÒªÇó
, ´ïµ½³¬´óÈÝÁ¿ºÍ¸ü¿ìµÄ´¦ÀíËÙ¶È¡£ ²¢ÇÒ£¬ HBaseÉÏÃæ´æ´¢µÄÊý¾Ý²»ÐèÒªÑϸñ·ûºÏ±í½á¹¹£¬Ëü¿ÉÒÔ´æ´¢·Ç½á¹¹»¯ºÍ°ë½á¹¹»¯µÄÊý¾Ý¡£
³ÌÐòÔ±ÀûÓÃHBase¹¹½¨´óÐÍÊý¾ÝÓ¦ÓóÌÐò£¬µ«ÊÇHBaseµÄ¿ª·¢Ä£Ê½ºÍ´«Í³Êý¾Ý¿âµÄ¿ª·¢Ä£Ê½Ïà±È£¬Óкܶ಻ͬµã¡£ÔÚÕâÆª²©¿ÍÖУ¬
ÎÒ»áÏȸÅÊöHBase£¬È»ºóÌÖÂÛ¹ØÏµÐÍÊý¾Ý¿âµÄ¾ÖÏÞ£¬×îºóÉîÈë½éÉÜHBaseµÄÊý¾ÝÄ£ÐÍ¡£
¹ØÏµÐÍÊý¾Ý¿â vs HBase - Êý¾Ý´æ´¢Ä£ÐÍ
ΪʲôÎÒÃÇÐèÒªHBase/NoSQL? ÔÚÌÖÂÛ¹ØÏµÐÍÊý¾Ý¿âµÄ¾ÖÏÞÏëǰ£¬ ÏÈ¿´¿´¹ØÏµÐÍÊý¾Ý¿âµÄÓŵ㣺
¹ØÏµÐÍÊý¾Ý¿âÌṩ±ê×¼³Ö¾Ã»¯Ä£ÐÍ
SQLÒѾ³ÉΪÊý¾Ý²Ù×÷µÄÊÂʵ±ê×¼
¹ØÏµÐÍÊý¾Ý¿âÖ§³Ö²¢·¢ÊÂÎñ
¹ØÏµÐÍÊý¾Ý¿âÒѾÓÐÁ˺ܶà³ÉÊ칤¾ß

¹ØÏµÐÍÊý¾Ý¿âÒѾÊǶàÄêµÄ±ê×¼£¬ ËùÒÔΪʲôҪ¸Ä±ä£¿ Ãæ¶ÔÔ½À´Ô½¶àµÄÊý¾ÝÀ©ÈÝÐèÇó£¬×î¼òµ¥µÄ·½Ê½¾ÍÊǹºÂò¸ü¼ÓÇ¿´óµÄ·þÎñÆ÷£¬µ«ÕâÑù×ö³É±¾»á±äµÃÔ½À´Ô½¸ß¡£
²¢ÇÒµ¥»ú·þÎñÆ÷ÎÞÂÛ¶àÇ¿´ó£¬ËüÈÔÈ»Êǵ¥»ú·þÎñÆ÷£¬×ÜÓÐÈÝÁ¿ÉÏÏÞ¡£

Òë×¢: ÉÏͼ, Scale Up approach¾ÍÊÇͨ¹ý¹ºÂò¸üÇ¿´ó·þÎñÆ÷À©Èݵķ½Ê½£¬Ò²±»·ÒëΪ×ÝÏòÀ©Õ¹][ÒëÕß×¢£ºÉÏͼ£¬´¹Ö±À©Õ¹
= Ç¿´ó°º¹óµÄ·þÎñÆ÷(Vertical scale = big box)
NoSQLÄÜ´øÀ´Ê²Ã´¸Ä±ä£¿
³ýÁË×ÝÏòÀ©Õ¹(vertical scale)£¬»¹ÓÐÒ»ÖÖÀ©Õ¹·½Ê½£¬ ¾ÍÊǺáÏòÀ©Õ¹(horizontal
scale) . ºáÏòÀ©Õ¹²É¹º¶ą̀±ãÒ˵ÄPC·þÎñÆ÷×é³É´ó¼¯Èº£¬Ìṩ·þÎñ£¬ÕâÖÖ·½Ê½Ê¹ÓÃÆÕͨPC·þÎñÆ÷£¬Ïà¶Ô±ãÒË£¬Í¬Ê±´ó¼¯ÈºÒ²±Èµ¥»ú·þÎñÆ÷¿É¿¿¡£
¹ØÏµÐÍÊý¾Ý¿â»ùÓÚÐÐ(row)×÷Ϊ·ÖƬ(shard)£¬ËùÒÔһЩÐÐ(row)±»·ÖÔÚijһ¸ö·þÎñÆ÷ÉÏ£¬¶øÆäËûÐзÖÅäµ½±ðµÄ·þÎñÆ÷ÉÏ¡£
¾¡¹ÜÈç´Ë£¬ Êý¾Ý¿â·ÖƬ£¨shard£©ÈÔÈ»·Ç³£¸´ÔÓ¡£ ´«Í³Êý¾Ý¿â×î³õÉè¼ÆµÄʱºò²¢²»Ö§³Ö·ÖƬ(shard).£¬ÕâЩºóÆÚÌí¼ÓµÄ¹¦ÄÜÓë¹ØÏµÐÍÊý¾Ý¿âµÄ×î³õÉè¼Æ²¢²»Æ¥Åä¡£±ÈÈ磬·ÖƬºóµÄ¹ØÏµÐÍÊý¾Ý¿â²»Ö§³Ö·ÖƬ(shard)ÉϵIJéѯ£¬
Ò²²»Ö§³ÖÊÂÎñºÍÒ»ÖÂÐÔ¿ØÖÆ¡£¹ØÏµÐÍÊý¾Ý¿âÊÇÉè¼ÆÔÚµ¥»úÉÏÔËÐеģ¬Ëü²»ÊÇÉè¼ÆÔÚ¼¯ÈºÉÏÔËÐС£

Òë×¢£ºÉÏͼ£¬ÐÐID(id)·¶Î§ÔÚ1-1000±»·ÖÅäµ½µÚһ̨·þÎñÆ÷ÉÏ£¬ÐÐID·¶Î§´Ó1000-2000±»·ÖÅäµ½Áíһ̨·þÎñÆ÷ÉÏ£¬¶ø×îºóһ̨·þÎñÆ÷´æ´¢ID·¶Î§2000-3000µÄÊý¾Ý
¹ØÏµÐÍÄ£Ð͵ľÖÏÞÐÔ
Êý¾Ý¿â·¶Ê½(database normalization)Ïû³ýÁËÈßÓàÊý¾Ý£¬Ìá¸ßÁ˴洢ЧÂÊ¡£È»¶ø£¬·¶Ê½»áµ¼ÖÂÔÚ´¦Àí²éѯ(database
query)ÇëÇóʱ£¬²»µÃ²»×öÁª±í²éѯ(join)£¬Í¬Ê±¶ÁÈ¡¶à¸ö±íµÄÄÚÈÝ£¬ ¶øÕâЩ±í¿ÉÄÜ·ÖÅäÔÚ²»Í¬µÄ·þÎñÆ÷ÉÏ¡£ËäÈ»HBase²»Ö§³Ö¹ØÏµ(relation)ºÍÁª±í²éѯ(join),
µ«ÊÇËüÄܰÑÒª·ÃÎʵÄÊý¾Ý´æ´¢ÔÚÒ»Æð£¬´Ó¶ø±ÜÃâÁ˹ØÏµÐÍÄ£Ð͵ÄÏÞÖÆ£¬Çë²Î¿¼Ï±íÊý¾Ý´æ´¢Ä£Ð͵IJîÒì:

Òë×¢£º×óͼ¹ØÏµÐÍÊý¾Ý¿â¹¤×÷ÔÚ¼¯Èº»·¾³£¬Ò»¸öÁª±í²éѯҪͬʱ·ÃÎʶą̀·þÎñÆ÷ÉϵÄÊý¾Ý; ÓÒͼ HBase£¬±»·ÃÎʵÄÊý¾Ý×ÜÊÇÒ²´æ´¢ÔÚһ̨·þÎñÆ÷ÉÏ£¬Ã»ÓÐ×óͼÖÐµÄÆ¿¾±(bottleneck)
HBaseµÄÉè¼ÆÄ¿±ê£º¿ÉÀ©Õ¹µÄ£¬¸ßÐÔÄÜ·Ö²¼Ê½Êý¾Ý¿â
HBase°ÑÒ»Æð·ÃÎʵÄÊý¾ÝÒ²´æ´¢ÔÚÒ»Æð£¬ÊµÏÖÁ˸ßÀ©Õ¹¡£Ö÷ÒªµÄÉè¼ÆË¼ÏëÊǰ´ÕÕÖ÷¼ü(row key)·ÖƬÊý¾Ý¡£Õë¶ÔÊý¾Ý×öˮƽ·ÖƬ£¨horizontal
shard£©£¬ ¸ù¾ÝÖ÷¼üµÄ·¶Î§(row key range)·ÖƬ¡£ ²»Í¬Ö÷¼ü·¶Î§£¨row key range£©ÏµÄÊý¾Ý±»·ÖÅäµ½²»Í¬µÄ·þÎñÆ÷ÖС£Ã¿Ì¨·þÎñÆ÷µÄÊý¾ÝÊÇÈ«ÌåÊý¾ÝµÄ×Ó¼¯¡£HBaseʵ¼ÊÉÏÊÇBigTable´æ´¢ÏµÍ³µÄÒ»¸ö¿ªÔ´ÊµÏÖ£¬BigtableÊÇÓÉGoogle¿ª·¢µÄ·Ö²¼Ê½´æ´¢ÏµÍ³£¬ÓÃÀ´¹ÜÀí¿ÉÀ©Õ¹µÄ£¬´óÈÝÁ¿µÄ½á¹¹»¯Êý¾Ý¡£
HbaseÔÚÎïÀíÉÏÊǰ´ÕÕÁдأ¨column-family£©´æ´¢µÄ£¬µ«ÊÇÔÚÓû§½Ç¶È¿´£¬HBaseÒ²ÊÇÃæÏòÐеÄ(row
key)¡£ Ö»ÒªÖªµÀÖ÷¼ü(row key), HBase¾Í¿ÉÒÔ×öµ½¿ìËÙ¼ìË÷£¨ÀýÈ磬²éÕÒIDΪ1234µÄ¿Í»§£©¡£ÐеľßÌåÊý¾Ý´æ´¢ÔÚ²»Í¬µÄÁдØÖÐ(column
family) £¬È磨IDΪ1234µÄ¿Í»§µØÖ·£¬¶©µ¥µÈ£©¡£HBaseÖеÄÿһÐУ¬ÓÉÖ÷¼ü£¬1ºÅÁдØÖеÄcolumn
, 2ºÅÁдصÄcolumn×éºÏ¶ø³É¡£

HBaseÊÇÒ»¸öÃæÏòÁдصĴ洢ϵͳ
Òë×¢: HBaseÊÇÃæÏòÁдصĴ洢ϵͳ£¬ µ×²ãÊǰ´ÕÕÁдØ(column family)×÷Ϊµ¥Î»´æ´¢£¬Ã¿¸öÁдأ¨column
family£©¿ÉÒÔ¿´×÷Ò»¸öµ¥¶ÀµÄÎļþ. ¶ø´«Í³Êý¾ÝÊÇÃæÏòÐм¶µÄ´æ´¢ÏµÍ³£¬µ×²ãÊǰ´ÕÕÐÐÅÅÁд洢ÔÚÓ²ÅÌÉÏ
Òë×¢£ºÉÏͼ, CF1ºÍCF2ÊÇÒ»¸öÁдأ¨column family), ÀïÃæ¿ÉÒÔÓжà¸öcolumn.
¸ù¾ÝÖ÷¼ü(row key)²éѯµ½Ö÷¼ü(row key)¶ÔÓ¦ÔÚCF1ºÍCF2ÉϵÄÊý¾Ý£¬ÕâÑù¾Í×é³ÉÁËÉÏͼºì¿òÖеÄÒ»ÐÐ
HBase×÷Ϊ·Ö²¼Ê½Êý¾Ý¿â¡£ ¸ù¾Ý¶ÔÖ÷¼ü(row key)µÄ·Ö×é°ÑÊý¾Ý·ÖÅäµ½²»Í¬·þÎñÆ÷¡£HBaseÔÚÐм¶²Ù×÷ÊÇÔ×ӵġ£
²»Í¬µÄHbase·þÎñÆ÷´æ´¢²»Í¬µÄÊý¾Ý·ÖƬ£¬ ËùÓÐÊý¾Ý·ÖƬµÄ×ܺÍÀ´¾ÍÊÇHBase´æ´¢µÄËùÓÐÊý¾Ý¡£

Òë×¢: ÉÏͼ£¬Êý¾Ý¸ù¾ÝÖ÷¼ü(row key)·ÖÅäµ½3̨²»Í¬µÄ·þÎñÆ÷ÉÏ
HBaseµÄÊý¾ÝÄ£ÐÍ
HBase¸ù¾ÝÖ÷¼ü(row key)£¬·ÖƬ£¬´æ´¢Êý¾Ý¡£HBaseµÄÖ÷¼ü(row key)ºÍ¹ØÏµÐÍÊý¾Ý¿âµÄÖ÷¼ü(primary
key)×÷Ó÷dz£ÀàËÆ¡£ HBaseÉÏÃæµÄËùÓÐÐа´ÕÕÖ÷¼üµÄÖµÅÅÐò£¬¼´Ö÷¼üСµÄÐÐÅÅÔÚ±íµÄÇ°Ãæ¡£HBaseµÄÊý¾Ý°´ÕÕÖ÷¼ü(row
key)ÓÐÐòÅÅÁÐÊÇHBaseÇø±ðÓÚÆäËû·Ö²¼Ê½Êý¾Ý¿âµÄÖØÒªÌØÕ÷
[Òë×¢£º¶Ô±Èapache cassandra, cassandraµÄpartition keyÊÇÎÞÐòµÄ]

[Òë×¢: ÉÏͼ£¬´ÓÂß¼ÉÏ¿´£¬HBaseµÄ±íºÍ´«Í³Êý¾ÝºÜÀàËÆ£¬´Óºì¿òÖпÉÒÔ¿´³öÊý¾Ý°´ÕÕÖ÷¼üµÄ´óС˳ÐòÅÅÁÐ,smithj±ÈspataС£¬ÒòΪËäÈ»µÚÒ»¸ösÒ»Ñù£¬µ«Êǵڶþ¸ö×ÖĸmµÄasciiÂëÊÇ109,
pµÄÊÇ112£¬ËùÒÔsmithj±ÈspataС
ÏÂͼÖÐ, HBase±í°´ÕÕÖ÷¼ü(row key)µÄ·¶Î§, ·Ö³É²»Í¬µÄÇøÓò(region). È»ºó°ÑÕâÐ©ÇøÓò(region)·ÖÅ䏸²»Í¬µÄÇøÓò·þÎñÆ÷(region
server)¹ÜÀí. ÕâÖÖ·ÖÅ䷽ʽÓÉHBase×Ô¶¯¿ØÖÆ£¬×Ô¶¯µ÷½ÚÇøÓò·þÎñÆ÷(region server)ÖеĴ洢ÈÝÁ¿,
ÕâÑù¾ÍʵÏÖÁË´æ´¢Êý¾ÝµÄÎÞÏÞÀ©Õ¹¡£

ÏÂͼÏÔʾÁËÁдØ(column family)ºÍHBase±íÖ®¼äµÄ¶ÔÓ¦¹ØÏµ£¬²»Í¬µÄÁдØ(column)ÔÚÎïÀíÉϱ»´æ´¢ÔÚ²»Í¬µÄÎļþÖС£Ã¿¸öÁдØÎļþ¶¼¿ÉÒÔ±»µ¥¶À·ÃÎÊ

Òë×¢£ºÖ÷¼ü(row key)´Óaxxxµ½gxxx±»·ÖÅäµ½ÁËÒ»Ì¨ÇøÓò·þÎñÆ÷(region server)
R1ÉÏÃæ£¬ Õâ¸ötableÓÐ2¸öÁдØ:CF1ºÍCF2£¬ Ï൱ÓÚ2¸ö¶ÀÁ¢µÄÎļþ£¬¶¼´æ´¢ÔÚHDFSÉÏ
Êý¾Ý´æ´¢ÔÚHBase±í¸ñµÄcellÖС£cellÖаüº¬keyºÍvalueÒÔ¼°Ò»Ð©ÆäËûµÄÐÅÏ¢£¨Èçversion,
typeµÈ£©¡£ÆäÖÐkey²¿·Ö°üÀ¨row key£¬column family£¬column qualifier,
timestamp¡£²¢ÇÒ¶ÔÓÚÿһ¸öÖµ£¬keyºÍvalueºÍÒ»Æð´æ´¢ÔÚÁдØ(column family)Àï¡£ÈçÏÂͼËùʾ:

ÁдØÎļþÀïÃæµÄÊý¾Ý°´ÕÕCellµÄ·½Ê½´æ´¢¡£ ÿ¸öCell±»³ÆÎªÒ»¸ö¼üÖµ¶Ô(KeyValue)¡£ Key°üÀ¨µÄÏîÄ¿±È½Ï¶à£¬ÓÐÖ÷¼ü(rowkey)£¬ÁдصÄÃû³Æ(column
family), column qualifierºÍʱ¼ä´Á(timestamp)¡£ ÓÉÕâËÄÏîµÄ×é³ÉÒ»¸öKey£¬Í¨¹ýÕâ¸öKey¾Í¿ÉÒÔÔÚÁдØÎļþÖвéѯµ½Value.
´ÓÂß¼ÉÏ¿´£¬CellºÃÏñ´æ´¢ÔÚ±íÖеÄÒ»ÐС£µ«ÊÇÔÚʵ¼ÊÎïÀí´æ´¢ÖУ¬HBaseµÄÒ»ÐÐÓÉÓжà¸öÁдأ¨column
family)µÄ¶ÔÓ¦CellÆ´½Ó¶ø³É¡£
ÏÂͼËùʾ£¬ ÔÚÉÏÃæµÄ±íÏÔʾÁËÒ»¸öHbase±í½á¹¹£¬ ´ÓÂß¼ÉÏ¿´ºÍ¹ØÏµÐÍÊý¾Ý¿âÀàËÆ£¬Ò²Êǰ´ÐÐ×éÖ¯¡£µ«ÔÚÎïÀí´æ´¢ÖУ¬Õû¸ö±íÊÇÓÉ2¸öÁдØÎļþ×é³É¡£Èç¹ûÒªÐÞ¸ÄijÐÐÖеÄÒ»Ïʵ¼ÊÉÏÊÇÒ»¸öCell£©,
ÐèÒªÖ¸¶¨Ö÷¼ü(rowkey)£¬ÁдصÄÃû³Æ(column family), column qualifierºÍʱ¼ä´Á(timestamp)ÐγÉÒ»¸öKey£¬
È»ºóÔÚʵ¼ÊµÄÁдØÎļþÖÐÉèÖÃValue¡£

Âß¼Êý¾ÝÄ£ÐÍ vs ÎïÀí´æ´¢Ä£ÐÍ
ÈçǰËùÊö£¬ ¶¨Î»Ò»¸öCell, Ö»ÐèÒª5ÏîÊý¾ÝÆ´³ÉKey: <±íÃû³Æ, Ö÷¼üÃû³Æ, ÁдØÃû³Æ,
ÁÐÃû³Æ, ʱ¼ä´Á> . HBaseµÄ±íÊÇÒ»¸öÏ¡Êè±í¡£ Èç¹ûÒ»Ïî(column)ûÓÐÊý¾Ý£¬Ëü¾Í²»»á±»´æ´¢.
´ËÍâ, CellÊÇÓа汾ÐÅÏ¢µÄ£¬Èç¹ûÖ»ÓÃ4ÏîÊý¾Ý×öKey, <±íÃû³Æ, Ö÷¼üÃû³Æ, ÁдØÃû³Æ,
ÁÐÃû³Æ>¿ÉÒÔ²éѯµ½Ò»¸öCellµÄ¶à¸ö°æ±¾.

HBaseĬÈÏÖ§³Ö¶à°æ±¾£¬
Put²Ù×÷¼ÈÊÇÒ»¸ö²åÈë²Ù×÷Ò²¿ÉÒÔÊÇÒ»¸öÐ޸IJÙ×÷£¬Ã¿¸öCell¶¼ÓÐ×Ô¼ºµÄ°æ±¾¡£É¾³ý²Ù×÷²»»áÕæµÄ×öɾ³ý£¬Ö»ÊÇдÈëÒ»¸öɾ³ýµÄ±êÖ¾¡£
Èκβéѯ¶¼²»»á·µ»ØÓÐÓÐɾ³ý±ê¼ÇµÄCell.
Get²Ù×÷¿ÉÒÔÈÎÒâÖ¸¶¨µÄ°æ±¾µÄÊý¾Ý¡£Èç¹ûÇëÇóûÓÐÖ¸¶¨°æ±¾ºÅ£¬»á·µ»Ø×îеİ汾¡£HBaseÔÊÐíÓû§ÅäÖÃ×î¶àÔÊÐí¶àÉٰ汾ͬʱ´æÔÚ£¬HBaseĬÈÏΪͬһ¸öCell×î¶à´æ´¢3¸ö°æ±¾¡£µ±³¬¹ý3¸ö°æ±¾ºó£¬×îÀϰ汾µÄCell»á±»×îÖÕÇåÀí¡£

|