±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁ˷ǹØÏµÐÍÊý¾Ý¿â£¨NoSQL£©·Ö²¼Ê½ÏµÍ³µÄÌØµã£¬·Ö²¼Ê½´æ´¢Ëã·¨,Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×Ô¼òÊ飬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
NoSQL(NoSQL = Not Only SQL )£¬Òâ¼´"²»½ö½öÊÇSQL"¡£
ÏÖ´ú¼ÆËãϵͳÿÌìÔÚÍøÂçÉ϶¼»á²úÉúÅÓ´óµÄÊý¾ÝÁ¿¡£ÕâЩÊý¾ÝÓкܴóÒ»²¿·ÖÊÇÓɹØÏµÐÍÊý¾Ý¿â¹ÜÀíϵͳ£¨RDBMSs£©À´´¦Àí£¬ÆäÑϽ÷³ÉÊìµÄÊýѧÀíÂÛ»ù´¡Ê¹µÃÊý¾Ý½¨Ä£ºÍÓ¦ÓóÌÐò±à³Ì¸ü¼Ó¼òµ¥¡£
µ«Ëæ×ÅÐÅÏ¢»¯µÄÀ˳±ºÍ»¥ÁªÍøµÄÐËÆð£¬´«Í³µÄRDBMSÔÚһЩҵÎñÉÏ¿ªÊ¼³öÏÖÎÊÌâ¡£Ê×ÏÈ£¬¶ÔÊý¾Ý¿â´æ´¢µÄÈÝÁ¿ÒªÇóÔ½À´Ô½¸ß£¬µ¥»úÎÞ·¨Âú×ãÐèÇ󣬺ܶàʱºòÐèÒªÓü¯ÈºÀ´½â¾öÎÊÌ⣬¶øRDBMSÓÉÓÚÒªÖ§³Öjoin£¬unionµÈ²Ù×÷£¬Ò»°ã²»Ö§³Ö·Ö²¼Ê½¼¯Èº¡£Æä´Î£¬ÔÚ´óÊý¾Ý´óÐÐÆäµÀµÄ½ñÌ죬ºÜ¶àµÄÊý¾Ý¶¼¡°Æµ·±¶ÁºÍÔö¼Ó£¬²»Æµ·±Ð޸ġ±£¬¶øRDBMS¶ÔËùÓвÙ×÷Ò»ÊÓͬÈÊ£¬Õâ¾Í´øÀ´ÁËÓÅ»¯µÄ¿Õ¼ä¡£ÁíÍ⣬»¥ÁªÍøÊ±´úÒµÎñµÄ²»È·¶¨ÐÔµ¼ÖÂÊý¾Ý¿âµÄ´æ´¢Ä£Ê½Ò²ÐèҪƵ·±±ä¸ü£¬²»×ÔÓɵĴ洢ģʽÔö´óÁËÔËάµÄ¸´ÔÓÐÔºÍÀ©Õ¹µÄÄѶȡ£
NoSQL ÊÇÒ»ÏîȫеÄÊý¾Ý¿â¸ïÃüÐÔÔ˶¯£¬ÔçÆÚ¾ÍÓÐÈËÌá³ö£¬·¢Õ¹ÖÁ2009ÄêÇ÷ÊÆÔ½·¢¸ßÕÇ¡£ÕâÀàÊý¾Ý¿âÖ÷ÒªÓÐÕâÐ©ÌØµã£º·Ç¹ØÏµÐ͵ġ¢·Ö²¼Ê½µÄ¡¢¿ªÔ´µÄ¡¢Ë®Æ½¿ÉÀ©Õ¹µÄ¡£×î³õµÄÄ¿µÄÊÇΪÁË´ó¹æÄ£web
Ó¦Óá£NoSQL µÄÓµ»¤ÕßÃÇÌᳫÔËÓ÷ǹØÏµÐ͵ÄÊý¾Ý´æ´¢£¬Í¨³£µÄÓ¦ÓÃÈçÏÂÌØµã£ºÄ£Ê½×ÔÓÉ¡¢Ö§³Ö¼òÒ׸´ÖÆ¡¢¼òµ¥µÄAPI¡¢×îÖÕµÄÒ»ÖÂÐÔ£¨·ÇACID£©¡¢´óÈÝÁ¿Êý¾ÝµÈ¡£
±ÊÕßÊÇMongoDBÓû§£¬Ò²Ê¹ÓùýRedis¡£¹ØÏµÐÍÊý¾Ý¿âʹÓùýMySQLÓëOracle£¬¶ÔÁ½ÕßµÄÇø±ðÓÐÒ»¶¨µÄÌå»á¡£MongoºÍRedisµÄ²Ù×÷¶¼·Ç³£¼òµ¥£¬ËٶȺܿ죬ºÜ¶àÓÃSQLÐèÒªºÜ¶àÌõÓï¾äµÄ²Ù×÷ÔÚNoSQLÊý¾Ý¿âÖж¼ÊÇ2¾äÒÔÄÚÍê³É¡£ÁíÍâNoSQLÅäÖÃclusterÒ²ºÜÈÝÒ×£¬ÇÒ¿ÉÒÔËæÊ±¸ü¸ÄpartitionºÍreplicationµÄÊýÁ¿£¬MongoµÄа汾»¹ÄÚÖÃÁËMapReduce²Ù×÷£¬Ê¹ÆäÓÐÁË×ö´óÊý¾Ý·ÖÎöµÄÄÜÁ¦¡£
NoSQLÀíÂÛ»ù´¡
1.¹ØÏµÐÍÊý¾Ý¿âÀíÂÛ - ACID

ACID£¬ÊÇÖ¸Êý¾Ý¿â¹ÜÀíϵͳ£¨DBMS£©ÔÚдÈë»ò¸üÐÂ×ÊÁϵĹý³ÌÖУ¬Îª±£Ö¤ÊÂÎñ£¨transaction£©ÊÇÕýÈ·¿É¿¿µÄ£¬Ëù±ØÐë¾ß±¸µÄËĸöÌØÐÔ£ºÔ×ÓÐÔ£¨atomicity£¬»ò³Æ²»¿É·Ö¸îÐÔ£©¡¢Ò»ÖÂÐÔ£¨consistency£©¡¢¸ôÀëÐÔ£¨isolation£¬ÓֳƶÀÁ¢ÐÔ£©¡¢³Ö¾ÃÐÔ£¨durability£©¡£
A ¨C Atomicity ¨C Ô×ÓÐÔ
Ò»¸öÊÂÎñ£¨transaction£©ÖеÄËùÓвÙ×÷£¬ÒªÃ´È«²¿Íê³É£¬ÒªÃ´È«²¿²»Íê³É£¬²»»á½áÊøÔÚÖмäij¸ö»·½Ú¡£ÊÂÎñÔÚÖ´Ðйý³ÌÖз¢Éú´íÎ󣬻ᱻ»Ø¹ö£¨Rollback£©µ½ÊÂÎñ¿ªÊ¼Ç°µÄ״̬£¬¾ÍÏñÕâ¸öÊÂÎñ´ÓÀ´Ã»Óб»Ö´ÐйýÒ»Ñù¡£
C ¨C Consistency ¨C Ò»ÖÂÐÔ
ÔÚÊÂÎñ¿ªÊ¼Ö®Ç°ºÍÊÂÎñ½áÊøÒÔºó£¬Êý¾Ý¿âµÄÍêÕûÐÔûÓб»ÆÆ»µ¡£Õâ±íʾдÈëµÄ×ÊÁϱØÐëÍêÈ«·ûºÏËùÓеÄÔ¤Éè¹æÔò£¬Õâ°üº¬×ÊÁϵľ«È·¶È¡¢´®ÁªÐÔÒÔ¼°ºóÐøÊý¾Ý¿â¿ÉÒÔ×Ô·¢ÐÔµØÍê³ÉÔ¤¶¨µÄ¹¤×÷¡£
I ¨C Isolation ¨C ¸ôÀëÐÔ
Êý¾Ý¿âÔÊÐí¶à¸ö²¢·¢ÊÂÎñͬʱ¶ÔÆäÊý¾Ý½øÐжÁдºÍÐ޸ĵÄÄÜÁ¦£¬¸ôÀëÐÔ¿ÉÒÔ·ÀÖ¹¶à¸öÊÂÎñ²¢·¢Ö´ÐÐʱÓÉÓÚ½»²æÖ´Ðжøµ¼ÖÂÊý¾ÝµÄ²»Ò»Ö¡£ÊÂÎñ¸ôÀë·ÖΪ²»Í¬¼¶±ð£¬°üÀ¨¶ÁδÌá½»£¨Read
uncommitted£©¡¢¶ÁÌá½»£¨read committed£©¡¢¿ÉÖØ¸´¶Á£¨repeatable read£©ºÍ´®Ðл¯£¨Serializable£©¡£
D ¨C Durability ¨C ³Ö¾ÃÐÔ
ÊÂÎñ´¦Àí½áÊøºó£¬¶ÔÊý¾ÝµÄÐ޸ľÍÊÇÓÀ¾ÃµÄ£¬¼´±ãϵͳ¹ÊÕÏÒ²²»»á¶ªÊ§¡£
¹ØÏµÐÍÊý¾Ý¿âÑϸñ×ñÑACIDÀíÂÛ¡£µ«µ±Êý¾Ý¿âÒª¿ªÊ¼Âú×ãºáÏòÀ©Õ¹¡¢¸ß¿ÉÓá¢Ä£Ê½×ÔÓɵÈÐèÇóʱ£¬ÐèÒª¶ÔACIDÀíÂÛ½øÐÐÈ¡Éᣬ²»ÄÜÑϸñ×ñÑACID¡£ÒÔCAPÀíÂÛºÍBASEÀíÂÛΪ»ù´¡µÄNoSQLÊý¾Ý¿â¿ªÊ¼³öÏÖ¡£
2.·Ö²¼Ê½ÏµÍ³ÀíÂÛ
2.1 ·Ö²¼Ê½ÏµÍ³½éÉÜ
·Ö²¼Ê½ÏµÍ³µÄºËÐÄÀíÄîÊÇÈöą̀·þÎñÆ÷Ðͬ¹¤×÷£¬Íê³Éµ¥Ì¨·þÎñÆ÷ÎÞ·¨´¦ÀíµÄÈÎÎñ£¬ÓÈÆäÊǸ߲¢·¢»òÕß´óÊý¾ÝÁ¿µÄÈÎÎñ¡£·Ö²¼Ê½ÊÇNoSQLÊý¾Ý¿âµÄ±ØÒªÌõ¼þ¡£
·Ö²¼Ê½ÏµÍ³ÓɶÀÁ¢µÄ·þÎñÆ÷ͨ¹ýÍøÂçËÉÉ¢ñîºÏ×é³ÉµÄ¡£Ã¿¸ö·þÎñÆ÷¶¼ÊÇһ̨¶ÀÁ¢µÄPC»ú£¬·þÎñÆ÷Ö®¼äͨ¹ýÄÚ²¿ÍøÂçÁ¬½Ó£¬ÄÚ²¿ÍøÂçËÙ¶ÈÒ»°ã±È½Ï¿ì¡£ÒòΪ·Ö²¼Ê½¼¯ÈºÀïµÄ·þÎñÆ÷ÊÇͨ¹ýÄÚ²¿ÍøÂçËÉÉ¢ñîºÏ£¬¸÷½ÚµãÖ®¼äµÄͨѶÓÐÒ»¶¨µÄÍøÂ翪Ïú£¬Òò´Ë·Ö²¼Ê½ÏµÍ³ÔÚÉè¼ÆÉϾ¡¿ÉÄܼõÉÙ½Úµã¼äͨѶ¡£´ËÍ⣬ÒòÎªÍøÂç´«ÊäÆ¿¾±£¬µ¥¸ö½ÚµãµÄÐÔÄܸߵͶԷֲ¼Ê½ÏµÍ³ÕûÌåÐÔÄÜÓ°Ïì²»´ó¡£±ÈÈ磬¶Ô·Ö²¼Ê½Ó¦ÓÃÀ´Ëµ£¬²ÉÓò»Í¬±à³ÌÓïÑÔ¿ª·¢´øÀ´µÄµ¥¸öÓ¦Ó÷þÎñµÄÐÔÄܲîÒ죬¸úÍøÂ翪Ïú±ÈÆðÀ´¶¼¿ÉÒÔºöÂÔ²»¼Æ¡£
Òò´Ë£¬·Ö²¼Ê½ÏµÍ³Ã¿¸ö½ÚµãÒ»°ã²»²ÉÓøßÐÔÄܵķþÎñÆ÷£¬¶øÊÇʹÓÃÐÔÄÜÏà¶ÔÒ»°ãµÄÆÕͨPC·þÎñÆ÷¡£ÌáÉý·Ö²¼Ê½ÏµÍ³µÄÕûÌåÐÔÄÜÊÇͨ¹ýºáÏòÀ©Õ¹£¨Ôö¼Ó¸ü¶àµÄ·þÎñÆ÷£©£¬¶ø²»ÊÇ×ÝÏòÀ©Õ¹£¨ÌáÉýÿ¸ö½ÚµãµÄ·þÎñÆ÷ÐÔÄÜ£©ÊµÏÖ¡£
·Ö²¼Ê½ÏµÍ³×î´óµÄÌØµãÊÇ¿ÉÀ©Õ¹ÐÔ£¬ËüÄܹ»ÊÊÓ¦ÐèÇó±ä»¯¶øÀ©Õ¹¡£ÆóÒµ¼¶Ó¦ÓÃÐèÇó¾³£ËæÊ±¼ä¶ø²»¶Ï±ä»¯£¬ÕâÒ²¶ÔÆóÒµ¼¶Ó¦ÓÃÆ½Ì¨Ìá³öÁ˺ܸߵÄÒªÇ󡣯óÒµ¼¶Ó¦ÓÃÆ½Ì¨±ØÐëÒªÄÜÊÊÓ¦ÐèÇóµÄ±ä»¯£¬¼´¾ßÓпÉÀ©Õ¹ÐÔ¡£±ÈÈçÒÆ¶¯»¥ÁªÍø2CÓ¦Óã¬Ëæ×Å»¥ÁªÍøÆóÒµµÄÒµÎñ¹æÄ£²»¶ÏÔö´ó£¬ÒµÎñ±äµÃÔ½À´Ô½¸´ÔÓ£¬²¢·¢Óû§ÇëÇóÔ½À´Ô½¶à£¬Òª´¦ÀíµÄÊý¾ÝÒ²Ô½À´Ô½¶à£¬Õâ¸öʱºòÆóÒµ¼¶Ó¦ÓÃÆ½Ì¨±ØÐëÄܹ»ÊÊÓ¦ÕâЩ±ä»¯£¬Ö§³Ö¸ß²¢·¢·ÃÎʺͺ£Á¿Êý¾Ý´¦Àí¡£·Ö²¼Ê½ÏµÍ³ÓÐÁ¼ºÃµÄ¿ÉÀ©Õ¹ÐÔ£¬¿ÉÒÔͨ¹ýÔö¼Ó·þÎñÆ÷ÊýÁ¿À´ÔöÇ¿·Ö²¼Ê½ÏµÍ³ÕûÌåµÄ´¦ÀíÄÜÁ¦£¬ÒÔÓ¦¶ÔÆóÒµµÄÒµÎñÔö³¤´øÀ´µÄ¼ÆËãÐèÇóÔö¼Ó¡£
2.2 ·Ö²¼Ê½´æ´¢µÄÎÊÌâ ¨C CAPÀíÂÛ
Èç¹ûÎÒÃÇÆÚ´ýʵÏÖÒ»Ì×ÑϸñÂú×ãACIDµÄ·Ö²¼Ê½ÊÂÎñ£¬ºÜ¿ÉÄܳöÏÖµÄÇé¿ö¾ÍÊÇϵͳµÄ¿ÉÓÃÐÔºÍÑϸñÒ»ÖÂÐÔ·¢Éú³åÍ»¡£ÔÚ¿ÉÓÃÐÔºÍÒ»ÖÂÐÔÖ®¼äÓÀÔ¶ÎÞ·¨´æÔÚÒ»¸öÁ½È«ÆäÃÀµÄ·½°¸¡£ÓÉÓÚNoSQLµÄ»ù±¾ÐèÇó¾ÍÊÇÖ§³Ö·Ö²¼Ê½´æ´¢£¬ÑϸñÒ»ÖÂÐÔÓë¿ÉÓÃÐÔÐèÒª»¥ÏàÈ¡ÉᣬÓÉ´ËÑÓÉì³öÁËCAPÀíÂÛÀ´¶¨Òå·Ö²¼Ê½´æ´¢Óöµ½µÄÎÊÌâ¡£
CAPÀíÂÛ¸æËßÎÒÃÇ£ºÒ»¸ö·Ö²¼Ê½ÏµÍ³²»¿ÉÄÜͬʱÂú×ãÒ»ÖÂÐÔ(C:Consistency)¡¢¿ÉÓÃÐÔ(A:Availability)¡¢·ÖÇøÈÝ´íÐÔ(P:Partitiontolerance)ÕâÈý¸ö»ù±¾ÐèÇ󣬲¢ÇÒ×î¶àÖ»ÄÜÂú×ãÆäÖеÄÁ½Ïî¡£
¶ÔÓÚÒ»¸ö·Ö²¼Ê½ÏµÍ³À´Ëµ£¬·ÖÇøÈÝ´íÊÇ»ù±¾ÐèÇ󣬷ñÔò²»ÄܳÆÖ®Îª·Ö²¼Ê½ÏµÍ³¡£Òò´Ë¼Ü¹¹Ê¦ÐèÒªÔÚCºÍAÖ®¼äѰÇóÆ½ºâ¡£

C ¨C Consistency ¨C Ò»ÖÂÐÔ£¨ÓëACIDµÄCÍêÈ«²»Í¬£©
Ò»ÖÂÐÔÊÇÖ¸¡°all nodes see the same data at the same time¡±£¬¼´¸üвÙ×÷³É¹¦²¢·µ»Ø¿Í»§¶ËÍê³Éºó£¬ËùÓнڵãÔÚͬһʱ¼äµÄÊý¾ÝÍêȫһÖ¡£
¶ÔÓÚÒ»ÖÂÐÔ£¬¿ÉÒÔ·ÖΪ´Ó¿Í»§¶ËºÍ·þÎñ¶ËÁ½¸ö²»Í¬µÄÊӽǡ£
´Ó¿Í»§¶ËÀ´¿´£¬Ò»ÖÂÐÔÖ÷ÒªÖ¸µÄÊǶಢ·¢·ÃÎÊʱ¸üйýµÄÊý¾ÝÈçºÎ»ñÈ¡µÄÎÊÌâ¡£
´Ó·þÎñ¶ËÀ´¿´£¬ÔòÊǸüÐÂÈçºÎ¸´ÖÆ·Ö²¼µ½Õû¸öϵͳ£¬ÒÔ±£Ö¤Êý¾Ý×îÖÕÒ»Ö¡£Ò»ÖÂÐÔÊÇÒòΪÓв¢·¢¶Áд²ÅÓеÄÎÊÌ⣬Òò´ËÔÚÀí½âÒ»ÖÂÐÔµÄÎÊÌâʱ£¬Ò»¶¨Òª×¢Òâ½áºÏ¿¼ÂDz¢·¢¶ÁдµÄ³¡¾°¡£
´Ó¿Í»§¶Ë½Ç¶È£¬¶à½ø³Ì²¢·¢·ÃÎÊʱ£¬¸üйýµÄÊý¾ÝÔÚ²»Í¬½ø³ÌÈçºÎ»ñÈ¡µÄ²»Í¬²ßÂÔ£¬¾ö¶¨Á˲»Í¬µÄÒ»ÖÂÐÔ¡£¶ÔÓÚ¹ØÏµÐÍÊý¾Ý¿â£¬ÒªÇó¸üйýµÄÊý¾ÝÄܱ»ºóÐøµÄ·ÃÎʶ¼ÄÜ¿´µ½£¬ÕâÊÇǿһÖÂÐÔ¡£Èç¹ûÄÜÈÝÈ̺óÐøµÄ²¿·Ö»òÕßÈ«²¿·ÃÎʲ»µ½£¬ÔòÊÇÈõÒ»ÖÂÐÔ¡£Èç¹û¾¹ýÒ»¶Îʱ¼äºóÒªÇóÄÜ·ÃÎʵ½¸üкóµÄÊý¾Ý£¬ÔòÊÇ×îÖÕÒ»ÖÂÐÔ¡£
A ¨C Availability ¨C ¿ÉÓÃÐÔ
¿ÉÓÃÐÔÊÇÖ¸¡°Reads and writes always succeed¡±£¬¼´·þÎñÒ»Ö±¿ÉÓ㬶øÇÒÊÇÕý³£ÏìӦʱ¼ä¡£
¶ÔÓÚÒ»¸ö¿ÉÓÃÐԵķֲ¼Ê½ÏµÍ³£¬Ã¿Ò»¸ö·Ç¹ÊÕÏµÄ½Úµã±ØÐë¶Ôÿһ¸öÇëÇó×÷³öÏìÓ¦¡£Ò²¾ÍÊÇ˵£¬¸ÃϵͳʹÓõÄÈκÎËã·¨±ØÐë×îÖÕÖÕÖ¹¡£µ±Í¬Ê±ÒªÇó·ÖÇøÈÝÈÌÐÔʱ£¬ÕâÊÇÒ»¸öºÜÇ¿µÄ¶¨Ò壺¼´Ê¹ÊÇÑÏÖØµÄÍøÂç´íÎó£¬Ã¿¸öÇëÇó±ØÐëÍê³É¡£
ºÃµÄ¿ÉÓÃÐÔÖ÷ÒªÊÇָϵͳÄܹ»ºÜºÃµÄΪÓû§·þÎñ£¬²»³öÏÖÓû§²Ù×÷ʧ°Ü»òÕß·ÃÎʳ¬Ê±µÈÓû§ÌåÑé²»ºÃµÄÇé¿ö¡£ÔÚͨ³£Çé¿öÏ£¬¿ÉÓÃÐÔÓë·Ö²¼Ê½Êý¾ÝÈßÓà¡¢¸ºÔؾùºâµÈÓÐןܴóµÄ¹ØÁª¡£
P ¨C Partition tolerance ¨C ·ÖÇøÈÝ´íÐÔ
·ÖÇøÈÝ´íÐÔÊÇÖ¸¡°the system continues to operate despite arbitrary
message loss or failureof part of the system¡±£¬¼´·Ö²¼Ê½ÏµÍ³ÔÚÓöµ½Ä³½Úµã»òÍøÂç·ÖÇø¹ÊÕϵÄʱºò£¬ÈÔÈ»Äܹ»¶ÔÍâÌṩÂú×ãÒ»ÖÂÐԺͿÉÓÃÐԵķþÎñ¡£
·ÖÇøÈÝ´íÐÔºÍÀ©Õ¹ÐÔ½ôÃÜÏà¹Ø¡£ÔÚ·Ö²¼Ê½Ó¦ÓÃÖУ¬¿ÉÄÜÒòΪһЩ·Ö²¼Ê½µÄÔÒòµ¼ÖÂϵͳÎÞ·¨Õý³£ÔËת¡£ºÃµÄ·ÖÇøÈÝ´íÐÔÒªÇóÄܹ»Ê¹Ó¦ÓÃËäÈ»ÊÇÒ»¸ö·Ö²¼Ê½ÏµÍ³£¬µ«¿´ÉÏȥȴºÃÏñÊÇÒ»¸ö¿ÉÒÔÔËתÕý³£µÄÕûÌå¡£±ÈÈçÏÖÔڵķֲ¼Ê½ÏµÍ³ÖÐÓÐijһ¸ö»òÕß¼¸¸ö»úÆ÷å´µôÁË£¬ÆäËüʣϵĻúÆ÷»¹Äܹ»Õý³£ÔËתÂú×ãϵͳÐèÇ󣬻òÕßÊÇ»úÆ÷Ö®¼äÓÐÍøÂçÒì³££¬½«·Ö²¼Ê½ÏµÍ³·Ö¸ô³Éδ¶ÀÁ¢µÄ¼¸¸ö²¿·Ö£¬¸÷¸ö²¿·Ö»¹ÄÜά³Ö·Ö²¼Ê½ÏµÍ³µÄÔË×÷£¬ÕâÑù¾Í¾ßÓкõķÖÇøÈÝ´íÐÔ¡£
CA without P
Èç¹û²»ÒªÇóP£¨²»ÔÊÐí·ÖÇø£©£¬ÔòC£¨Ç¿Ò»ÖÂÐÔ£©ºÍA£¨¿ÉÓÃÐÔ£©ÊÇ¿ÉÒÔ±£Ö¤µÄ¡£µ«Æäʵ·ÖÇø²»ÊÇÄãÏë²»ÏëµÄÎÊÌ⣬¶øÊÇʼÖÕ»á´æÔÚ£¬Òò´ËCAµÄϵͳ¸ü¶àµÄÊÇÔÊÐí·ÖÇøºó¸÷×ÓϵͳÒÀÈ»±£³ÖCA¡£
CP without A
Èç¹û²»ÒªÇóA£¨¿ÉÓã©£¬Ï൱ÓÚÿ¸öÇëÇó¶¼ÐèÒªÔÚServerÖ®¼äǿһÖ£¬¶øP£¨·ÖÇø£©»áµ¼ÖÂͬ²½Ê±¼äÎÞÏÞÑÓ³¤£¬Èç´ËCPÒ²ÊÇ¿ÉÒÔ±£Ö¤µÄ¡£ºÜ¶à´«Í³µÄÊý¾Ý¿â·Ö²¼Ê½ÊÂÎñ¶¼ÊôÓÚÕâÖÖģʽ¡£
AP without C
Òª¸ß¿ÉÓò¢ÔÊÐí·ÖÇø£¬ÔòÐè·ÅÆúÒ»ÖÂÐÔ¡£Ò»µ©·ÖÇø·¢Éú£¬½ÚµãÖ®¼ä¿ÉÄÜ»áʧȥÁªÏµ£¬ÎªÁ˸߿ÉÓã¬Ã¿¸ö½ÚµãÖ»ÄÜÓñ¾µØÊý¾ÝÌṩ·þÎñ£¬¶øÕâÑù»áµ¼ÖÂÈ«¾ÖÊý¾ÝµÄ²»Ò»ÖÂÐÔ¡£ÏÖÔÚÖÚ¶àµÄNoSQL¶¼ÊôÓÚ´ËÀà¡£
CAPÀíÂÛ¶¨ÒåÁË·Ö²¼Ê½´æ´¢µÄ¸ù±¾ÎÊÌ⣬µ«²¢Ã»ÓÐÖ¸³öÒ»ÖÂÐԺͿÉÓÃÐÔÖ®¼äµ½µ×Ó¦¸ÃÈçºÎȨºâ¡£ÓÚÊdzöÏÖÁËBASEÀíÂÛ£¬¸ø³öÁËȨºâAÓëCµÄÒ»ÖÖ¿ÉÐз½°¸¡£
2.3 ȨºâÒ»ÖÂÐÔÓë¿ÉÓÃÐÔ - BASEÀíÂÛ
Base = Basically Available + Soft state + Eventuallyconsistent
»ù±¾¿ÉÓÃÐÔ+Èí״̬+×îÖÕÒ»ÖÂÐÔ£¬ÓÉeBay¼Ü¹¹Ê¦DanPritchettÌá³ö¡£BaseÊǶÔCAPÖÐÒ»ÖÂÐÔAºÍ¿ÉÓÃÐÔCȨºâµÄ½á¹û£¬Ô´ÓÚÌá³öÕß×Ô¼ºÔÚ´ó¹æÄ£·Ö²¼Ê½ÏµÍ³ÉÏʵ¼ùµÄ×ܽᡣºËÐÄ˼ÏëÊÇÎÞ·¨×öµ½Ç¿Ò»ÖÂÐÔ£¬µ«Ã¿¸öÓ¦Óö¼¿ÉÒÔ¸ù¾Ý×ÔÉíµÄÌØµã£¬²ÉÓÃÊʵ±·½Ê½´ïµ½×îÖÕÒ»ÖÂÐÔ¡£
BA - Basically Available - »ù±¾¿ÉÓÃ
»ù±¾¿ÉÓá£ÕâÀïÊÇÖ¸·Ö²¼Ê½ÏµÍ³ÔÚ³öÏÖ¹ÊÕϵÄʱºò£¬ÔÊÐíËðʧ²¿·Ö¿ÉÓÃÐÔ£¬¼´±£Ö¤ºËÐŦÄÜ»òÕßµ±Ç°×îÖØÒª¹¦ÄÜ¿ÉÓ᣶ÔÓÚÓû§À´Ëµ£¬ËûÃǵ±Ç°×î¹Ø×¢µÄ¹¦ÄÜ»òÕß×î³£ÓõŦÄܵĿÉÓÃÐÔ½«»á»ñµÃ±£Ö¤£¬µ«ÊÇÆäËû¹¦ÄܻᱻÏ÷Èõ¡£
S ¨C Soft State - Èí״̬
ÔÊÐíϵͳÊý¾Ý´æÔÚÖмä״̬£¬µ«²»»áÓ°Ï쵽ϵͳµÄÕûÌå¿ÉÓÃÐÔ£¬¼´ÔÊÐíϵͳÔÚ²»Í¬½ÚµãµÄÊý¾Ý¸±±¾Ö®¼ä½øÐÐÊý¾Ýͬ²½Ê±´æÔÚÑÓʱ¡£
E - Eventually Consistent - ×îÖÕÒ»ÖÂÐÔ
ÒªÇóϵͳÊý¾Ý¸±±¾×îÖÕÄܹ»Ò»Ö£¬¶ø²»ÐèҪʵʱ±£Ö¤Êý¾Ý¸±±¾Ò»Ö¡£×îÖÕÒ»ÖÂÐÔÊÇÈõÒ»ÖÂÐÔµÄÒ»ÖÖÌØÊâÇé¿ö¡£×îÖÕÒ»ÖÂÐÔÓÐ5¸ö±äÖÖ£º
1.Òò¹ûÒ»ÖÂÐÔ
2.¶Á¼ºÖ®Ëùд(Òò¹ûÒ»ÖÂÐÔÌØÀý)
3.»á»°Ò»ÖÂÐÔ
4.µ¥µ÷¶ÁÒ»ÖÂÐÔ
5.µ¥µ÷дһÖÂÐÔ
3.·Ö²¼Ê½´æ´¢Ëã·¨
3.1Ò»ÖÂÐÔËã·¨ ¨C Paxos
Paxos Ëã·¨½â¾öµÄÎÊÌâÊÇÒ»¸ö·Ö²¼Ê½ÏµÍ³ÈçºÎ¾Íij¸öÖµ£¨¾öÒ飩´ï³ÉÒ»Ö¡£Ò»¸öµäÐ͵ij¡¾°ÊÇ£¬ÔÚÒ»¸ö·Ö²¼Ê½Êý¾Ý¿âϵͳÖУ¬Èç¹û¸÷½ÚµãµÄ³õʼ״̬һÖ£¬Ã¿¸ö½ÚµãÖ´ÐÐÏàͬµÄ²Ù×÷ÐòÁУ¬ÄÇôËûÃÇ×îºóÄܵõ½Ò»¸öÒ»ÖµÄ״̬¡£Îª±£Ö¤Ã¿¸ö½ÚµãÖ´ÐÐÏàͬµÄÃüÁîÐòÁУ¬ÐèÒªÔÚÿһÌõÖ¸ÁîÉÏÖ´ÐÐÒ»¸ö¡°Ò»ÖÂÐÔËã·¨¡±ÒÔ±£Ö¤Ã¿¸ö½Úµã¿´µ½µÄÖ¸ÁîÒ»Ö¡£Ò»¸öͨÓõÄÒ»ÖÂÐÔËã·¨¿ÉÒÔÓ¦ÓÃÔÚÐí¶à³¡¾°ÖУ¬ÊÇ·Ö²¼Ê½¼ÆËãÖеÄÖØÒªÎÊÌâ¡£Òò´Ë´Ó20ÊÀ¼Í80Äê´úÆð¶ÔÓÚÒ»ÖÂÐÔËã·¨µÄÑо¿¾ÍûÓÐÍ£Ö¹¹ý¡£½ÚµãͨÐÅ´æÔÚÁ½ÖÖÄ£ÐÍ£º¹²ÏíÄڴ棨Shared
memory£©ºÍÏûÏ¢´«µÝ£¨Messages passing£©¡£Paxos Ëã·¨¾ÍÊÇÒ»ÖÖ»ùÓÚÏûÏ¢´«µÝÄ£Ð͵ÄÒ»ÖÂÐÔËã·¨¡£
²»½ö½öÊÇÔÚ·Ö²¼Ê½ÏµÍ³ÖУ¬·²ÊǶà¸ö¹ý³ÌÐèÒª´ï³ÉijÖÖÒ»Öµij¡ºÏ¶¼¿ÉÒÔʹÓÃPaxos Ëã·¨¡£Ò»ÖÂÐÔËã·¨¿ÉÒÔͨ¹ý¹²ÏíÄڴ棨ÐèÒªËø£©»òÕßÏûÏ¢´«µÝʵÏÖ£¬Paxos
Ëã·¨²ÉÓõÄÊǺóÕß¡£Paxos Ëã·¨ÊÊÓõļ¸ÖÖÇé¿ö£ºÒ»Ì¨»úÆ÷Öжà¸ö½ø³Ì/Ï̴߳ï³ÉÊý¾ÝÒ»Ö£»·Ö²¼Ê½Îļþϵͳ»òÕß·Ö²¼Ê½Êý¾Ý¿âÖжà¿Í»§¶Ë²¢·¢¶ÁдÊý¾Ý£»·Ö²¼Ê½´æ´¢Öжà¸ö¸±±¾ÏìÓ¦¶ÁдÇëÇóµÄÒ»ÖÂÐÔ¡£
3.2·ÖÇø£¨Partitioning£©
ÔÀ´ËùÓеÄÊý¾Ý¶¼ÊÇÔÚÒ»¸öÊý¾Ý¿âÉϵģ¬ÍøÂçIO¼°ÎļþIO¶¼¼¯ÖÐÔÚÒ»¸öÊý¾Ý¿âÉϵģ¬Òò´ËCPU¡¢ÄÚ´æ¡¢ÎļþIO¡¢ÍøÂçIO¶¼¿ÉÄÜ»á³ÉΪϵͳƿ¾±¡£¶ø·ÖÇøµÄ·½°¸¾ÍÊǰÑijһ¸ö±í»òij¼¸¸öÏà¹ØµÄ±íµÄÊý¾Ý·ÅÔÚÒ»¸ö¶ÀÁ¢µÄÊý¾Ý¿âÉÏ£¬ÕâÑù¾Í¿ÉÒÔ°ÑCPU¡¢ÄÚ´æ¡¢ÎļþIO¡¢ÍøÂçIO·Ö½âµ½¶à¸ö»úÆ÷ÖУ¬´Ó¶øÌáÉýϵͳ´¦ÀíÄÜÁ¦¡£
3.3·ÖƬ£¨Replication£©
·ÖÇøÓÐÁ½ÖÖģʽ£¬Ò»ÖÖÊÇÖ÷´Óģʽ£¬ÓÃÓÚ×ö¶Áд·ÖÀ룻ÁíÍâÒ»ÖÖģʽÊÇ·ÖÆ¬Ä£Ê½£¬Ò²¾ÍÊÇ˵°ÑÒ»¸ö±íÖеÄÊý¾Ý·Ö½âµ½¶à¸ö±íÖС£Ò»¸ö·ÖÇøÖ»ÄÜÊÇÆäÖеÄÒ»ÖÖģʽ¡£
3.4Ò»ÖÂÐÔ¹þÏ££¨Consistent Hashing£©
Ò»ÖÂÐÔ¹þÏ£Ëã·¨ÊÇ·Ö²¼Ê½ÏµÍ³Öг£ÓõÄËã·¨¡£±ÈÈ磬һ¸ö·Ö²¼Ê½µÄ´æ´¢ÏµÍ³£¬Òª½«Êý¾Ý´æ´¢µ½¾ßÌåµÄ½ÚµãÉÏ£¬Èç¹û²ÉÓÃÆÕͨµÄhash·½·¨£¬½«Êý¾ÝÓ³Éäµ½¾ßÌåµÄ½ÚµãÉÏ£¬Èçkey%N£¬keyÊÇÊý¾ÝµÄkey£¬NÊÇ»úÆ÷½ÚµãÊý£¬Èç¹ûÓÐÒ»¸ö»úÆ÷¼ÓÈë»òÍ˳öÕâ¸ö¼¯Èº£¬ÔòËùÓеÄÊý¾ÝÓ³Éä¶¼ÎÞЧÁË£¬Èç¹ûÊdz־û¯´æ´¢ÔòÒª×öÊý¾ÝÇ¨ÒÆ£¬Èç¹ûÊÇ·Ö²¼Ê½»º´æ£¬ÔòÆäËû»º´æ¾ÍʧЧÁË¡£
Ò»ÖÂÐÔ¹þÏ£»ù±¾½â¾öÁËÔÚP2P»·¾³ÖÐ×îΪ¹Ø¼üµÄÎÊÌ⡪¡ªÈçºÎÔÚ¶¯Ì¬µÄÍøÂçÍØÆËÖзֲ¼´æ´¢ºÍ·ÓÉ¡£Ã¿¸ö½Úµã½öÐèά»¤ÉÙÁ¿ÏàÁÚ½ÚµãµÄÐÅÏ¢£¬²¢ÇÒÔÚ½Úµã¼ÓÈë/Í˳öϵͳʱ£¬½öÓÐÏà¹ØµÄÉÙÁ¿½Úµã²ÎÓëµ½ÍØÆËµÄά»¤ÖС£ËùÓÐÕâÒ»ÇÐʹµÃÒ»ÖÂÐÔ¹þÏ£³ÉΪµÚÒ»¸öʵÓõÄDHTËã·¨¡£
4.NoSQLµÄÓŵã/ȱµã
Óŵã
1.Ò×À©Õ¹
2.¸ßÐÔÄÜ
3.Êý¾ÝÀàÐÍÁé»î
4.¸ß¿ÉÓÃ
ȱµã
1.ûÓбê×¼
2.ûÓд洢¹ý³Ì
3.²»Ö§³Ösql
4.¹¦Äܲ»¹»ÍêÉÆ
4.1Óŵã
Ò×À©Õ¹
NoSQLÊý¾Ý¿âÖÖÀà·±¶à£¬µ«ÊÇÓÐÒ»¸ö¹²Í¬µÄÌØµã£¬¶¼ÊÇÈ¥µôÁ˹ØÏµÐÍÊý¾Ý¿âµÄ¹ØÏµÐÍÌØÐÔ¡£Êý¾ÝÖ®¼äÎÞ¹ØÏµ£¬ÕâÑù¾Í·Ç³£ÈÝÒ×À©Õ¹¡£Ò²ÎÞÐÎÖ®¼ä£¬Ôڼܹ¹µÄ²ãÃæÉÏ´øÀ´ÁË¿ÉÀ©Õ¹µÄÄÜÁ¦¡£
´óÊý¾ÝÁ¿£¬¸ßÐÔÄÜ
NoSQLÊý¾Ý¿â¶¼¾ßÓзdz£¸ßµÄ¶ÁдÐÔÄÜ£¬ÓÈÆäÔÚ´óÊý¾ÝÁ¿Ï£¬Í¬Ñù±íÏÖÓÅÐã¡£ÕâµÃÒæÓÚËüµÄÎÞ¹ØÏµÐÔ£¬Êý¾Ý¿âµÄ½á¹¹¼òµ¥¡£Ò»°ãMySQLʹÓÃQuery
Cache£¬Ã¿´Î±í¸üÐÂCache¾ÍʧЧ£¬ÊÇÒ»ÖÖ´óÁ£¶ÈµÄCache£¬Õë¶Ôweb2.0µÄ½»»¥Æµ·±µÄÓ¦Óã¬CacheÐÔÄܲ»¸ß¡£¶øNoSQLµÄCacheÊǼǼ¼¶µÄ£¬ÊÇÒ»ÖÖϸÁ£¶ÈµÄCache£¬ËùÒÔNoSQLÔÚÕâ¸ö²ãÃæÉÏÀ´ËµÐÔÄܾÍÒª¸ßºÜ¶àÁË¡£
Áé»îµÄÊý¾ÝÄ£ÐÍ
NoSQLÎÞÐèÊÂÏÈΪҪ´æ´¢µÄÊý¾Ý½¨Á¢×ֶΣ¬ËæÊ±¿ÉÒÔ´æ´¢×Ô¶¨ÒåµÄÊý¾Ý¸ñʽ¡£¶øÔÚ¹ØÏµÐÍÊý¾Ý¿âÀÔöɾ×Ö¶ÎÊÇÒ»¼þ·Ç³£Âé·³µÄÊÂÇé¡£Èç¹ûÊǷdz£´óÊý¾ÝÁ¿µÄ±í£¬Ôö¼Ó×ֶμòÖ±¾ÍÊÇÒ»¸öجÃΡ£ÕâµãÔÚ´óÊý¾ÝÁ¿µÄweb2.0ʱ´úÓÈÆäÃ÷ÏÔ¡£
¸ß¿ÉÓÃ
NoSQLÔÚ²»Ì«Ó°ÏìÐÔÄܵÄÇé¿öÏ£¬¾Í¿ÉÒÔ·½±ãµØÊµÏָ߿ÉÓõļܹ¹¡£±ÈÈçCassandra¡¢HBaseÄ£ÐÍ£¬Í¨¹ý¸´ÖÆÄ£ÐÍÒ²ÄÜʵÏָ߿ÉÓá£
4.1ȱµã
ûÓбê×¼
ûÓжÔNoSQLÊý¾Ý¿â¶¨ÒåµÄ±ê×¼£¬ËùÒÔûÓÐÁ½¸öNoSQLÊý¾Ý¿âÊÇÆ½µÈµÄ¡£
ûÓд洢¹ý³Ì
NoSQLÊý¾Ý¿âÖдó¶àûÓд洢¹ý³Ì¡£
²»Ö§³ÖSQL
NoSQL´ó¶à²»Ìṩ¶ÔSQLµÄÖ§³Ö£ºÈç¹û²»Ö§³ÖSQLÕâÑùµÄ¹¤Òµ±ê×¼£¬½«»á¶ÔÓû§²úÉúÒ»¶¨µÄѧϰºÍÓ¦ÓÃÇ¨ÒÆÉϵijɱ¾¡£
Ö§³ÖµÄÌØÐÔ²»¹»·á¸»£¬²úÆ·²»¹»³ÉÊì
ÏÖÓвúÆ·ËùÌṩµÄ¹¦Äܶ¼±È½ÏÓÐÏÞ£¬²»ÏñMS SQL ServerºÍOracleÄÇÑùÄÜÌṩ¸÷ÖÖ¸½¼Ó¹¦ÄÜ£¬±ÈÈçBIºÍ±¨±íµÈ¡£´ó¶àÊý²úÆ·¶¼»¹´¦ÓÚ³õ´´ÆÚ£¬ºÍ¹ØÏµÐÍÊý¾Ý¿â¼¸Ê®ÄêµÄÍêÉÆ²»¿ÉͬÈÕ¶øÓï¡£
NoSQLÓëSQLµÄ¶Ô±È
RDBMSNoSQL
ģʽԤ¶¨ÒåµÄģʽûÓÐÔ¤¶¨ÒåµÄģʽ
²éѯÓïÑԽṹ»¯²éѯÓïÑÔ£¨SQL£©Ã»ÓÐÉùÃ÷ÐÔ²éѯÓïÑÔ
Ò»ÖÂÐÔÑϸñµÄÒ»ÖÂÐÔ×îÖÕÒ»ÖÂÐÔ
ÊÂÎñÖ§³Ö²»Ö§³Ö
ÀíÂÛ»ù´¡ACIDCAP, BASE
À©Õ¹×ÝÏòÀ©Õ¹ºáÏòÀ©Õ¹(·Ö²¼Ê½)
NoSQLÊý¾Ý¿âµÄ·ÖÀà

1.¼üÖµ(Key-Value)´æ´¢Êý¾Ý¿â
ÕâÒ»ÀàÊý¾Ý¿âÖ÷Òª»áʹÓõ½¹þÏ£±í£¬ÔÚÕâ¸ö±íÖÐÓÐÒ»¸öÌØ¶¨µÄ¼üºÍÒ»¸öÖ¸ÕëÖ¸ÏòÌØ¶¨µÄÊý¾Ý¡£Key/valueÄ£ÐͶÔÓÚITϵͳÀ´ËµÓÅÊÆÔÚÓÚ¼òµ¥¡¢Òײ¿Êð¡£µ«ÊÇÈç¹ûDBAÖ»¶Ô²¿·ÖÖµ½øÐвéѯ»ò¸üеÄʱºò£¬Key/value¾ÍÏÔµÃЧÂʵÍÏÂÁË¡£
E. g:
TokyoCabinet/Tyrant
Redis
Voldemort
OracleBDB
Áд洢Êý¾Ý¿â
Õⲿ·ÖÊý¾Ý¿âͨ³£ÊÇÓÃÀ´Ó¦¶Ô·Ö²¼Ê½´æ´¢µÄº£Á¿Êý¾Ý¡£¼üÈÔÈ»´æÔÚ£¬µ«ÊÇËüÃǵÄÌØµãÊÇÖ¸ÏòÁ˶à¸öÁС£ÕâЩÁÐÊÇÓÉÁмÒ×åÀ´°²Åŵġ£
E. g:
Cassandra
HBase
Riak
ÎĵµÐÍÊý¾Ý¿â
ÎĵµÐÍÊý¾Ý¿âµÄÁé¸ÐÀ´×ÔÓÚLotus Notes°ì¹«Èí¼þ£¬ËüͬµÚÒ»ÖÖ¼üÖµ´æ´¢ÏàÀàËÆ¡£¸ÃÀàÐ͵ÄÊý¾ÝÄ£ÐÍÊǰ汾»¯µÄÎĵµ£¬°ë½á¹¹»¯µÄÎĵµÒÔÌØ¶¨µÄ¸ñʽ´æ´¢£¬±ÈÈçJSON¡£ÎĵµÐÍÊý¾Ý¿â¿ÉÒÔ¿´×÷ÊǼüÖµÊý¾Ý¿âµÄÉý¼¶°æ£¬ÔÊÐíÖ®¼äǶÌ×¼üÖµ¡£¶øÇÒÎĵµÐÍÊý¾Ý¿â±È¼üÖµÊý¾Ý¿âµÄ²éѯЧÂʸü¸ß¡£
E. g:
CouchDB
MongoDB
SequoiaDB
ͼÐÎ(Graph)Êý¾Ý¿â
ͼÐνṹµÄÊý¾Ý¿âͬÆäËüÐÐÁÐÒÔ¼°¸ÕÐԽṹµÄSQLÊý¾Ý¿â²»Í¬£¬ËüÊÇʹÓÃÁé»îµÄͼÐÎÄ£ÐÍ£¬²¢ÇÒÄܹ»À©Õ¹µ½¶à¸ö·þÎñÆ÷ÉÏ¡£NoSQLÊý¾Ý¿âûÓбê×¼µÄ²éѯÓïÑÔ(SQL)£¬Òò´Ë½øÐÐÊý¾Ý¿â²éѯÐèÒªÖÆ¶¨Êý¾ÝÄ£ÐÍ¡£Ðí¶àNoSQLÊý¾Ý¿â¶¼ÓÐRESTʽµÄÊý¾Ý½Ó¿Ú»òÕß²éѯAPI¡£
E. g:
Neo4J
InfoGrid
InfiniteGraph
Ö÷Á÷NoSQLÊý¾Ý¿â½éÉܼ°ÆäÊÊÓó¡¾°

1. Redis
1.1 ½éÉÜ
RedisÊÇÒ»¸ö¿ªÔ´µÄʹÓÃANSI CÓïÑÔ±àд¡¢Ö§³ÖÍøÂç¡¢¿É»ùÓÚÄÚ´æÒà¿É³Ö¾Ã»¯µÄÈÕÖ¾ÐÍ¡¢Key-ValueÊý¾Ý¿â£¬²¢Ìṩ¶àÖÖÓïÑÔµÄAPI¡£´Ó2010Äê3ÔÂ15ÈÕÆð£¬RedisµÄ¿ª·¢¹¤×÷ÓÉVMwareÖ÷³Ö¡£´Ó2013Äê5Ô¿ªÊ¼£¬RedisµÄ¿ª·¢ÓÉPivotalÔÞÖú¡£
1.2 ÊÊÓó¡¾°
Êý¾Ý±ä»¯½ÏÉÙ£¬Ö´ÐÐÔ¤¶¨Òå²éѯ£¬½øÐÐÊý¾Ýͳ¼ÆµÄÓ¦ÓóÌÐò
ÐèÒªÌṩÊý¾Ý°æ±¾Ö§³ÖµÄÓ¦ÓóÌÐò
ÀýÈ磺¹ÉƱ¼Û¸ñ¡¢Êý¾Ý·ÖÎö¡¢ÊµÊ±Êý¾ÝËѼ¯¡¢ÊµÊ±Í¨Ñ¶¡¢·Ö²¼Ê½»º´æ
2. MongoDB
2.1 ½éÉÜ
MongoDB ÊÇÒ»¸ö»ùÓÚ·Ö²¼Ê½Îļþ´æ´¢µÄÊý¾Ý¿â¡£ÓÉ C++ ÓïÑÔ±àд¡£Ö¼ÔÚΪ WEB Ó¦ÓÃÌṩ¿ÉÀ©Õ¹µÄ¸ßÐÔÄÜÊý¾Ý´æ´¢½â¾ö·½°¸¡£
MongoDB ÊÇÒ»¸ö½éÓÚ¹ØÏµÐÍÊý¾Ý¿âºÍ·Ç¹ØÏµÐÍÊý¾Ý¿âÖ®¼äµÄ²úÆ·£¬ÊǷǹØÏµÐÍÊý¾Ý¿âµ±Öй¦ÄÜ×î·á¸»£¬×îÏñ¹ØÏµÐÍÊý¾Ý¿âµÄ·Ç¹ØÏµÐÍÊý¾Ý¿â¡£
2.2 ÊÊÓó¡¾°
ÐèÒª¶¯Ì¬²éѯ֧³Ö
ÐèҪʹÓÃË÷Òý¶ø²»ÊÇ map/reduce¹¦ÄÜ
ÐèÒª¶Ô´óÊý¾Ý¿âÓÐÐÔÄÜÒªÇó
ÐèҪʹÓà CouchDBµ«ÒòΪÊý¾Ý¸Ä±ä̫Ƶ·±¶øÕ¼ÂúÄÚ´æ
3.Neo4j
3.1 ½éÉÜ
Neo4jÊÇÒ»¸ö¸ßÐÔÄܵÄNoSQLͼÐÎÊý¾Ý¿â£¬Ëü½«½á¹¹»¯Êý¾Ý´æ´¢ÔÚÍøÂçÉ϶ø²»ÊDZíÖС£ËüÊÇÒ»¸öǶÈëʽµÄ¡¢»ùÓÚ´ÅÅ̵ġ¢¾ß±¸ÍêÈ«µÄÊÂÎñÌØÐÔµÄJava³Ö¾Ã»¯ÒýÇæ£¬µ«ÊÇËü½«½á¹¹»¯Êý¾Ý´æ´¢ÔÚÍøÂç(´ÓÊýѧ½Ç¶È½Ð×öͼ)É϶ø²»ÊDZíÖС£Neo4jÒ²¿ÉÒÔ±»¿´×÷ÊÇÒ»¸ö¸ßÐÔÄܵÄͼÒýÇæ£¬¸ÃÒýÇæ¾ßÓгÉÊìÊý¾Ý¿âµÄËùÓÐÌØÐÔ¡£
3.2 ÊÊÓó¡¾°
ÊÊÓÃÓÚͼÐÎÒ»ÀàÊý¾Ý
ÕâÊÇ Neo4jÓëÆäËûNoSQLÊý¾Ý¿âµÄ×îÏÔÖøÇø±ð
ÀýÈ磺Éç»á¹ØÏµ£¬¹«¹²½»Í¨ÍøÂ磬µØÍ¼¼°ÍøÂçÍØÆ×
4.Cassandra
4.1 ½éÉÜ
Apache Cassandra ÊÇÒ»Ì׿ªÔ´·Ö²¼Ê½ Key-Value ´æ´¢ÏµÍ³¡£Ëü×î³õÓÉ Facebook
¿ª·¢£¬ÓÃÓÚ´¢´æÌرð´óµÄÊý¾Ý¡£ Cassandra ²»ÊÇÒ»¸öÊý¾Ý¿â£¬ËüÊÇÒ»¸ö»ìºÏÐ͵ķǹØÏµµÄÊý¾Ý¿â£¬ÀàËÆÓÚGoogle
µÄ BigTable¡£Cassandra µÄÊý¾ÝÄ£ÐÍÊÇ»ùÓÚÁÐ×壨Column Family£©µÄËÄά»òÎåάģÐÍ¡£
4.2ÊÊÓó¡¾°
ÒøÐÐÒµ£¬½ðÈÚÒµ
д±È¶Á¸ü¿ì
5. HBase
5.1 ½éÉÜ
HBaseÊÇÒ»¸ö·Ö²¼Ê½µÄ¡¢ÃæÏòÁеĿªÔ´Êý¾Ý¿â£¬¸Ã¼¼ÊõÀ´Ô´ÓÚGoogleÂÛÎÄ¡°Bigtable£ºÒ»¸ö½á¹¹»¯Êý¾ÝµÄ·Ö²¼Ê½´æ´¢ÏµÍ³¡±¡£¾ÍÏñBigtableÀûÓÃÁËGoogleÎļþϵͳ£¨File
System£©ËùÌṩµÄ·Ö²¼Ê½Êý¾Ý´æ´¢Ò»Ñù£¬HBaseÔÚHadoopÖ®ÉÏÌṩÁËÀàËÆÓÚBigtableµÄÄÜÁ¦¡£ËüÊÇÒ»¸öÊʺÏÓڷǽṹ»¯Êý¾Ý´æ´¢µÄÊý¾Ý¿â¡£ÁíÒ»¸ö²»Í¬µÄÊÇHBase»ùÓÚÁеĶø²»ÊÇ»ùÓÚÐеÄģʽ¡£
5.2ÊÊÓó¡¾°
¶Ô´óÊý¾Ý½øÐÐËæ»ú¡¢ÊµÊ±·ÃÎʵij¡ºÏ
ÀýÈ磺 FacebookÏûÏ¢Êý¾Ý¿â
6.CouchDB
6.1 ½éÉÜ
CouchDB ÊÇÒ»¸ö¿ªÔ´µÄÃæÏòÎĵµµÄÊý¾Ý¿â¹ÜÀíϵͳ£¬¿ÉÒÔͨ¹ý RESTful JavaScript
Object Notation (JSON) API ·ÃÎÊ¡£ÊõÓï ¡°Couch¡± ÊÇ ¡°Cluster
Of Unreliable CommodityHardware¡± µÄÊ××ÖĸËõд£¬Ëü·´Ó³ÁË CouchDB
µÄÄ¿±ê¾ßÓи߶ȿÉÉìËõÐÔ£¬ÌṩÁ˸߿ÉÓÃÐԺ͸߿ɿ¿ÐÔ£¬¼´Ê¹ÔËÐÐÔÚÈÝÒ׳öÏÖ¹ÊÕϵÄÓ²¼þÉÏÒ²ÊÇÈç´Ë¡£
6.2ÊÊÓó¡¾°
Êý¾Ý±ä»¯½ÏÉÙ£¬Ö´ÐÐÔ¤¶¨Òå²éѯ£¬½øÐÐÊý¾Ýͳ¼ÆµÄÓ¦ÓóÌÐò
ÐèÒªÌṩÊý¾Ý°æ±¾Ö§³ÖµÄÓ¦ÓóÌÐò¡£
ÀýÈ磺 CRM¡¢CMSϵͳ¡£ master-master¸´ÖƶÔÓÚ¶àÕ¾µã²¿ÊðÊǷdz£ÓÐÓõġ£
NoSQLÓÅÐãÓ¦ÓÃʵÀý
1. ÐÂÀË΢²© - Redis
ÐÂÀË΢²©´Ó¼¼ÊõÉÏÀ´Ëµ£¬Ã¿ÌìÓû§·¢±í΢²©ÌرðÈÝÒ×£¬ÕâÔì³ÉÿÌìÐÂÔöµÄÊý¾ÝÁ¿¶¼ÊǰÙÍò¼¶¡¢ÉÏǧÍò¼¶µÄÕâÑùÒ»¸öÁ¿¡£Äã¾³£ÒªÃæ¶ÔµÄÒ»¸öÎÊÌâ¾ÍÊÇÔö¼Ó·þÎñÆ÷£¬ÒòΪһ°ãһ̨MySQL·þÎñÆ÷£¬Ëü¿ÉÄÜÖ§³ÅµÄ¹æÄ£Ò²¾ÍÊǼ¸Ç§Íò£¬»òÕß˵¸´ÔÓÒ»µãÖ»Óм¸°ÙÍò£¬ÕâÑù£¬¿ÉÄÜÿÌì¶¼ÒªÔö¼Ó·þÎñÆ÷£¬´Ó¶ø½â¾öËùÄãÃæ¶ÔµÄÕâЩÎÊÌâ¡£
ĿǰÐÂÀË΢²©ÊÇRedisÈ«Çò×î´óµÄÓû§£¬ÔÚÐÂÀËÓÐ200¶ą̀ÎïÀí»ú£¬400¶à¸ö¶Ë¿ÚÕýÔÚÔËÐÐ×ÅRedis,
ÓÐ4GµÄÊý¾ÝÅÜÔÚRedisÉÏÀ´ÎªÎ¢²©Óû§Ìṩ·þÎñ¡£
ÐÂÀË΢²©ÃæÁÙµÄÎÊÌâÈçÏ£º
Êý¾Ý½á¹¹(Data Structure)ÐèÇóÔ½À´Ô½¶à, µ«memcacheÖÐûÓÐ, Ó°Ï쿪·¢Ð§ÂÊ
Ëæ×ŶÁ²Ù×÷µÄÁ¿µÄÉÏÉý£¬ÐÔÄÜÎÊÌâÐèÒª½â¾ö£¬¾ÀúµÄ¹ý³ÌÓÐ:
Êý¾Ý¿â¶Áд·ÖÀë(M/S)-->Êý¾Ý¿âʹÓöà¸öSlave-->Ôö¼ÓCache (memcache)-->תµ½Redis
½â¾öдµÄÎÊÌ⣺
ˮƽ²ð·Ö£¬¶Ô±íµÄ²ð·Ö£¬½«ÓеÄÓû§·ÅÔÚÕâ¸ö±í£¬ÓеÄÓû§·ÅÔÚÁíÍâÒ»¸ö±í¡£
¿É¿¿ÐÔÐèÇó
CacheµÄ"Ñ©±À"ÎÊÌâÄÑÒÔ½â¾ö£¬ÃæÁÙ×Å¿ìËÙ»Ö¸´µÄÌôÕ½¡£
¿ª·¢³É±¾ÐèÇó
CacheºÍDBµÄÒ»ÖÂÐÔά»¤³É±¾Ô½À´Ô½¸ß£¬µ«¿ª·¢ÐèÒª¸úÉϲ»¶ÏÓ¿ÈëµÄ²úÆ·ÐèÇó¡£ÇÒÓ²¼þ³É±¾×î¹óµÄ¾ÍÊÇÊý¾Ý¿â²ãÃæµÄ»úÆ÷£¬»ù±¾ÉϱÈǰ¶ËµÄ»úÆ÷Òª¹ó¼¸±¶£¬Ö÷ÒªÊÇIOÃܼ¯ÐÍ£¬ºÜºÄÓ²¼þ¡£
ά»¤ÐÔ¸´ÔÓ
Ò»ÖÂÐÔά»¤³É±¾Ô½À´Ô½¸ß
BerkeleyDBʹÓÃBÊ÷£¬»áһֱдеģ¬ÄÚ²¿²»»áÓÐÎļþÖØÐÂ×éÖ¯£»ÕâÑù»áµ¼ÖÂÎļþÔ½À´Ô½´ó£»´óµÄʱºòÐèÒª½øÐÐÎļþ¹éµµ£¬¹éµµµÄ²Ù×÷Òª¶¨ÆÚ×ö£¬ÕâÑù£¬¾ÍÐèÒªÓÐÒ»¶¨µÄdown
time¡£
»ùÓÚÒÔÉÏ¿¼ÂÇ£¬ÐÂÀË΢²©Ñ¡ÔñÁËRedis¡£
ÔÚÐÂÀËNoSQLºÍMySQLÔÚ´ó¶àÊýÇé¿öÏÂÊǽáºÏʹÓõ쬏ù¾ÝÓ¦ÓõÄÌØµãÑ¡ÔñºÏÊʵĴ洢·½Ê½¡£Æ©È磺¹ØÏµÐÍÊý¾Ý£¬ÀýÈ磺Ë÷ÒýʹÓÃMySQL´æ´¢£»·Ç¹ØÏµÐÍÊý¾Ý£¬ÀýÈ磺һЩK/VÐèÇóµÄ£¬¶Ô²¢·¢ÒªÇó±È½Ï¸ßµÄ·ÅÈëRedis´æ´¢¡£
ÐÂÀË΢²©ÍŶÓͨ¹ýÐÞ¸ÄRedisÔ´ÂëÂú×ã×Ô¼ºµÄÒµÎñÐèÇó£ºÍêÉÆËüµÄreplication»úÖÆ£¬¼ÓÈëpositionµÄ¸ÅÄÈÃά»¤¸üÈÝÒ×£¬Í¬Ê±failoverÄÜÁ¦Ò²´ó´óÔöÇ¿¡£¸ÄÉÆHashsetÔÚRDBÀïÃæµÄ´æ´¢·½Ê½£¬ÌáÉý¸´ÔÓÊý¾ÝÀàÐ͵ļÓÔØËÙ¶È¡£

ÒµÎñ³¡¾°ÈçÏ£º
1. ÒµÎñʹÓ÷½Ê½£º
hash sets: ¹Ø×¢Áбí, ·ÛË¿Áбí, Ë«Ïò¹Ø×¢Áбí(key-value(field), ÅÅÐò)
string(counter): ΢²©Êý, ·ÛË¿Êý, ...(±ÜÃâÁËselect count(*)
from ...)
sort sets(×Ô¶¯ÅÅÐò): TopN, ÈÈÃÅ΢²©µÈ, ×Ô¶¯ÅÅÐò
lists(queue): push/subÌáÐÑ,...
ÉÏÊöËÄÖÖ, ´Ó¾«Ï¸»¯¿ØÖÆ·½Ã棬hash setsºÍstring(counter)ÍÆ¼öʹÓÃ, sort
setsºÍlists(queue)²»ÍƼöʹÓÃ
»¹¿Éͨ¹ý¶þ´Î¿ª·¢£¬½øÐо«¼ò¡£±ÈÈç: ´æ´¢×Ö·û¸ÄΪ´æ´¢ÕûÐÎ, 16ÒÚÊý¾Ý,Ö»ÐèÒª16GÄÚ´æ
´æ´¢ÀàÐͱ£´æÔÚ3ÖÖÒÔÄÚ£¬½¨Òé²»Òª³¬¹ý3ÖÖ£»
½«memcache +mysql Ìæ»»ÎªRedis£º
Redis×÷Ϊ´æ´¢²¢Ìṩ²éѯ£¬ºǫ́²»ÔÙʹÓÃmysql£¬½â¾öÊý¾Ý¶à·ÝÖ®¼äµÄÒ»ÖÂÐÔÎÊÌ⣻
2. ¶Ô´óÊý¾Ý±íµÄ´æ´¢£¨eg£º140×Ö΢²©µÄ´æ´¢£©
Ò»¸ö¿â¾Í´æÎ¨Ò»ÐÔidºÍ140¸ö×Ö£»
ÁíÒ»¸ö¿â´æidºÍÓû§Ãû£¬·¢²¼ÈÕÆÚ¡¢µã»÷ÊýµÈÐÅÏ¢£¬ÓÃÀ´¼ÆËã¡¢ÅÅÐòµÈ£¬µÈ¼ÆËã³ö×îºóÐèҪչʾµÄÊý¾ÝʱÔÙµ½µÚÒ»¸ö¿âÖÐÌáȡ΢²©ÄÚÈÝ£»
3. һЩ¼¼ÇÉ
ºÜ¶àÓ¦ÓÃ, ¿ÉÒÔ³ÐÊÜÊý¾Ý¿âÁ¬½Óʧ°Ü, µ«²»ÄܳÐÊÜ´¦ÀíÂý
Ò»·ÝÊý¾Ý, ¶à·ÝË÷Òý(Õë¶Ô²»Í¬µÄ²éѯ³¡¾°)
½â¾öIOÆ¿¾±µÄΨһ;¾¶: ÓÃÄÚ´æ
ÔÚÊý¾ÝÁ¿±ä»¯²»´óµÄÇé¿öÏ£¬ÓÅÏÈÑ¡ÓÃRedis
4. ÌÔ±¦Êý¾Ýƽ̨ ¨C Oceanbase,Tair£¨¾ùΪ×ÔÑУ©
Êý¾Ý²úÆ·µÄÒ»¸ö×î´óÌØµãÊÇÊý¾ÝµÄ·ÇʵʱдÈ룬ÕýÒòΪÈç´Ë£¬¿ÉÒÔÈÏΪÔÚÒ»¶¨µÄʱ¼ä¶ÎÄÚ£¬Õû¸öϵͳµÄÊý¾ÝÊÇÖ»¶ÁµÄ¡£ÕâΪÉè¼Æ»º´æµì¶¨Á˷dz£ÖØÒªµÄ»ù´¡¡£Ò»Ð©¶ÔʵЧÐÔÒªÇóºÜ¸ßµÄÊý¾Ý£¬ÀýÈçÕë¶ÔËÑË÷´ÊµÄͳ¼ÆÊý¾Ý£¬Ï£ÍûÄܾ¡¿ìÍÆË͵½Êý¾Ý²úƷǰ¶Ë£¬ËùÒÔÔÚÄÚ´æÖÐ×öʵʱ¼ÆË㣬²¢°Ñ¼ÆËã½á¹ûÔÚ¾¡¿ÉÄ̵ܶÄʱ¼äÄÚˢе½
NoSQL´æ´¢É豸ÖУ¬¹©Ç°¶Ë²úÆ·µ÷Óá£
ÌÔ±¦OceanbaseµÄÉè¼ÆÖ®³õ£¬ÊÇÕâÑùµÄ¡£¹«Ë¾Í¨¹ý¶ÔÌÔ±¦µÄÔÚÏß´æ´¢ÐèÇó½øÐзÖÎö·¢ÏÖ£º
ÌÔ±¦µÄÊý¾Ý×ÜÁ¿±È½Ï´ó£¬Î´À´Ò»¶Îʱ¼ä£¬±ÈÈçÎåÄêÖ®ÄÚµÄÊý¾Ý¹æÄ£Îª°ÙTB¼¶±ð£¬Ç§ÒÚÌõ¼Ç¼£¬ÁíÍ⣬Êý¾ÝÅòÕͺܿ죬´«Í³µÄ·Ö¿â·Ö±í¶ÔÒµÎñÔì³ÉºÜ´óµÄѹÁ¦£¬±ØÐëÉè¼Æ×Ô¶¯»¯µÄ·Ö²¼Ê½ÏµÍ³¡£ËùÒÔÓÐÁËÌÔ±¦Oceanbase£¬ËüÒÔÒ»Öֺܼòµ¥µÄ·½Ê½Âú×ãÁËδÀ´Ò»¶Îʱ¼äµÄÔÚÏß´æ´¢ÐèÇ󣬲¢ÇÒ»¹»ñµÃÁËһЩÆäËüÌØÐÔ£¬Èç¸ßЧ֧³Ö¿çÐпç±íÊÂÎñ£¬Õâ¶ÔÓÚÌÔ±¦µÄÒµÎñÊǷdz£ÖØÒªµÄ¡£

OceanBaseÓÉÈçϼ¸¸ö²¿·Ö×é³É£º
¿Í»§¶Ë£ºÓû§Ê¹ÓÃOceanBaseµÄ·½Ê½ºÍMySQLÊý¾Ý¿âÍêÈ«Ïàͬ£¬Ö§³ÖJDBC¡¢ C¿Í»§¶Ë·ÃÎÊ£¬µÈµÈ¡£»ùÓÚMySQLÊý¾Ý¿â¿ª·¢µÄÓ¦ÓóÌÐò¡¢¹¤¾ßÄܹ»Ö±½ÓÇ¨ÒÆµ½OceanBase¡£
RootServer£º¹ÜÀí¼¯ÈºÖеÄËùÓзþÎñÆ÷£¬×Ó±í£¨tablet£©Êý¾Ý·Ö²¼ÒÔ¼°¸±±¾¹ÜÀí¡£ RootServerÒ»°ãΪһÖ÷Ò»±¸£¬Ö÷±¸Ö®¼äÊý¾Ýǿͬ²½¡£
UpdateServer£º´æ´¢OceanBaseϵͳµÄÔöÁ¿¸üÐÂÊý¾Ý¡£UpdateServerÒ»°ãΪһÖ÷Ò»±¸£¬Ö÷±¸Ö®¼ä¿ÉÒÔÅäÖò»Í¬µÄͬ²½Ä£Ê½¡£²¿Êðʱ£¬UpdateServer½ø³ÌºÍRootServer½ø³ÌÍùÍù¹²ÓÃÎïÀí·þÎñÆ÷¡£
ChunkServer£º´æ´¢OceanBaseϵͳµÄ»ùÏßÊý¾Ý¡£»ùÏßÊý¾ÝÒ»°ã´æ´¢Á½·Ý»òÕßÈý·Ý£¬¿ÉÅäÖá£
Merge Server£º½ÓÊÕ²¢½âÎöÓû§µÄSQLÇëÇ󣬾¹ý´Ê·¨·ÖÎö¡¢Óï·¨·ÖÎö¡¢²éѯÓÅ»¯µÈһϵÁвÙ×÷ºóת·¢¸øÏàÓ¦µÄChunkServer»òÕßUpdateServer¡£Èç¹ûÇëÇóµÄÊý¾Ý·Ö²¼ÔÚ¶ą̀ChunkServerÉÏ£¬MergeServer»¹ÐèÒª¶Ô¶ą̀ChunkServer·µ»ØµÄ½á¹û½øÐкϲ¢¡£¿Í»§¶ËºÍMergeServerÖ®¼ä²ÉÓÃÔÉúµÄMySQLͨÐÅÐÒ飬MySQL¿Í»§¶Ë¿ÉÒÔÖ±½Ó·ÃÎÊMergeServer¡£
ÌÔ±¦TairÊÇÓÉÌÔ±¦×ÔÖ÷¿ª·¢µÄKey/Value½á¹¹Êý¾Ý´æ´¢ÏµÍ³£¬²¢ÇÒÓÚ
2010Äê6ÔÂ30ºÅÔÚÌÔ±¦¿ªÔ´Æ½Ì¨ÉÏÕýʽ¶ÔÍ⿪Դ£¬ÔÚÌÔ±¦ÍøÓÐ×Å´ó¹æÄ£µÄÓ¦Óá£Óû§ÔڵǼÌÔ±¦¡¢²é¿´ÉÌÆ·ÏêÇéÒ³Ãæ»òÕßÔÚÌÔ½ºþºÍºÃÓÑ¡°µ·½¬ºý¡±µÄʱºò£¬¶¼ÔÚÖ±½Ó»ò¼ä½ÓµØºÍTair½»»¥¡£ÌÔ±¦½«Tair¿ªÔ´£¬Ï£ÍûÓиü¶àµÄÓû§ÄÜ´ÓÎÒÃÇ¿ª·¢µÄ²úÆ·ÖÐÊÜÒæ£¬¸üÏ£ÍûÒÀÍÐÉçÇøµÄÁ¦Á¿£¬Ê¹TairÓиü¹ãÀ«µÄ·¢Õ¹¿Õ¼ä¡£

Tair µÄ·Ö²¼²ÉÓõÄÊÇÒ»ÖÂÐÔ¹þÏ£Ëã·¨, ¶ÔÓÚËùÓеÄkey, ·Öµ½Q¸öͰÖÐ,
ͰÊǸºÔؾùºâºÍÊý¾ÝÇ¨ÒÆµÄ»ù±¾µ¥Î». config server ¸ù¾ÝÒ»¶¨µÄ²ßÂÔ°Ñÿ¸öͰָÅɵ½²»Í¬µÄdata
serverÉÏ. ÒòΪÊý¾Ý°´ÕÕkey×öhashËã·¨, ËùÒÔ¿ÉÒÔÈÏΪÿ¸öͰÖеÄÊý¾Ý»ù±¾ÊÇÆ½ºâµÄ. ±£Ö¤ÁËͰ·Ö²¼µÄ¾ùºâÐÔ,
¾Í±£Ö¤ÁËÊý¾Ý·Ö²¼µÄ¾ùºâÐÔ¡£

3. ÓÅ¿áÔËÓªÊý¾Ý·ÖÎö ¨C HBase,MongoDB, Redis
ÓÅ¿á×÷Ϊһ¼Ò´óÐÍÊÓÆµÍøÕ¾£¬ÓµÓк£Á¿²¥·ÅÁ÷³©µÄÊÓÆµ¡£Ëü±ü³Ð×¢ÖØÓû§ÌåÑéÕâÒ»²úÆ·¼¼ÊõÀíÄ½«¾ø´ó²¿·Ö´æ´¢ÓÃÔÚÊÓÆµ×ÊÔ´ÉÏ¡£Í¨¹ý½¨ÉèרÓõÄÊÓÆµCDN£¬½¨Á¢ÁË¿É×ÔÓÉÀ©Õ¹¡¢ÐÔÄÜÓÅÒìµÄ¼Ü¹¹£¬ÔÚÌṩ¸üºÃÓû§ÌåÑéµÄͬʱÓÅ»¯ÁË´æ´¢×ÊÔ´¡£ÔÚ³ýÊÓÆµ×ÊÔ´ÍâµÄÆäËü·½Ã棬ÓÅ¿áÒ²ÀÛ»ýÁ˺£Á¿Êý¾Ý£º½öÔËÓªÊý¾Ý£¬Ã¿ÌìÊÕ¼¯µ½µÄÍøÕ¾¸÷Àà·ÃÎÊÈÕÖ¾×ÜÁ¿ÒѾ´ïµ½TB¼¶£¬¾·ÖÎö¼°Ñ¹Ëõ´¦ÀíºóÁô´æÏÂÀ´µÄÀúÊ·ÔËÓªÊý¾ÝÒÑ´ïÊý°ÙTB£¬ºÜ¿ì½«»á´ïµ½
PB¼¶£¬5ÄêºóÊý¾ÝÁ¿½«»á´ïµ½¼¸Ê®PB¼¶¡£

ĿǰÓÅ¿áµÄÔÚÏ߯ÀÂÛÒµÎñÒѲ¿·ÖÇ¨ÒÆµ½MongoDB£¬ÔËÓªÊý¾Ý·ÖÎö¼°ÍÚ¾ò´¦ÀíĿǰÔÚʹÓÃHadoop/HBase;ÔÚKey-Value²úÆ··½Ã棬ËüÒ²ÔÚѰÕÒ¸üÓŵÄ
MemcachedÌæ´úÆ·£¬ÈçRedis£¬Ïà¶ÔÓÚMemcached£¬³ýÁ˶ÔValueµÄ´æ´¢Ö§³ÖÈýÖÖ²»Í¬µÄÊý¾Ý½á¹¹Í⣬ͬһ¸öKeyµÄValue½øÐв¿·Ö¸üÐÂÒ²»á¸üÊʺÏһЩ¶ÔValueƵ·±Ð޸ĵÄÔÚÏßÒµÎñ;ͬʱÔÚËÑË÷²úÆ·ÖÐÓ¦ÓÃÁËTokyo
Tyrant;¶ÔÓÚCassandraµÈ²úÆ·Ò²½øÐйýÑо¿¡£
¶ÔÓÚÓÅ¿áÀ´Ëµ£¬ÈÔ´¦ÓÚ·ÉËÙ·¢Õ¹½×¶Î£¬ÒѾÔÚ¿¼ÂÇδÀ´×Ô½¨Êý¾ÝÖÐÐÄ£¬Ìá¸ßÊý¾Ý´¦ÀíÄÜÁ¦£¬´ÓÍøÕ¾µÄÔËÓªÖз¢¾ò³ö¸ü¶àÐÅÏ¢£¬ÎªÓû§Ìṩ¸üºÃµÄÊÓÆµ·þÎñ¡£

4. ¶¹°êÉçÇø ¨C BeansDB£¨×ÔÑÐKVÊý¾Ý¿â£©
Ëü²ÉÓÃÀàËÆmemcachedµÄÈ¥ÖÐÐÄ»¯½á¹¹£¬ÔÚ¿Í»§¶ËʵÏÖÊý¾Ý·ÓÉ¡£Ä¿Ç°Ö»ÌṩÁËPython°æ±¾µÄ¿Í»§¶Ë£¬ÆäËüÓïÑԵĿͻ§¶Ë¿ÉÒÔÓÉmemcachedµÄ¿Í»§¶ËÉÔ¼Ó¸ÄÔìµÃµ½¡£Ëü¾ßÓÐÈçÏÂÌØÐÔ£º
¸ß¿ÉÓãºÍ¨¹ý¶à¸ö¿É¶ÁдµÄÓÃÓÚ±¸·ÝʵÏָ߿ÉÓÃ
×îÖÕÒ»ÖÂÐÔ£ºÍ¨¹ý¹þÏ£Ê÷ʵÏÖ¿ìËÙÍêÕûÊý¾Ýͬ²½(¶Ìʱ¼äÄÚÊý¾Ý¿ÉÄܲ»Ò»ÖÂ)
ÈÝÒ×À©Õ¹£º¿ÉÒÔÔÚ²»ÖжϷþÎñµÄÇé¿öϽøÐÐÈÝÁ¿À©Õ¹¡£
¸ßÐÔÄÜ£ºÒì²½ÍøÂçIO, ÈÕÖ¾½á¹¹µÄ´æ´¢·½Ê½Bitcask.
¼òµ¥ÐÒ飺Memcache¼æÈÝÐÒ飬´óÁ¿¿ÉÓÿͻ§¶Ë
Ŀǰ£¬BeansDBÔÚ¶¹°êÖ÷Òª²¿ÊðÁËÁ½¸ö¼¯Èº£ºÒ»¸ö¼¯ÈºÓÃÓÚ´æ´¢Êý¾Ý¿âÖеĴóÎı¾Êý¾Ý£¬±ÈÈçÈռǡ¢Ìû×ÓÒ»Àà;ÁíÍâÒ»¸ö¶¹°êFS¼¯Èº£¬Ö÷ÒªÓÃÓڴ洢ýÌåÎļþ£¬±ÈÈçÓû§ÉÏ´«µÄͼƬ¡¢¶¹°êµç̨ÉϵÄÒôÀֵȡ£
BeansDB²ÉÓÃKey-Value´æ´¢¼Ü¹¹£¬Æä×î´óµÄÌØµãÊǾßÓи߶ȵĿÉÉìËõÐÔ;ÔÚBeansDBµÄ¼Ü¹¹Ï£¬ÔÚ´óÊý¾ÝÁ¿Ï£¬À©Õ¹Êý¾Ý½Úµã½«Çá¶øÒ×¾Ù£¬Ö»ÐèÒªÌí¼ÓÓ²¼þ£¬°²×°Èí¼þ£¬ÐÞ¸ÄÏàÓ¦µÄÅäÖÃÎļþ¼´¿É¡£
BeansDBÏîÄ¿¿ÉÒÔ˵ÊÇÒ»¸ö¼ò»¯°æµÄAWS DynamoDB¡£BeansDB¶Ôkey×ö¹þÏ£ÔËËãÕÒµ½½ÚµãÀ´ÊµÏÖ·Ö²¼ºÍÈßÓ࣬
Ò»¸öд²Ù×÷»áдºÃ¼¸¸ö½Úµã£¬¶øÏÖÔÚµÄÅäÖÃÊÇдÈý·Ý¶ÁÒ»·Ý¡£BeansDBÖ÷ÒªµÄÌØµãÊÇÖ§³Öº£Á¿KVÊý¾Ý¿â¡ª¡ªÏà±ÈRedisÕâÖÖÖ§³Ö¼¸Ê®¸öGµ½¼¸°Ù¸öGµÄÄÚ´æKVÊý¾Ý¿â£¬BeansDB¿ÉÒÔÖ§³Öµ½ÉϰÙTµÄÊý¾Ý¡£ÁíÍâBeansDB×î´óµÄºÃ´¦¾ÍÊÇÔËάºÜ¼òµ¥£¬ÐÔÄÜ¡¢À©Èݶ¼ºÜºÃ£¬Ò²ÊµÏÖÁË×îÖÕÒ»ÖÂÐÔ¡£
BeansDBÔÚ¿ÉÓÃÐÔ·½ÃæÒ²ÓкܴóµÄÓÅÊÆ£¬ÈκÎÒ»¸ö½Úµãå´»ú¶¼²»»áÊܵ½Ó°Ï죬Êý¾ÝÊÇ×Ô¶¯ÉìËõÈßÓàµÄ¡£ÔÚÔËά·½ÃæÒ²ºÜ¼òµ¥£¬»ù±¾ÉÏûÓÐʲôÓû§Êý¾ÝµÄÈßÓà²ÐÓ࣬ËùÓÐÊý¾Ýͨ¹ýÒ»¸öͬ²½½Å±¾¿ÉÒÔ¿ìËÙͬ²½¡£

|