ĿǰÆóÒµÈí¼þ¿ª·¢Õ¼¾ÝÖ÷Á÷µÄ¿ª·¢Ä£Ê½ÎªÃæÏò¶ÔÏóģʽ¡£ÎÞÂÛÊǽ¨Á¢ÔÚ¼¯ºÏÂÛÖ®ÉϵĴ«Í³¹ØÏµÐÍÊý¾Ý¿â£¬»¹ÊÇÒÔCAP¶¨Àí/Hadoop/BigTableΪ»ùʯµÄHBase£¬¶¼ÃæÁÙÒÔϵĻù±¾ÎÊÌ⣺
1.ÈçºÎ±£´æ¶ÔÏóµ½Êý¾Ý´æ´¢£¿
2.ÈçºÎ´ÓÊý¾Ý´æ´¢»ñÈ¡¶ÔÏó£¿
3.ÈçºÎ¸üÐÂÊý¾Ý´æ´¢ÖеÄÏÖÓÐÊý¾Ý£¿Êý¾Ý´æ´¢µÄÀàÐÍϵͳºÍ¿ª·¢ÓïÑÔ£¨Java£©µÄÀàÐÍϵͳ֮¼äÈçºÎÏ໥ת»»£¿
¼ò¶øÑÔÖ®£¬Êý¾Ý´æ´¢ÈçºÎÌṩÔö¡¢É¾¡¢¸Ä¡¢²éµÄ·þÎñÄÜÁ¦£¬Ó¦ÓÃÈçºÎ·½±ãµÄʹÓøÃÄÜÁ¦¡£¹ØÏµÐÍÊý¾Ý¿â¸ø³öµÄ´ð°¸ÎªSQL£¬JDBCºÍ¸÷ÖÖORM¿ò¼Ü£¨µäÐÍÀý×ÓΪHibernateºÍMyBatis£©¡£

HBase ORM
ORM¼´Object-Relational mapping£¬¶ÔÓÚHBase¶øÑÔ²»´æÔÚRelational£¬Òò´Ë¸ÃÃû³Æ²»×¼È·£¬Ö»ÊÇORM×öΪһ¸öÊõÓïʹÓÃÌ«¹ý¹ã·º£¬ÕâÀï·ºÖ¸Êý¾Ý´æ´¢ºÍObjectÖ®¼äµÄÓ³Éä¡£
HBaseµÄÉè¼ÆºÍRDBMS²îÒì½Ï´ó£¬Òò´Ë³ýÁËÉÏһС½ÚµÄÎÊÌâÍ⣬»¹ÐèÒª½â¾öÈçÏÂÎÊÌ⣺
1.ÈçºÎÓ³ÉäHTableµÄRowKey£¿
2.ÈçºÎÓ³ÉäHTableµÄbytesµ½JavaÀàÐÍ£¿
3.ÈçºÎÓ³ÉäHTableµÄ¶à°æ±¾ÄÜÁ¦£¿
±¾ÎÄ×ÅÖØ½éÉÜHBase ORM SimpleHBase¿ò¼Ü£¬²¢ºÍÁíÒ»¸öHBase ORM Phoenix£¨http://phoenix.incubator.apache.org/£©×ö±È½Ï¡£
SimpleHBase¼ò½é
SimpleHBase£¨https://github.com/zhang-xzhi/simplehbase£©ÊÇJavaºÍHBaseÖ®¼äµÄÇáÁ¿¼¶Öмä¼þ£¬Ö÷Òª°üº¬ÒÔϹ¦ÄÜ£º
1.Êý¾ÝÀàÐÍÓ³É䣺JavaÀàÐͺÍHBaseµÄbytesÖ®¼äµÄÊý¾Ýת»»¡£
2.¼òµ¥²Ù×÷·â×°£º·â×°ÁËHBaseµÄput,get,scanµÈ²Ù×÷Ϊ¼òµ¥µÄJava²Ù×÷·½Ê½¡£
3.HBase query·â×°£º·â×°ÁËHBaseµÄfilter£¬¿ÉÒÔʹÓÃSQL-likeµÄ·½Ê½²Ù×÷HBase¡£
4.¶¯Ì¬query·â×°£ºÀàËÆÓÚmybatis£¬¿ÉÒÔʹÓÃxmlÅäÖö¯Ì¬Óï¾ä²éѯhbase¡£
5.insert,updateÖ§³Ö: ½¨Á¢ÔÚHBaseµÄcheckAndPutÖ®ÉÏ¡£
6.HBase¶à°æ±¾Ö§³Ö£ºÌṩ½Ó¿Ú¿ÉÒÔ¶ÔHBase¶à°æ±¾Êý¾Ý½øÐвéѯ,Ó³Éä¡£
7.HBaseÔÉú½Ó¿ÚÖ§³Ö¡£
8.HTablePool¹ÜÀí¡£
Éè¼ÆÀíÄî
PhoenixµÄÉè¼ÆÀíÄîΪ:We put the SQL back into
NoSql¡£
¸ÃÀíÄîµÄÓŵãÈçÏ£º
1.SQL×öΪ´óÖÚÊìϤµÄAPI£¬Óû§Ñ§Ï°³É±¾½ÏµÍ¡£
2.¼õÉÙ³ÌÐòÔ±µÄ´úÂ뿪·¢Á¿¡£
3.ÐÔÄÜÓÅ»¯¶ÔÓû§Í¸Ã÷¡£
4.¼æÈݼÈÓеĻùÓÚSQLµÄ¹¤¾ß¡£
¸ÃÀíÄîµÄȱµãÈçÏ£º
1.SQLÆÁ±ÎÁËHBaseºÍRDBMSÉè¼ÆÉϵIJî±ð£¬³éÏóй¶µÄ·çÏսϸߡ£¹ØÓÚ³éÏóй¶²Î¿¼http://www.joelonsoftware.com/articles/LeakyAbstractions.html¡£
2.ΪÁËSQL¼æÈÝ£¬ÒýÈëÁËJDBC²ã¡£ÓÉÓÚRDBMºÍHBaseµÄÉè¼ÆÓëÄ£Ðͱ¾Éí²îÒì½Ï´ó£¬ÒýÈëJDBCºó£¬µ¼Ö²¿·ÖHBaseµÄÌØÐÔÄÑÒÔÓѺõÄÖ§³Ö¡£
3.´ó²¿·ÖµÄÓ¦Óò»»áÖ±½ÓʹÓÃJDBC£¬¶øÊÇʹÓÃORM£¬¼¼ÊõÕ»½ÏÉµ¼Ö³éÏóй¶ÎÊÌâ¸ü¼ÓÑÏÖØ¡£
SimpleHBaseµÄÉè¼ÆÀíÄîΪ£ºÌù½üHBaseµÄORMÉè¼Æ£¬¼ò»¯HBaseÖ®ÉϵÄJava
app¿ª·¢¡£
¸ÃÀíÄîµÄÓŵãÈçÏ£º
1.Éè¼Æ½ôÌùHBaseµÄÂ߼ģÐÍ£¬ÌṩһվʽHBase ORM½â¾ö·½°¸¡£
2.¼õÉÙ³ÌÐòÔ±µÄ´úÂ뿪·¢Á¿¡£
3.Óû§ÓѺõÄHBaseÌØÕ÷Ö§³Ö¡£
¸ÃÀíÄîµÄȱµãÈçÏ£º
1. ²»¼æÈÝSQL£¬ÓÐÒ»¶¨µÄѧϰ³É±¾¡£
SimpleHBaseºÍPhoenixµÄ¼¼ÊõÕ»ÈçÏÂËùʾ¡£

ÀàÐÍת»»
PhoenixÖ§³ÖÈçÏÂÀàÐÍ£¬Ä¿Ç°²»Ö§³Ö×Ô¶¨ÒåÀàÐÍ¡£Ã¿ÖÖÀàÐ͵ÄÐòÁл¯(ת»¯Îªbytes±£´æµ½HBaseÖÐ)ºÍ·´ÐòÁл¯Îª¹Ì¶¨µÄ·½Ê½¡£

SimpleHBaseÖ§³ÖÈçÏÂÀàÐÍ¡£Ã¿ÖÖÀàÐ͵ÄÐòÁл¯ºÍ·´ÐòÁл¯·½Ê½£¬¿ÉÒÔʹÓÃSimpleHBasÌṩµÄĬÈÏ·½Ê½£¬Ò²¿ÉÒÔÓû§×Ô¶¨Òå¡£

SimpleHBaseµÄrowkeyºÍÀàÐÍÓ³ÉäÈçÏ£º

RowKeyÖ§³Ö
Phoenix°ÑrowkeyÄÚ»¯ÎªtableµÄPRIMARY KEY´¦Àí¡£
Èç
CREATE TABLE IF NOT EXISTS us_population ( state CHAR(2) NOT NULL, city VARCHAR NOT NULL,
population BIGINT CONSTRAINT my_pk PRIMARY KEY (state, city));
|
ͬʱ£¬PhoenixµÄSalted Tables¼¼Êõ¿ÉÒÔ½â¾öregion serverµÄÈȵãÎÊÌâ¡£
SimpleHBaseÈÏΪrowkeyµÄÉè¼ÆÊÇHBaseÓ¦ÓÃÉè¼ÆÖÐ×îÖØÒªµÄÒ»»·¡£Òò´Ë£¬¶ÔÓÚRowKeyµ¥¶À½¨Ä££¬¸øÓû§Ìṩ½Ï¸ßµÄÁé»îÐÔ¡£Êµ¼ÊÉÏ£¬¶ÔÓÚHBase¶øÑÔ£¬ÈκοÉÒÔת»»ÎªbytesµÄ¶ÔÏ󶼿ÉÒÔ×öΪrowkeyʹÓá£
¼òµ¥³¡¾°Ö§³Ö
¶ÔÓÚ¼òµ¥µÄput,scan,delete³¡¾°¡£
PhoenixÌṩµÄ·½°¸Îª£º
Java app -> ORM(¿ÉÑ¡) -> SQL -> phoenix ->
HBase
SimpleHBaseÌṩµÄ·½°¸Îª£º
Java app -> SimpleHBase-> HBase
ÎÞÐèSQLÕâÒ»²ã£¬Ö±½ÓÓÃÀàËÆÈçÏ´úÂë¼´¿ÉʵÏÖ¡£
simpleHbaseClient.putObject(new PersonRowKey(1), person);
Person result = simpleHbaseClient.findObject(new PersonRowKey(1),
Person.class);
|
¼òµ¥SQLÖ§³Ö
Phoenix×öΪHBaseÉÏÃæµÄSQL·â×°£¬Õâ¿éµÄ¹¦ÄܱȽϷḻ¡£SimpleHBaseÌṩSQL-Like·½Ê½µÄ²éѯ¡£Ö§³Ö³£¼ûµÄ¼òµ¥²éѯ³¡¾°¡£Ä¿Ç°£¬SimpleHBaseÌṩµÄÔËËã·ûÈçÏ£º

¸´ÔÓSQLÖ§³Ö
¶ÔÓÚgroup by, joinµÈ½ÏΪ¸´ÔÓµÄSQLÓï·¨£¬PhoenixÖ§³Ö£¬SimpleHBaseĿǰ²»Ö§³Ö¡£
¶¯Ì¬SQLÖ§³Ö
¶¯Ì¬²éѯ¿ÉÒÔ±ÜÃâÓ¦ÓôúÂëÖдóÁ¿if-elseÖ®ÀàµÄÅжϣ¬Æ´½Ó²éѯÌõ¼þ£¬Ìá¸ß´úÂëÖÊÁ¿¡£
PhoenixµÄ·½°¸£º
ÒýÈëÆäËûORM¿ò¼Ü(Èçhibernate»òmybatis)¡£
SimplehbaseµÄ·½°¸£º
ÀàËÆmybatis£¬Ìṩ¶¯Ì¬²éѯÄÜÁ¦¡£
ĿǰsimplehbaseÌṩµÄ¶¯Ì¬²éѯ±êÇ©ÈçÏ£º

HBaseʱ¼ä´ÁºÍ¶à°æ±¾Ö§³Ö
Phoenix·½°¸£º
ʱ¼ä´Á£¬ÓÉHBase¹ÜÀí£¬»òÔÚconnection½¨Á¢Ê±Ö¸¶¨Ò»¸öʱ¼ä´Á£¬¸ÃconnectionÉÏËùÓвÙ×÷¾ÍÊÇ»ùÓÚ¸Ãʱ¼ä´Á¡£
²»Ö§³Ö¶à°æ±¾£¬Ö»ÄÜÖ§³Ö×îÐÂÖµ¡£
Simplehbase·½°¸£º
ʱ¼ä´Á¿ÉÒÔÓÉHBase¹ÜÀí£¬»òÕßÓÉÓ¦ÓÃ×ÔÐÐÖ¸¶¨¡£°æ±¾Êý£¬¿ÉÒÔÑ¡Ôñ×îа汾£¬»òÕß¶à°æ±¾Ö§³Ö£¬ÓÉÓ¦ÓÃÖ¸¶¨¡£

¼ÙÉènameºÍageÓ³ÉäΪһ¸öPersonÀàÐͶÔÏó¡£SimpleHBaseÖ§³ÖÈçÏÂÓ³É䷽ʽ£º
1.Ò»¸örowkey¶ÔÓ¦µÄËùÓÐ×îÐÂÖµÓ³ÉäΪһ¸öobject¡£
Àý£º¸ÃÊý¾Ý±»Ó³ÉäΪPerson(name=d,age=3)¡£
2.Ò»¸örowkey¶ÔÓ¦µÄʱ¼ä´Á·¶Î§ÄÚ(ÓÉÓû§Ö¸¶¨)µÄ×îÐÂÖµÓ³ÉäΪһ¸öobject
(PhoenixÖ»Ìṩһ¸öʱ¼ä´Á£¬¶ø²»ÊÇʱ¼ä´Á·¶Î§) ¡£
Àý£ºÖ¸¶¨Ê±¼ä´Á·¶Î§(×ó±ÕÓÒ¿ª)Ϊ [t1,t3)£¬¸ÃÊý¾Ý±»Ó³ÉäΪPerson(name=a,age=2)¡£
3.Ò»¸örowkey¶ÔÓ¦µÄËùÓÐÖµ£¬ÒÔʱ¼ä´ÁΪά¶È£¬Ó³Éä³ÉÒ»¸öobject
list¡£
Àý£ºÖ¸¶¨maxVersion(¿ØÖÆ×î´ó°æ±¾Êý)Ϊ4,¸ÃÊý¾Ý±»Ó³ÉäΪһ¸öpersonµÄÁÐ±í£¬°´ÕÕʱ¼ä´ÁÅÅÐò¡£
Person(name=d) Person(name=c,age=3) Person(age=2) Person(name=a,age=1) |
4.Ò»¸örowkey¶ÔÓ¦µÄʱ¼ä´Á·¶Î§ÄÚµÄËùÓÐÖµ£¬ÒÔʱ¼ä´ÁΪά¶È£¬Ó³Éä³ÉÒ»¸öobject
list¡£
Àý£ºÖ¸¶¨Ê±¼ä´Á·¶Î§Îª [t1,t3)£¬maxVersionΪ4,¸ÃÊý¾Ý±»Ó³ÉäΪһ¸öpersonµÄÁÐ±í£¬°´ÕÕʱ¼ä´ÁÅÅÐò¡£
Person(age=2) Person(name=a,age=1) |
ÆäËû
SimpleHBaseÖаüº¬ÁËһЩHBaseÌØÐԵķâ×°»òÔöÇ¿¡£
È磺
SimpleHBaseÖ§³ÖÅúÁ¿put²Ù×÷£¬ÒÔÌáÉýÐÔÄÜ¡£
HTableµÄautoflushÉèÖÃΪfalse£¬Í¬Ê±£¬ÓÐÒ»¸öÏ̶߳¨ÆÚ×öflush¡£¼È¿ÉÒÔÌá¸ßÓ¦ÓõÄÍÌÍÂÄÜÁ¦£¬Ò²¿ÉÒÔÓÐÒ»¶¨µÄflush±£Ö¤¡£
С½á
Ŀǰ£¬SimpleHBaseÒѾÔÚ°¢ÀïµÄ¶à¸öÏîÄ¿Öеõ½Ó¦ÓᣴÓÉè¼ÆÀíÄî¿´£¬SimpleHBase²¢²»ÊÇPhoenixµÄÒ»¸öÖØ¸´ÂÖ×Ó£¬¶øÊÇÓÐ×Å×Ô¼ºÇåÎúµÄÄ¿±ê¡£¼´Ìù½üHBaseµÄORMÉè¼Æ£¬¼ò»¯HBaseÖ®ÉϵÄJava
app¿ª·¢¡£Í¬Ê±£¬ÓÖ¿ÉÒÔ°ÑHBaseµÄһЩºËÐĸÅÄ¶¸øÓû§£¬·½±ãÓû§¶ÔHBaseÌØÐÔµÄʹÓᣠ|