±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚÍøÒ×ÔÆ£¬½éÉÜÁËHBaseµÄÁ½ÖÖ»ùÓÚËøÊµÏÖµÄͬ²½»úÖÆ£¬ÐÐËøµÄʵÏÖÒÔ¼°¸÷ÖÖ¶ÁÐ´ËøµÄÓ¦Óó¡¾°¡£
|
|
×÷Ϊһ¿îÓÅÐãµÄ·ÇÄÚ´æÊý¾Ý¿â£¬HBaseºÍ´«Í³Êý¾Ý¿âÒ»ÑùÌṩÁËÊÂÎñµÄ¸ÅÄֻÊÇHBaseµÄÊÂÎñÊÇÐм¶ÊÂÎñ£¬¿ÉÒÔ±£Ö¤Ðм¶Êý¾ÝµÄÔ×ÓÐÔ¡¢Ò»ÖÂÐÔ¡¢¸ôÀëÐÔÒÔ¼°³Ö¾ÃÐÔ£¬¼´Í¨³£Ëù˵µÄACIDÌØÐÔ¡£ÎªÁËʵÏÖÊÂÎñÌØÐÔ£¬HBase²ÉÓÃÁ˸÷ÖÖ²¢·¢¿ØÖƲßÂÔ£¬°üÀ¨¸÷ÖÖËø»úÖÆ¡¢MVCC»úÖÆµÈ¡£±¾ÎÄÊ×ÏȽéÉÜHBase
µÄÁ½ÖÖ»ùÓÚËøÊµÏÖµÄͬ²½»úÖÆ£¬ÔÙ·Ö±ðÏêϸ½éÉÜÐÐËøµÄʵÏÖÒÔ¼°¸÷ÖÖ¶ÁÐ´ËøµÄÓ¦Óó¡¾°£¬×îºóÖØµã½éÉÜMVCC»úÖÆµÄʵÏÖ²ßÂÔ¡£
HBaseͬ²½»úÖÆ
HBaseÌṩÁËÁ½ÖÖͬ²½»úÖÆ£¬Ò»ÖÖÊÇ»ùÓÚCountDownLatchʵÏֵĻ¥³âËø£¬³£¼ûµÄʹÓó¡¾°ÊÇÐÐÊý¾Ý¸üÐÂʱËù³ÖµÄÐÐËø¡£ÁíÒ»ÖÖÊÇ»ùÓÚReentrant
ReadWriteLock ʵÏֵĶÁÐ´Ëø£¬¸ÃËø¿ÉÒÔ¸øÁÙ½ç×ÊÔ´¼ÓÉÏread-lock »òÕßwrite-lock¡£ÆäÖÐread-lockÔÊÐí²¢·¢µÄ¶ÁÈ¡²Ù×÷£¬¶øwrite-lockÊÇÍêÈ«µÄ»¥³â²Ù×÷¡£
CountDownLatch
JavaÖУ¬CountDownLatchÊÇÒ»¸öͬ²½¸¨ÖúÀ࣬ÔÚÍê³ÉÒ»×éÆäËûÏß³ÌÖ´ÐеIJÙ×÷֮ǰ£¬ËüÔÊÐíÒ»¸ö»ò¶à¸öÏß³Ì×èÈûµÈ´ý¡£CountDownLatchʹÓøø¶¨µÄ¼ÆÊý³õʼ»¯£¬ºËÐĵÄÁ½¸ö·½·¨ÊÇcountDown()ºÍawait
() £¬Ç°Õß¿ÉÒÔʵÏÖ¸ø¶¨¼ÆÊýµ¹ÊýÒ»´Î£¬ºóÕßÊǵȴý¼ÆÊýµ¹Êýµ½0£¬Èç¹ûûÓе½´ï0£¬¾ÍÒ»Ö±×èÈûµÈ´ý¡£ ½áºÏḬ̈߳²È«µÄmapÈÝÆ÷£¬»ùÓÚtest-and-set»úÖÆ£¬CountDownLatch¿ÉÒÔʵÏÖ»ù±¾µÄ»¥³âËø£¬ÔÀíÈçÏ£º
1. ³õʼ»¯£ºCountDownLatch³õʼ»¯¼ÆÊýΪ1
2. test¹ý³Ì£ºÏß³ÌÊ×ÏȽ«ÁÙ½ç×ÊÔ´×÷Ϊkey£¬latch×÷Ϊvalue³¢ÊÔ²åÈëḬ̈߳²È«µÄmapÖС£Èç¹û·µ»ØÊ§°Ü£¬±íʾÆäËûÏß³ÌÒѾ³ÖÓÐÁ˸ÃËø£¬µ÷ÓÃawait·½·¨×èÈûµ½¸ÃlatchÉÏ£¬µÈ´ýÆäËûÏß³ÌÊÍ·ÅËø£»
3. set¹ý³Ì£ºÈç¹û·µ»Ø³É¹¦£¬¾Í±íʾÒѾ³ÖÓиÃËø£¬ÆäËûÏ̱߳ØÈ»²åÈëʧ°Ü¡£³ÖÓиÃËøÖ®ºóÖ´Ðи÷ÖÖ²Ù×÷£¬Ö´ÐÐÍê³ÉÖ®ºóÊÍ·ÅËø£¬ÊÍ·ÅËøÊ×ÏȽ«mapÖжÔÓ¦µÄKeyValueÒÆ³ý£¬ÔÙµ÷ÓÃlatchµÄcountDown·½·¨£¬¸Ã·½·¨»á½«¼ÆÊý¼õ1£¬±äΪ0Ö®ºó¾Í»á»½ÐÑÆäËû×èÈûÏ̡߳£
ReentrantReadWriteLock
¶ÁÐ´Ëø·ÖΪ¶ÁËø¡¢Ð´Ëø£¬ºÍ»¥³âËøÏà±È¿ÉÒÔÌṩ¸ü¸ßµÄ²¢ÐÐÐÔ¡£¶ÁËøÔÊÐí¶à¸öÏß³ÌͬʱÒÔ¶ÁģʽռÓÐËø×ÊÔ´£¬¶øÐ´ËøÖ»ÄÜÓÉÒ»¸öÏß³ÌÒÔдģʽռÓС£Èç¹û¶ÁÐ´ËøÊÇд¼ÓËø×´Ì¬£¬ÔÚËøÊÍ·Å֮ǰ£¬ËùÓÐÊÔͼ¶Ô¸ÃËøÕ¼ÓеÄÏ̶߳¼»á±»×èÈû£»Èç¹ûÊǶÁ¼ÓËø×´Ì¬£¬ËùÓÐÆäËû¶Ô¸ÃËøµÄ¶ÁÇëÇ󶼻ᲢÐÐÖ´ÐУ¬µ«ÊÇдÇëÇó»á±»×èÈû¡£ÏÔ¶øÒ×¼û£¬¶ÁÐ´ËøÊʺÏÓÚ¶Á¶àдÉٵij¡¾°£¬Ò²ÒòΪ¶ÁËø¿ÉÒÔ¹²Ïí£¬Ð´ËøÖ»ÄÜij¸öÏ̶߳ÀÕ¼£¬¶ÁÐ´ËøÒ²±»³ÆÎª¹²Ïí£¶ÀÕ¼Ëø£¬¼´¾³£¼ûµ½µÄSËøºÍXËø¡£
JavaÖУ¬ReentrantReadWriteLockÊǶÁÐ´ËøµÄʵÏÖÀ࣬¸ÃÀàÖÐÓÐÁ½¸ö·½·¨readLock()ºÍwriteLock()·Ö±ðÓÃÀ´»ñÈ¡¶ÁËøºÍÐ´Ëø¡£
HBaseÖÐÐÐËøµÄ¾ßÌåʵÏÖ

HBase²ÉÓÃÐÐËøÊµÏÖ¸üеÄÔ×ÓÐÔ£¬ÒªÃ´È«²¿¸üгɹ¦£¬ÒªÃ´Ê§°Ü¡£ËùÓжÔHBaseÐм¶Êý¾ÝµÄ¸üвÙ×÷£¬¶¼ÐèÒªÊ×ÏÈ»ñÈ¡¸ÃÐеÄÐÐËø£¬²¢ÇÒÔÚ¸üÐÂÍê³ÉÖ®ºóÊÍ·Å£¬µÈ´ýÆäËûÏ̻߳ñÈ¡¡£Òò´Ë£¬HBaseÖжÔͬһÐÐÊý¾ÝµÄ¸üвÙ×÷¶¼ÊÇ´®ÐвÙ×÷¡£
ÐÐËøÏà¹ØÊý¾Ý½á¹¹
ÈçÉÏͼËùʾ£¬HBaseÖÐÐÐËøÏà¹ØµÄÖ÷Òª½á¹¹ÓÐRowLockºÍRowLockContextÁ½¸öÀ࣬ÆäÖÐRowLockContextÀà´æ´¢ÐÐËøÏà¹ØÉÏÏÂÎÄÐÅÏ¢£¬°üÀ¨³ÖËøÏ̡߳¢±»Ëø¶ÔÏóÒÔ¼°¿ÉÒÔʵÏÖ»¥³âËøµÄCountDownLatch¶ÔÏóµÈµÈ£¬RowLockContextÊÇRowLockµÄÒ»¸öÊôÐÔ£¬³ý´ËÖ®Í⣬RowLock»¹°üº¬±íÕ÷ÐÐËøÊÇ·ñÒѾÊͷŵÄrelease×ֶΡ£¾ßÌå×Ö¶ÎÈçÏÂͼËùʾ£º


¸üмÓËøÁ÷³Ì
1. Ê×ÏÈʹÓÃrowkeyÒÔ¼°×ÔÉíÏ̶߳ÔÏóÉú³ÉÐÐËøÉÏÏÂÎÄRowLockContext¶ÔÏó
2. ÔÙ½«rowkey×÷Ϊkey£¬RowLockContext¶ÔÏó×÷Ϊvalueµ÷ÓÃputIfAbsert·½·¨Ð´ÈëÈ«¾ÖmapÖС£keyµÄΨһÐÔ£¬±£Ö¤mapÖÐ×î¶àÖ»ÓÐÒ»¸öRowLockContext¡£putIfAbsent·½·¨»á·µ»ØÒ»¸öexistingContext¶ÔÏ󣬸öÔÏó±íʾkey²åÈëǰmapÖжÔÓ¦¸ÃkeyµÄvalueÖµ£¬¸ù¾ÝexistingContextÊÇ·ñΪnull¡¢ÊÇ·ñÊÇ×ÔÉíÏ̴߳´½¨£¬¿ÉÒÔ·ÖΪÈçÏÂÈýÖÖÇé¿ö£º
£¨1£©existingContext¶ÔÏóΪnull£¬±íʾ¸ÃÐÐËøÃ»Óб»ÆäËûÏ̳߳ÖÓУ¬¿ÉÒÔ¸ù¾Ý´´½¨µÄÉÏÏÂÎĶÔÏó³ÖÓиÃËø
£¨2£©existingContextÊÇ×ÔÉíÏ̴߳´½¨£¬±íʾ×ÔÉíÏß³ÌÒѾÔÙ´´½¨RowLockContext¶ÔÏó£¬Ö±½ÓʹÓôæÔÚµÄRowLockContext¶ÔÏó³ÖÓиÃËø¡£ÕâÖÖÇé¿ö»á³öÏÖÔÚÅúÁ¿¸üÐÂÏß³ÌÖУ¬Ò»´ÎÅúÁ¿¸üпÉÄÜǰǰºóºó¶ÔijһÐÐÊý¾Ý¸üжà´Î£¬ÐèÒª¶à´Î³ÖÓиÃÐÐÊý¾ÝµÄÐÐËø£¬ÔÚHBaseÖÐÊDZ»ÔÊÐíµÄ¡£
£¨3£©existingContextÊÇÆäËûÏ̴߳´½¨£¬Ôò¸ÃÏ̻߳á×èÈûÔÚ´ËÉÏÏÂÎÄËù³ÖËøÉÏ£¬Ö±ÖÁËù³ÖÐÐËø±»ÊÍ·Å»òÕß×èÈû³¬Ê±¡£Èç¹ûËù³ÖÐÐËøÊÍ·Å£¬¸ÃÏ̻߳áÖØÐ¾ºÕùдȫ¾Ömap£¬Ò»µ©¾ºÕù³É¹¦¾Í³ÖÓиÃÐÐËø£¬·ñÔò¼ÌÐø×èÈû¡£¶øÈç¹û×èÈû³¬Ê±£¬¾Í»áÅ׳öÒì³££¬²»»áÔÙÈ¥¾ºÕù¸ÃËø¡£
ÊÍ·ÅÁ÷³Ì
ÔÚÏ̸߳üÐÂÍê³É²Ù×÷Ö®ºó£¬±ØÐëÔÚfinnally·½·¨ÖÐÖ´ÐÐÐÐËøÊͷŲÙ×÷£¬¼´µ÷ÓÃrowLock.release()·½·¨£¬¸Ã·½·¨Ö÷ÒªÖ´ÐÐÈçÏÂÁ½¸ö²Ù×÷£º
1. ´ÓlockedRowsÕâ¸öÈ«¾ÖmapÖн«¸Ãrow¶ÔÓ¦µÄRowLockContextÒÆ³ý
2. µ÷ÓÃlatch.countDown()·½·¨£¬»½ÐÑÆäËû×èÈûÔÚawaitÉϵȴý¸ÃÐÐËøµÄÏß³Ì
HBaseÖжÁÐ´ËøµÄʹÓÃ
HBaseÖгýÁËʹÓû¥³âËøÊµÏÖÐм¶Êý¾ÝµÄÒ»ÖÂÐÔÖ®Í⣬ҲʹÓöÁÐ´ËøÊµÏÖstore¼¶±ð²Ù×÷ÒÔ¼°region¼¶±ð²Ù×÷µÄ²¢·¢¿ØÖÆ¡£±ÈÈ磺
1. Region¸üжÁÐ´Ëø£ºHBaseÔÚÖ´ÐÐÊý¾Ý¸üвÙ×÷֮ǰ¶¼»á¼ÓÒ»°ÑRegion¼¶±ðµÄ¶ÁËø£¨¹²ÏíËø£©£¬ËùÓиüвÙ×÷Ïß³ÌÖ®¼ä²»»áÏ໥×èÈû£»È»¶ø£¬HBaseÔÚ½«memstoreÊý¾ÝÂäÅÌʱ»á¼ÓÒ»°ÑRegion¼¶±ðµÄÐ´Ëø£¨¶ÀÕ¼Ëø£©¡£Òò´Ë£¬ÔÚmemstoreÊý¾ÝÂäÅÌʱ£¬Êý¾Ý¸üвÙ×÷Ị̈߳¨Put²Ù×÷¡¢Append²Ù×÷¡¢Delete²Ù×÷£©¶¼»á×èÈûµÈ´ýÖÁ¸ÃÐ´ËøÊÍ·Å¡£
2. Region Close±£»¤Ëø£ºHBaseÔÚÖ´ÐÐclose²Ù×÷ÒÔ¼°split²Ù×÷ʱ»áÊ×ÏȼÓÒ»°ÑRegion¼¶±ðµÄÐ´Ëø£¨¶ÀÕ¼Ëø£©£¬×èÈû¶ÔregionµÄÆäËû²Ù×÷£¬±ÈÈçcompact²Ù×÷¡¢flush²Ù×÷ÒÔ¼°ÆäËû¸üвÙ×÷£¬ÕâЩ²Ù×÷¶¼»á³ÖÓÐÒ»°Ñ¶ÁËø£¨¹²ÏíËø£©
3. Store snapshot±£»¤Ëø£ºHBaseÔÚÖ´ÐÐflush memstoreµÄ¹ý³ÌÖÐÊ×ÏÈ»á»ùÓÚmemstore×ösnapshot£¬Õâ¸ö½×¶Î»á¼ÓÒ»°Ñstore¼¶±ðµÄÐ´Ëø£¨¶ÀÕ¼Ëø£©£¬ÓÃÒÔ×èÈûÆäËûÏ̶߳ԸÃmemstoreµÄ¸÷ÖÖ¸üвÙ×÷£»Çå³ýsnapshotʱҲÏàͬ£¬»á¼ÓÒ»°ÑÐ´Ëø×èÈûÆäËû¶Ô¸ÃmemstoreµÄ¸üвÙ×÷¡£
HBaseÖÐMVCC»úÖÆµÄʵÏÖ
ÈçÉÏÎÄËùÊö£¬HBase·Ö±ðÌṩÁËÐÐËøºÍ¶ÁÐ´ËøÀ´ÊµÏÖÐм¶Êý¾Ý¡¢Store¼¶±ðÒÔ¼°Region¼¶±ðµÄ²¢·¢¿ØÖÆ¡£³ý´ËÖ®Í⣬HBase»¹ÌṩÁËMVCC»úÖÆÊµÏÖÊý¾ÝµÄ¶Áд²¢·¢¿ØÖÆ¡£MVCC£¬¼´¶à°æ±¾²¢·¢¿ØÖƼ¼Êõ£¬ËüʹµÃÊÂÎñÒýÇæ²»ÔÙµ¥´¿µØÊ¹ÓÃÐÐËøÊµÏÖÊý¾Ý¶ÁдµÄ²¢·¢¿ØÖÆ£¬È¡¶ø´úÖ®µÄÊÇ£¬°ÑÐÐËøÓëÐеĶà¸ö°æ±¾½áºÏÆðÀ´£¬¾¹ý¼òµ¥µÄËã·¨¾Í¿ÉÒÔʵÏÖ·ÇËø¶¨¶Á£¬½ø¶ø´ó´óµÄÌá¸ßϵͳµÄ²¢·¢ÐÔÄÜ¡£HBaseÕýÊÇʹÓÃÐÐËø
£« MVCC±£Ö¤¸ßЧµÄ²¢·¢¶ÁдÒÔ¼°¶ÁдÊý¾ÝÒ»ÖÂÐÔ¡£
MVCC»úÖÆ¼ò½é
ÔÚÁ˽âHBaseÈçºÎʵÏÖMVCC֮ǰ£¬ÎÒÃÇÊ×ÏÈÐèÒªÁ˽⵱ǰ½ö»ùÓÚÐÐËøÊµÏֵĸüвÙ×÷¶ÔÓÚ¶ÁÇëÇóÓÐʲôӰÏì¡£ÏÂͼΪHBase»ùÓÚÐÐËøÊµÏÖµÄÊý¾Ý¸üÐÂʱÐòʾÒâͼ£º

ÉÏͼÖмòµ¥µØ±íÊöÁËÊý¾Ý¸üÐÂÁ÷³Ì£¨ºóÐøÎÄÕ»á¶ÔHBaseÊý¾ÝдÈë½øÐÐÉîÈëµÄ½éÉÜ£©£¬¼òµ¥À´Ëµ£¬Êý¾Ý¸üпÉÒÔ·ÖΪÈçϼ¸¸ö½×¶Î£º»ñÈ¡ÐÐËø¡¢¸üÐÂWAL¡¢Êý¾ÝдÈë±¾µØ»º´æmemstore¡¢ÊÍ·ÅÐÐËø¡£
ÈçÉÏͼËùʾ£¬Ç°ºó·Ö±ðÓÐÁ½´Î¶ÔͬһÐÐÊý¾ÝµÄ¸üвÙ×÷¡£¼ÙÈçµÚ¶þ´Î¸üйý³ÌÔÚ½«ÁдØcf1¸üÐÂΪt2_cf1Ö®ºóÖÐÓÐÒ»´Î¶ÁÇëÇó½øÀ´£¬´Ëʱ¶Áµ½µÄµÚÒ»ÁÐÊý¾Ý½«Êǵڶþ´Î¸üкóµÄÊý¾Ýt2_cf1£¬È»¶øµÚ¶þÁÐÊý¾ÝÈ´ÊǵÚÒ»´Î¸üкóµÄÊý¾Ýt1_cf2£¬ºÜÏÔÈ»£¬Ö»Õë¶Ô¸üÐвÙ×÷¼ÓÐÐËø»á²úÉú¶ÁÈ¡Êý¾Ý²»Ò»ÖµÄÇé¿ö¡£×î¼òµ¥µÄÊý¾Ý²»Ò»Ö½â¾ö·½°¸ÊǶÁдÏ̹߳«ÓÃÒ»°ÑÐÐËø£¬ÕâÑù¿ÉÒÔ±£Ö¤¶Áд֮¼ä»¥³â£¬µ«ÊǶÁдÏß³ÌͬʱÇÀÕ¼ÐÐËø±ØÈ»»á¼«´óµØÓ°ÏìÐÔÄÜ¡£
Ϊ´Ë£¬HBase²ÉÓÃMVCC½â¾ö·½°¸±ÜÃâ¶ÁÏß³ÌÈ¥»ñÈ¡ÐÐËø¡£MVCC½â¾ö·½°¸¶ÔÉÏÊöÊý¾Ý¸üвÙ×÷ʱÐòºÍ¶Á²Ù×÷¶¼½øÐÐÁËÒ»¶¨µÄÐÞÕý£¬Ö÷ÒªÐÂÔöÁËÒ»¸öдÐòºÅºÍ¶ÁÐòºÅ£¬Æäʵ¾ÍÊÇÊý¾ÝµÄ°æ±¾ºÅ¡£ÐÞÕýºóµÄ¸üвÙ×÷ʱÐòʾÒâͼΪ£º

ÈçÉÏͼËùʾ£¬ÐÞÕýºóµÄ¸üвÙ×÷Ö÷ÒªÐÂÔöÁË¡®»ñȡдÐòºÅ¡¯ºÍ¡¯½áÊøÐ´ÐòºÅ¡¯Á½¸ö²½Ö裬²¢ÇÒÿ¸öcellÊý¾Ýдmemstore²Ù×÷¶¼»áЯ´ø¸ÃдÐòºÅ¡£ÄǶÁÇëÇóÐèÒª¾¹ýʲôÑùµÄÐÞÕýÄØ£¿HBaseµÄ×ö·¨ÈçÏ£º
£¨1£©Ã¿¸ö¶Á²Ù×÷¿ªÊ¼Ê±¶¼»á·ÖÅäÒ»¸ö¶ÁÐòºÅ£¬³ÆÎª¶ÁÈ¡µã
£¨2£©¶ÁÈ¡µãµÄÖµÊÇËùÓеÄд²Ù×÷Íê³ÉÐòºÅÖеÄ×î´óÕûÊý
£¨3£©Ò»´Î¶Á²Ù×÷µÄ½á¹û¾ÍÊǶÁÈ¡µã¶ÔÓ¦µÄËùÓÐcellÖµµÄ¼¯ºÏ
ÈçÏÂͼËùʾ£¬µÚÒ»´Î¸üлñÈ¡µÄдÐòºÅΪ1£¬µÚ¶þ´Î¸üлñÈ¡µÄдÐòºÅΪ2¡£¶ÁÇëÇó½øÀ´Ê±Ð´²Ù×÷Íê³ÉÐòºÅÖеÄ×î´óÕûÊýΪwn
£½ 1£¬Òò´Ë¶ÔÓ¦µÄ¶ÁÈ¡µãΪwn £½ 1£¬¶ÁÈ¡µÄ½á¹ûΪwn £½ 1Ëù¶ÔÓ¦µÄËùÓÐcellÖµ¼¯ºÏ£¬¼´Îªt1_cf1ºÍt1_cf2£¬ÕâÑù¾Í¿ÉÒÔʵÏÖÒÔÎÞËøµÄ·½Ê½¶ÁÈ¡µ½Ò»ÖµÄÊý¾Ý¡£

HBaseÖÐMVCCʵÏÖ
HBaseÖУ¬MVCCµÄ¾ßÌåʵÏÖÀàΪMultiVersionConsistencyControl£¬¸ÃÀàά»¤ÁËÁ½¸ölongÐ͵ıäÁ¿¡¢Ò»¸öWriteEntry¶ÔÏóºÍÒ»¸öwriteQueue¶ÓÁУº
1. long memstoreRead£º¼Ç¼µ±Ç°È«¾ÖµÄ¶ÁÈ¡µã£¬¶ÁÇëÇó½øÀ´Ö®ºóÊ×ÏÈ»á»ñÈ¡¸Ã¶ÁÈ¡µã
2. long memstoreWrite£º¼Ç¼µ±Ç°È«¾ÖµÄдÐòºÅ£¬¸ù¾ÝËüΪÏÂÒ»¸ö¸üÐÂÏ̷߳ÖÅäеÄдÐòºÅ
3. writeEntry£º¼Ç¼¸üвÙ×÷µÄдÐòºÅ¶ÔÏó£¬Ö÷Òª°üº¬Á½¸ö±äÁ¿£¬Ò»¸öÊÇwriteNumber£¬±íʾдÐòºÅ£»Ò»¸öÊDz¼¶ûÀàÐ͵Äcompleted£¬±íʾ¸Ã´Î¸üÐÂÊÇ·ñÍê³É
4. writeQueue£ºµ±Ç°ËùÓиüвÙ×÷µÄдÐòºÅ¶ÔÏ󼯺Ï
»ñȡдÐòºÅ
¸ù¾ÝÉÏÎÄÖиüÐÂÊý¾ÝʱÐòͼ¿ÉÖª£¬¸üÐÂÏ̻߳ñÈ¡ÐÐËøÖ®ºó¾ÍÐèÒª»ñȡдÐòºÅ£¬¶ÔÓ¦µÄ·½·¨ÎªbeginMemstoreInsert£¬¸Ã·½·¨½«memstoreWrite¼Ó1£¬Éú³ÉwriteEntry¶ÔÏó²¢²åÈëµ½¶ÓÁÐwriteQueue£¬·µ»ØwriteEntry¶ÔÏó¡£Note£ºÉú³ÉµÄwriteEntry¶ÔÏóÖаüº¬Ð´ÐòºÅwriteNumber£¬¸üÐÂÏ̻߳Ὣ¸ÃwriteNumberÉèÖÃΪcellÊý¾ÝµÄÒ»¸öÊôÐÔ¡£
½áÊøÐ´ÐòºÅ
Êý¾Ý¸üÐÂÍê³ÉÖ®ºó£¬ÊÍ·ÅÐÐËøÖ®Ç°£¬¸üÐÂÏ̻߳áµ÷ÓÃcompleteMemstoreInsert·½·¨¸üÐÂwriteEntry¶ÔÏóÒÔ¼°memstoreRead±äÁ¿£¬¾ßÌå·ÖΪÈçÏÂÁ½²½£º
1. Ê×ÏȽ«¸ÃwriteEntry¶ÔÏó±ê¼ÇΪ¡¯ÒÑÍê³É¡¯£¬ÔÙ½«È«¾Ö¶ÁÈ¡µãmemstoreRead¾¡¿ÉÄÜ¶àµØÍùÇ°ÒÆ¡£Ç°ÒÆË㷨Ϊ±éÀú¶ÓÁÐwriteQueueÖÐËùÓеÄwriteEntry¶ÔÏó£¬ÒƳýµôÒѾ±ê¼ÇΪ¡¯ÒÑÍê³É¡¯µÄwriteEntryÖ±ÖÁÓöµ½Î´Íê³ÉµÄwriteEntry£¬×îºó½«memstoreRead±äÁ¿¸üÐÂΪ×îÐÂÒÑÍê³ÉµÄwriteNumber¡£
2. ×¢ÒâÉÏÊömemstoreRead±äÁ¿ÓпÉÄܲ¢²»µÈÓÚµ±Ç°¸üÐÂÏ̵߳ÄwriteNumber£¬ÕâÖÖÇé¿öϸøüÐÂÏ̶߳ÔÊý¾ÝµÄ¸üвÙ×÷¶ÔÓû§²¢²»¿É¼û¡£ÎªÁËʵÏÖ¸üÐÂÍê³ÉÖ®ºó¸üнá¹û¼´¶ÔÓû§¿É¼û£¬ÐèÒªµÈ´ýmemstoreRead±äÁ¿Ç°ÒƵ½µ±Ç°¸üÐÂÏ̵߳ÄwiteNumber¡£Òò´ËËü»á×èÈûµ±Ç°Ị̈߳¬µÈ´ýÆäËûÏ̶߳ÔÓ¦µÄwriteEntry¶ÔÏó±ê¼ÇΪ¡¯ÒÑÍê³É¡¯£¬Ö±ÖÁmemstoreReadµÈÓÚµ±Ç°Ï̵߳ÄwriteNumber¡£
×ܽá
HBaseÌṩÁ˸÷ÖÖËø»úÖÆºÍMVCC»úÖÆÀ´±£Ö¤Êý¾ÝµÄÔ×ÓÐÔ¡¢Ò»ÖÂÐÔµÈÌØÐÔ£¬ÆäÖÐʹÓû¥³âËøÊµÏÖµÄÐÐËø±£Ö¤ÁËÐм¶Êý¾ÝµÄÔ×ÓÐÔ£¬Ê¹ÓÃJDKÌṩµÄ¶ÁÐ´ËøÊµÏÖÁËStore¼¶±ð¡¢Region¼¶±ðµÄÊý¾ÝÒ»ÖÂÐÔ£¬Í¬Ê±Ê¹ÓÃÐÐËø+MVCC»úÖÆÊµÏÖÁËÔÚ¸ßÐÔÄÜ·ÇËø¶¨¶Á³¡¾°ÏµÄÊý¾ÝÒ»ÖÂÐÔ¡£
|