´«Í³»¥ÁªÍøÕýÔÚÂõÏòÒ»¸öȫеÄʱ´ú¡ª¡ªÉç½»·þÎñÍø£¨Social
Networking Service£©Ê±´ú£¬´Ó¡°ÈËÓë»úÆ÷¡±µÄʱ´úÂõÏò¡°ÈËÓëÈË¡±µÄʱ´ú¡£»¥ÁªÍøÉç½»·þÎñÍøÕ¾µÄ·¢Õ¹ÑéÖ¤ÁË¡°Áù¶È·Ö¸ôÀíÂÛ¡±£¨Six
Degrees of Separation£©£¬¼´¡°È˼ʹØÏµÂöÂç·½ÃæÄã±ØÈ»¿ÉÒÔͨ¹ý²»³¬³öÁùλÖмäÈ˼ä½ÓÓëÊÀÉÏÈÎÒâÏÈÉúŮʿÏàʶ¡±¡£¸öÌåµÄÉ罻Ȧ»á²»¶ÏµØÀ©´óºÍÖØµþ²¢×îÖÕÐγɴóµÄÉç½»ÍøÂç¡£ÎÞÂÛÊǹúÍâµÄFacebook¡¢MySpace¡¢Twitter£¬»¹ÊǹúÄڵĿªÐÄÍø¡¢ÈËÈËÍøµÈ¶¼Ò»Í·Ôú½øÉç½»Íø£¬ÒòΪËûÃÇÈ϶¨Éç½»Íø±ØÈ»ÏÆÆðÐÂÒ»ÂֵĻ¥ÁªÍø¸ïÃü¡£
Éç½»ÍøµÄÒ»¸öÏÔÖøÌØµãÊÇÖ§³Ö¾Þ´óÓû§Êý£¬ÀýÈçFacebookÖ§³Ö³¬¹ý3ÒÚµÄÓû§£¬ÆäÊý¾ÝÖÐÐÄÔËÐÐ×ų¬¹ýÍǫ̀µÄ·þÎñÆ÷£¬Îª±é²¼È«ÇòµÄÓû§ÌṩÐÅϢͨѶ·þÎñ¡£ÁíÍ⣬ÈκÎÁ½¸öÉç½»ÍøÓû§¶¼¿ÉÄܽ»»¥£¬Ò²¾ÍÊDZØÐëÖ§³ÖÈκÎÁ½¸öÊý¾Ý¿âÓû§µÄÊý¾Ý¹ØÁª²Ù×÷¡£Õâ¶ÔÓÚ·þÎñ¶ËµÄÊý¾Ý¿â¹ÜÀíÌá³öÁ˼«´óµÄÌôÕ½¡£
¹ØÏµÊý¾Ý¿âÓë NoSQL Êý¾Ý¿â
¹ØÏµÊý¾Ý¿âʹÓÃÕß×ñÑһЩÊý¾Ý¿â·¶Ê½£¬ÕâЩ·¶Ê½ÊÇÊý¾Ý¿âÉè¼ÆÖеÄһϵÁÐÔÀíºÍ¼¼Êõ£¬Ä¿µÄÊÇΪÁ˼õÉÙÊý¾Ý¿âÖÐÊý¾ÝÈßÓàºÍÔö½øÊý¾ÝµÄÒ»ÖÂÐÔ¡£½á¹¹»¯²éѯÓïÑÔSQL´óÁ¿Ê¹Óöà±íÁ¬½Ó²Ù×÷£¬SQLµÄͨÓÃÐÔ¿ÉÒÔΪʹÓÃÕß´øÀ´ºÜ¶à·½±ã¡£
Ëæ×ÅÔ½À´Ô½¶à´ó¹æÄ£¹¤×÷¸ººÉÓ¦Óõķ¢ÐУ¬¶Ô¿ÉÉìËõÐÔµÄÐèÇ󣬿ÉÄÜ»á±äµÃ·Ç³£Ñ¸ËÙºÍÎÞ±ÈÅÓ´ó¡£
¹ØÏµÊý¾Ý¿âµÄÈ·ÄÜÉìËõ×ÔÈ磬µ«Í¨³£Ö»ÄÜÔÚµ¥Ì¨·þÎñÆ÷½ÚµãÉϽøÐС£ÀýÈç²ÉÓñí·ÖÇø¼¼Êõ£¬Ò»¸ö±í¸ñ¿ÉÒÔÓɶà¸öÎïÀíÎļþ×é³É£¬ËäÈ»±í¸ñµÄÈÝÁ¿Ôö´óÁË£¬µ«¸Ã±í¸ñÈÔȻֻÄÜÓÉÒ»Êý¾Ý¿âÒýÇæ¹ÜÀí£»ÁíÍâÔö¼ÓÒ»ÎïÀíÎļþʱ£¬±í¸ñSchemaµÃ×ö¸Ä¶¯£¬Ò²¾ÍÊÇ»¹²»ÄÜÖ§³Ö¶¯Ì¬À©ÈÝ¡£
Ò»µ©µ¥½ÚµãµÄÄÜÁ¦µÖ´ïÉÏÏÞ£¬¾ÍµÃͨ¹ý¶à·þÎñÆ÷½ÚµãÀ´À©Õ¹À´·Ö·¢¸ºÔØ¡£Õâʱ¹ØÏµÊý¾Ý¿âµÄ¸´ÔÓÐԾͿªÊ¼Ó°ÏìÆäDZÔÚµÄÀ©Õ¹¹æÄ£ÁË¡£RDBMSÖ§³Ö·ÖÇøÊÓͼ£¨Partition
View£© ¼¼Êõ£¬Ò²¾ÍÊÇÖ§³ÖÁªºÏÊý¾Ý¿â£¨Federated Database£©£¨Èçͼ1£©¡£Ò»¸ö·ÖÇøÊÓͼ¿ÉÒÔÓɶà¸ö·Ö²¼ÔÚ²»Í¬Êý¾Ý¿â½Úµã·þÎñÆ÷Éϵıí¸ñ×éºÏ¶ø³É£¬Êý¾Ý¿âÓû§¿´µ½µÄÖ»ÊǸÃÊÓͼ£¬²»±Ø¹ØÐÄÎïÀí±í¸ñ¡£Í¨¹ýÊý¾Ýˮƽ·Ö¸î¼¼Êõ£¬·ÖÇøÊÓͼ°Ñ¸ºÔØ·Öµ£µ½¶à¸öÊý¾Ý¿â½Úµã·þÎñÆ÷ÉÏ¡£À©ÈÝʱ£¬¸Ã·½·¨³ýÁËÐè¸Ä¶¯ÊÓͼ¶¨ÒåÍ⣬·ÖÇøÊÓͼ³ÉΪ·Ö²¼Ê½Êý¾Ý¿âϵͳµÄÖÐÐÄ£¬´æÔÚµ¥µã¹ÊÕÏÎÊÌâ¡£ÁíÍ⣬¿çÊý¾Ý¿â½ÚµãÖ®¼ä¶à±í¸ñ¼äÁ¬½Ó²Ù×÷µÄÖ§³Ö³öÏÖ¼«´óÀ§ÄÑ¡£

ͼ1 IBMÁª°îÊý¾Ý¿âµÄÌåϵ½á¹¹
µ±ÊÔͼÀ©Õ¹Êý¾Ý¿âϵͳµ½³É°ÙÉÏǧ¸ö½Úµãʱ£¬½«µ¼Ö²»¿°¸´ÔÓÐÔÖ®ÖØ¸º£¬ÕâÒ»ÌØµãʹµÃRDBMSÔÚ´óÐÍ·Ö²¼Ê½ÏµÍ³Æ½Ì¨Êг¡ÀïµÄÉú´æÄÜÁ¦±»´ó·ùÏ÷¼õ¡£
ΪÁËÄÜÏò¿Í»§Ìṩһ¸öÉìËõ×ÔÈçµÄ¿Õ¼ä´æ·ÅÓ¦ÓÃÊý¾Ý£¬¹©Ó¦ÉÌʵ¼ÊÉÏÖ»ÓÐÒ»ÖÖÕæÕýµÄÑ¡Ôñ¡ª¡ªÊµÏÖÒ»ÖÖÐÂÐ͵ÄרעÓÚ¿ÉÀ©Õ¹ÐÔµÄÊý¾Ý¿âϵͳ£¬¶øÎþÉüµô¹ØÏµÊý¾Ý¿âËù´øÀ´µÄÆäËûºÃ´¦¡£NoSQLÊǷǹØÏµÐÍÊý¾Ý´æ´¢µÄ¹ãÒ嶨Ò壬Ëü´òÆÆÁ˳¤¾ÃÒÔÀ´¹ØÏµÐÍÊý¾Ý¿âÓëACIDÀíÂÛ´óһͳµÄ¾ÖÃæ¡£NoSQLÊý¾Ý´æ´¢²»ÐèÒª¹Ì¶¨µÄ±í½á¹¹£¬Í¨³£Ò²²»´æÔÚÁ¬½Ó²Ù×÷£¬ÔÚ³¬´óÐÍÊý¾Ý´æÈ¡ÉϾ߱¸¹ØÏµÐÍÊý¾Ý¿âÎÞ·¨±ÈÄâµÄÐÔÄÜÓÅÊÆ¡£¸ÃÊõÓïÔÚ2009
Äê³õµÃµ½Á˹㷺ÈÏͬ£¬ÆäÖÐKey-ValueÊý¾ÝÄ£ÐÍÊǽâ¾ö´óÐÍÊý¾Ý¿âϵͳÀ©³äÎÊÌâµÄÒ»ÖÖ¿ÉÐеĽâ¾ö·½°¸¡£
Berkeley DB Key-ValueÊý¾ÝÄ£ÐÍ
Berkeley DBÊÇÒ»ÖÖÖ§³ÖKey-ValueÊý¾ÝÄ£Ð͵ÄǶÈëʽÊý¾Ý¿â´æ´¢ÒýÇæ¡£Ëü²»Ö§³ÖClient/ServerÍøÂç·ÃÎÊ·½Ê½£¬³ÌÐòͨ¹ý½ø³ÌÄÚµÄAPI·ÃÎÊÊý¾Ý¿â£¬²»Ö§³ÖSQL»òÕ߯äËûÊý¾Ý¿â²éѯÓïÑÔ£¬²»Ö§³Ö±í½á¹¹ºÍÊý¾ÝÁС£·ÃÎÊÊý¾Ý¿âµÄ³ÌÐò×ÔÖ÷¾ö¶¨Êý¾ÝÈçºÎ´¢´æÔڼǼÀһÌõ¼Ç¼ÓÉÒ»¸ö³ÆÎª¼ü£¨Key£©µÄÊý¾Ý¿éºÍÒ»¸ö³ÆÎªÖµ£¨Value£©µÄÊý¾Ý¿é×é³É¡£Berkeley
DB²»¶Ô¼Ç¼ÀïµÄÊý¾Ý½øÐÐÈκΰü×°¡£Ó¦ÓóÌÐò¿Éͨ¹ý»Øµ÷º¯ÊýÀ´¶¨Ò岻ͬ¼üÖ®¼äµÄ´óС¹ØÏµ£¬¼Ç¼ºÍËüµÄ¼ü¶¼¿ÉÒÔ´ïµ½4GBµÄ³¤¶È¡£¾¡¹Ü¼Ü¹¹¼òµ¥£¬Berkeley
DBÈ´Ö§³ÖºÜ¶à¸ß¼¶µÄÊý¾Ý¿âÌØÐÔ£¬±ÈÈçACID Êý¾Ý¿âÊÂÎñ´¦Àí¡¢Ï¸Á£¶ÈËø¡¢ XA½Ó¿Ú¡¢Èȱ¸·ÝÒÔ¼°Í¬²½¸´ÖÆ¡£Berkley
DBΪ²»Í¬Óû§Ìṩ¶àÖÖ¹¦Äܼ¯£¨Feature Set£©£ºÖ§³Öµ¥¸öдÏ̵߳ÄÊý¾Ý´æ´¢£¨Data Store£©£»Ö§³Ö¶à²¢·¢Ð´Ï̵߳IJ¢·¢Êý¾Ý´æ´¢£¨Concurrent
Data Store£©£»Ö§³ÖACIDºÍÔÖÄѻָ´µÄÊÂÎñÊý¾Ý´æ´¢£¨Transactional Data Store£©£»Í¨¹ý¸´ÖÆÖ§³ÖÈÝ´íµÄ¸ß¿É¿¿Êý¾Ý´æ´¢£¨High
Availability£©¡£
¹ØÏµÊý¾Ý¿âϵͳÓÉ´æ´¢ÒýÇæºÍ¹ØÏµÒýÇæÁ½¸ö¶ÀÁ¢²¿·Ö×é³É¡£´æ´¢ÒýÇæ¸ºÔð¼Ç¼´æ´¢¡¢Ë÷ÒýºÍÊÂÎñ´¦Àí£¬¹ØÏµÒýÇæ¸ºÔð»ùÓÚ´æ´¢ÒýÇæÌṩµÄ·þÎñ£¬·ÖÎöSQL¡¢Öƶ¨²éѯִÐмƻ®µÈ¡£Berkeley
DBÊÇÒ»ÖÖ´æ´¢ÒýÇæ¡£ÀýÈçMySQLÊý¾Ý¿â¿É²ÉÓÃMyISAM¡¢InnoDB¡¢Berkeley DBµÈ´æ´¢ÒýÇæ£¬Èçͼ2Ëùʾ¡£

ͼ2 MySQLʹÓõIJ»Í¬µÄ´æ´¢ÒýÇæ
Berkeley DBÖ§³ÖƽºâÊ÷£¨BTree£©¡¢¹þÏ££¨Hash£©¡¢¶ÓÁУ¨Queue£©ºÍ¼Ç¼£¨Record£©µÈÊý¾Ý¼¯´æ´¢ºÍË÷Òý·½Ê½£¬»¹Ö§³Ö¸ù¾ÝKey-ValueÖеÄKey´´½¨¼¯ÈºË÷Òý£¨Clustered
Index£©¡£ÕâÑù¼Ç¼¼¯µÄÎïÀí´ÎÐò¾Í¸ù¾ÝKeyÖµ´óСÀ´ÅÅÁС£Èç¹ûÒª²éѯ½á¹û¼Ç¼¼¯µÄ¼üֵΪ¸ø¶¨µÄÒ»¸ö·¶Î§£¬¸ÃÌØÐÔ¶ÔÓÚÖ§³ÖÕâÖÖÀàÐ͵ĿìËÙ²éѯÆðÁ˺ܴó×÷Óá£Berkeley
DBµÄÒ»¸öKey-Value¼Ç¼¼¯³ÆÎªÒ»¸öÊý¾Ý¿â£¬»á´æ´¢ÔÚÒ»¸öµ¥¶ÀÎļþÖС£Berkeley DBͨ¹ý´´½¨¸¨ÖúÊý¾Ý¿â£¨Secondary
Database£©£¬ÔÊÐí¶Ô¼Ç¼¼¯½¨Á¢·Ç¼¯ÈºË÷Òý£¨Non-Clustered Index£©¡£·Ç¼¯ÈºË÷ÒýÊÊÓÃÓÚ¿ìËÙ²éѯ½á¹ûΪһÌõ¼Ç¼£¬¸Ã¼Ç¼µÄ¼üֵΪ¸ø¶¨µÄÒ»¸öÖµ¡£ÀýÈçÉç½»ÍøÓû§Êý¾Ý¼¯£º
User <UID, First_Name, Last_Name, Icon, E-mail>
Èç¹ûÒÔUID×÷ΪÖ÷Êý¾Ý¿âµÄ¼ü£¬ÆäËû×Ö¶Î×÷ΪÖ÷Êý¾Ý¿âµÄÖµ£¬¿ÉÔÙ´´½¨Ò»¸ö¸¨ÖúÊý¾Ý¿â£¬ÒÔE-mail×÷Ϊ¸¨ÖúÊý¾Ý¿âµÄ¼ü£¬¸¨ÖúÊý¾Ý¿âµÄֵΪE-mailËù¶ÔÓ¦µÄUID£¬Ò²¾ÍÊÇÖ¸ÏòÖ÷Êý¾Ý¿â¼Ç¼µÄÖ¸Õë¡£ÈôÔÚÒ»¸öKey-ValueÊý¾Ý¿â²éѯ£¬Ò»°ã¿É¸ù¾Ý²éѯÌõ¼þ´´½¨³ÉÒ»¸ö¼üÖµ£¬ÒýÇæ·µ»ØÒ»¸öÓα꣨Cursor£©£¬¸ÃÓαêÖ¸ÏòµÈÓÚ»ò´óÓڸüüÖµµÄ½á¹ûÊý¾Ý¼¯¡£
²»ÄÑ¿´³öBerkeley DBʹÓõÄË÷Òý¼¼ÊõÓëSQL Server¡¢OracleµÈ¸ß¶ËÊý¾Ý¿âϵͳÊÇÒ»ÑùµÄ¡£RDBMSÖо³£Ê¹Óõıí¸ñÁ¬½Ó²Ù×÷£¬ÔÚBerkeley
DBÖв»ÔÙÖ§³Ö£¬ÐèÒªÓ¦ÓóÌÐòȥʵÏÖÁ½¸öÊý¾Ý¼¯µÄÁ¬½Ó²Ù×÷¡£ÕâÊÇKey-ValueÊý¾ÝÄ£ÐÍÓë¹ØÏµÊý¾ÝÄ£Ð͵äÐ͵ÄÇø±ð¡£
Berkeley DB³ýÁË×÷ΪMySQLµÄ´æ´¢ÒýÇæÖ®Í⣬»¹Ó¦ÓÃÔÚOpenLDAP¡¢MemCachedµÈÖªÃûÈí¼þ¡£
ÓëBerkeley DBÀàËÆµÄÊý¾Ý¿âÒýÇæ»¹ÓÐTokyo Cabinet/ TyrantµÈ¡£
Éç½»ÍøÊý¾Ý¿âϵͳCassandra
ÒÔFacebookÓû§Êý¾Ý¼¯ÎªÀý£¬²»¿ÉÄܰÑ3ÒÚÌõÊý¾Ý¼¯´æ·ÅÔÚͬһ¸ö±í¸ñ¡¢Îļþ»òÓÉͬһ̨¼ÆËã»ú´¦Àí£¬ÕâÒªÇóϵͳÄÜÖ§³ÖÊý¾Ý·ÖÇø£¬°ÑÊý¾Ý¼¯·Ö¸îÔÚ¶ą̀½Úµã¼ÆËã»úÖУ¬Ã¿Ì¨¼ÆËã»ú·Öµ£Ò»²¿·Ö¸ºÔØ£¬µ±Óû§Ôö¼Óµ½Ò»¶¨³Ì¶Èʱ£¬ÏµÍ³ÄÜÔÊÐí¼ÓÈëÐÂµÄ½Úµã¼ÆËã»ú£¬²¢ÇÒ¾¡¿ÉÄܵؼõÉÙÊý¾ÝÇ¨ÒÆ¡£
2007Äê10ÔÂ30ÈÕ£¬AmazonµÄCTO Werner Vogels·¢±íÁËһƪÎÄÕ£¬ÌÖÂÛÁËÒ»ÖÖ»ùÓÚKey-ValueÊý¾ÝÄ£Ð͵Ĵ洢ϵͳDynamo¡£¸Ãϵͳ֧³ÅÁ˲»ÉÙAmazonµÄÃæÏòµç×ÓÉÌÎñµÈ¹Ø¼üÐÔÓ¦Óã¬Ëü²ÉÓõĴ洢ÒýÇæÊÇ
Berkeley DB ÊÂÎñÊý¾Ý´æ´¢£¨Transactional Data Store£©¡£DynamoϵͳÖ÷ҪΪ´æ´¢1M×óÓÒÉõÖÁ¸üСµÄÄÚÈÝ£¬È繺Îï³µ¡¢ÍƼöÁбíµÈ¡£DynamoÉè¼ÆÉÏÓÐÏÂÃæÒ»Ð©ÌØµã¡£
1.ͨ¹ýÊý¾Ý·ÖÇø¸´ÖÆÀ´Ö§³Ö¸ß¿É¿¿ÐÔÓë¸ß¿ÉÉìËõÐÔ¡£
2.ʼÖÕ¿Éд¡£
3.Ò»ÖÂÐÔÓëдÈëËٶȵÄÕÛÖУ¬²»ÒªÇóͬ²½Ð´ÈëËùÓи±±¾¡£
4.¶Ô³Æ£¬ÍêȫȥÖÐÐÄ»¯£¬È˹¤¹ÜÀí¹¤×÷ºÜС¡£
Cassandra DB×î³õÓÉFacebook¿ª·¢£¬ºóÀ´×ª±ä³ÉΪ¿ªÔ´ÏîÄ¿¡£ËüÊÇÒ»¸öÎªÍøÂçÉç½»ÔÆ¼ÆËãÉè¼ÆµÄÊý¾Ý¿â£¬Ö÷ÒªÌØµãÊÇËü²»ÔÙÊÇÒ»¸öÊý¾Ý¿â£¬¶øÊÇÓÉÒ»¶ÑÊý¾Ý¿â½Úµã¹²Í¬¹¹³ÉµÄÒ»¸ö·Ö²¼Ê½ÍøÂç·þÎñ£¬¶ÔCassandraµÄÒ»¸öд²Ù×÷»á±»¸´ÖƵ½ÆäËû½ÚµãÉÏÈ¥£¬¶ÔCassandraµÄ¶Á²Ù×÷Ò²»á±»Â·Óɵ½Ä³¸ö½ÚµãÉÏÃæÈ¥¶ÁÈ¡¡£¶ÔÓÚCassandraȺ¼¯À´Ëµ£¬À©Õ¹ÐÔÄÜÊDZȽϼòµ¥µÄÊÂÇ飬ֻ¹ÜÔÚȺ¼¯ÀïÃæÌí¼Ó½Úµã¾Í¿ÉÒÔÁË¡£
CassandraµÄÓû§°üÀ¨Facebook¡¢TwitterºÍDiggµÈ¡£Digg¹¤³Ì¸±×ܲÃJohn
Quinn˵£º¡°Cassandra²ÉÓÃÍêÈ«·ÖÉ¢µÄģʽ£¬Ã¿¸ö½Úµã¶¼Ò»Ñù£¬²»»á³öÏÖµ¥µã¹ÊÕÏ¡£ËüµÄÈÝ´íÂÊÒ²·Ç³£¸ß£¬Êý¾Ý¿ÉÒÔ±»¸´ÖƵ½Êý¾ÝÖÐÐĵĶà¸ö½ÚµãÖС£Ëü»¹·Ç³£¾ßÓе¯ÐÔ£¬Ëæ×ÅÐÂÉ豸µÄ¼ÓÈ룬Æä¶ÁдÍÌÍÂÁ¿½«³ÊÏßÐÔÔö¼Ó¡£¡±
CassandraÒÔAmazonרÓеÄÍêÈ«·Ö²¼Ê½µÄDynamoΪ»ù´¡£¬½áºÏÁËGoogle BigTable»ùÓÚÁÐ×壨Column
Family£©µÄÊý¾ÝÄ£ÐÍ¡£P2PÈ¥ÖÐÐÄ»¯µÄ´æ´¢¡£ºÜ¶à·½Ãæ¶¼¿ÉÒÔ³ÆÖ®ÎªDynamo 2.0¡£
ͼ3ΪCassandra¡¢Dynamo¡¢Key-ValueÖ®¼äµÄ¹ØÏµ¼°ÔÚÉç½»ÍøÉϵÄÓ¦Ó᣼ýÍ·±íʾÒÀÀµ¹ØÏµ¡£

ͼ3 Cassandra¡¢Dynamo¡¢Key-Value¹ØÏµÍ¼
·Ö²¼Ê½´æ´¢ÏµÍ³Dynamo
Dynamo²ÉÓÃConsistent HashingËã·¨À´ÊµÏÖÊý¾Ý·ÖÇø¡£
Consistent Hashing»ù±¾ÔÀíÊÇ£ºÊ×ÏÈÇó³ö·þÎñÆ÷½ÚµãµÄ¹þÏ£Öµ£¬²¢½«ÆäÅäÖõ½0¡«2^32µÄÔ²ÉÏ¡£È»ºóÓÃͬÑùµÄ·½·¨Çó³ö´æ´¢Êý¾ÝµÄ¼üµÄ¹þÏ£Öµ£¬²¢Ó³Éäµ½Ô²ÉÏ¡£ÔÙ´ÓÊý¾ÝÓ³Éäµ½µÄλÖÿªÊ¼Ë³Ê±Õë²éÕÒ£¬½«Êý¾Ý±£´æµ½ÕÒµ½µÄµÚÒ»¸ö·þÎñÆ÷ÉÏ¡£Èç¹û³¬¹ý2^32ÈÔÈ»ÕÒ²»µ½·þÎñÆ÷£¬¾Í»á±£´æµ½µÚһ̨·þÎñÆ÷ÉÏ¡£Èçͼ4Ëùʾ¡£

ͼ4 Êý¾Ý·Ö¸îµ½4¸ö½ÚµãÊý¾Ý¿â
Èç¹ûÌí¼Óһ̨·þÎñÆ÷¡£Ö»ÓÐÔÚÔ²ÉÏ£¬Ôö¼Ó·þÎñÆ÷µÄµØµãÄæÊ±Õë·½ÏòµÄµÚһ̨·þÎñÆ÷ÉϵIJ¿·ÖÊý¾ÝÐèÒªÇ¨ÒÆµ½ÐµĽڵãÊý¾Ý¿â¡£Èçͼ5Ëùʾ¡£

ͼ5 Ìí¼ÓNode5ºóÐèÒªÇ¨ÒÆµÄÊý¾Ý
Êý¾Ý·ÖÇøºó£¬Êý¾Ý¿é±»¸´ÖƵ½N¸ö½ÚµãÉÏ¡£¸´ÖÆÊ±ÒòΪ¸üвúÉúµÄÒ»ÖÂÐÔÎÊÌâµÄά»¤²ÉÈ¡ÀàËÆ°ÝռͥÈÝ´íQuorumÐÒ飨Byzantine
Fault-tolerance Quorum£©µÄ»úÖÆÒÔ¼°È¥ÖÐÐÄ»¯µÄ¸´ÖÆÍ¬²½ÐÒé¡£µ±Ò»¸ö´æ´¢½Úµã±»ÈÏΪÊǰÝռͥ½Úµãʱ£¬ËüµÄÐÐΪ¿ÉÄÜÈÎÒâÆ«ÒÆ£¬±íÏÖÔÚ£º¾Ü¾øÏìÓ¦ÇëÇó¡¢·¢ËÍ´íÎóÏûÏ¢¡¢´æ´¢´íÎóÐÅÏ¢¡£QuorumÐÒéÖгýÁËNÖ®Í⻹ÓÐÁ½¸ö¹Ø¼ü²ÎÊý£ºRÓëW¡£R´ú±íÒ»´Î³É¹¦µÄ¶ÁÈ¡²Ù×÷ÖÐ×îС²ÎÓë½ÚµãÊýÁ¿£¬W´ú±íÒ»´Î³É¹¦µÄд²Ù×÷ÖÐ×îС²ÎÓë½ÚµãÊýÁ¿¡£RºÍWÖ±½ÓÓ°ÏìÐÔÄÜ¡¢Ò»ÖÂÐÔ¡£R
ºÍ W Öµ¹ýСÔòÓ°ÏìÒ»ÖÂÐÔ£¬¹ý´óÔòÓ°ÏìЧÂÊ£¬ÕâÁ½¸öֵҪƽºâ¡£Èç¹ûWÉèÖÃΪ1£¬ÔòÒ»¸öʵÀýÖÐÖ»ÒªÓÐÒ»¸ö½Úµã¿Éд¾Íд³É¹¦£¬²»»áÓ°ÏìдЧÂÊ£»Èç¹ûRÉèÖÃΪ1£¬Ö»ÒªÓÐÒ»¸ö½Úµã¿É¶Á£¬¾Í¶Á³É¹¦£¬²»»áÓ°Ïì¶ÁЧÂÊ¡£
FacebookÊý¾Ý¿â²éѯÓïÑÔ£ºFQL
FacebookΪ¿ª·¢ÕßÌṩһÌ׺ÍSQL·ç¸ñÒ»ÖµÄÊý¾Ý¿â²éѯÓïÑÔ£¬³ÆÎªFacebook Query
Language £¨FQL£©¡£FQLÊÇÒ»ÖÖ»ùÓÚÁеÄÊý¾Ý²éѯÓïÑÔ¡£Ìṩ·á¸»µÄÌõ¼þ²éѯ£¬ÉõÖÁ°üÀ¨×Ó²éѯ¡£
ÀýÈ磬ÒÔÏÂFQL²éѯÒѰ²×°FacebookÓ¦ÓóÌÐòµÄÓû§$app_userµÄºÃÓÑID¼¯ºÏ£º
SELECT uid FROM user WHERE is_app_user = 1 AND uid IN £¨SELECT uid2 FROM friend WHERE uid1 = $app_user£© |
ÓëSQLÖØÒªÇø±ðÊÇFQL²»Ö§³Ö£º
¶à±íÁ¬½Ó£ºJOIN²Ù×÷
·Ö×飺 GROUP BY²Ù×÷
ÅÅÐò£ºORDER BY²Ù×÷
Ëæ×ż¼Êõ·¢Õ¹£¬Ò»²¿·Ö»ùÓÚÁнṹµÄNoSQLÊý¾Ý¿â¿ªÊ¼Ö§³Ö·Ö×â¡¢ÅÅÐòµÈ¸´ÔÓÊý¾Ýͳ¼Æ·ÖÎö¹¦ÄÜ¡£
¾ÙÀý£º²éѯºÃÓÑÐÅÏ¢
FacebookÓ¦ÓóÌÐò´ÓÒÔÏÂÁ½¸öÊý¾Ý¼¯ÖвéÕÒÒ»Óû§µÄºÃÓÑÊý¾Ý¼¯ÐÅÏ¢£º
User <UID,First_Name, Last_Name, Icon>
Friend_List <UID, Friend_UID>
×¢Friend_UIDÊÇÒ»Ö¸ÏòUser£¨UID£©µÄÍâ¼ü¡£RDBMSÓ¦ÓóÌÐò¿ÉʹÓÃÊý¾Ý¼¯Á¬½Ó²Ù×÷ʵÏÖ£º
SELECT f.UID, u.Friend_UID, u.First_Name, u.Last_Name, u.Icon FROM Friend_List f, User u WHERE f.Friend_UID = u.UID AND f.UID=@Input_UID |
ÔÚÉç½»ÍøÊý¾Ý¿âϵͳÖУ¬ÓÉÓÚUserÊý¾Ý·Ö²¼ÔÚ¶ą̀·þÎñÆ÷ÖУ¬ÆäÁ¬½Ó²Ù×÷ºÍÍâ¼üÔ¼ÊøÊµ¼ÊÉϲ»ÄÜÖ§³Ö¡£
ÔÚFacebookÖвéÕÒÒ»Óû§µÄºÃÓÑÐÅÏ¢£¬µÃ·ÖA¡¢BÁ½²½²Ù×÷ʵÏÖ£º
A²½
SELECT Friend_UID INTO @Out_Record_Set FROM Friend_List f WHERE f.UID=@Input_UID |
B²½
FOR EACH £¨Friend_UID in @Out_Record_Set£© SELECT u.Friend_UID, u.First_Name, u.Last_Name, u.Icon FROM User u WHERE u.UID = Friend_UID |
No-SQL: Not Only SQL
¶ÔÓÚÄÇЩ¹ØÏµ¸´ÔÓµÄÊý¾Ý´¦ÀíºÍ·ÖÎöͳ¼Æ£¬SQLÖµµÃ»¨Ç®¡£µ«µ±Êý¾Ý¿â½á¹¹·Ç³£¼òµ¥Ê±£¬SQL¿ÉÄÜûÓÐÌ«´óÓô¦¡£Èç¹ûÄÜÓÃÆÕͨÎļþ´æ´¢´úÌæÊý¾Ý¿âϵͳµÄ»°£¬ÓÅÑ¡ÆÕͨÎļþ´æ´¢¡£
¶ÔÓÚÉç½»Íø£¬Äܹ»²»ÊÜÏÞÖÆµÄÀ©Õ¹±È¸ü·á¸»µÄ¹¦Äܸü¼ÓÖØÒª¡£½¨Á¢´ó¹æÄ£Éç½»Íø³É±¾µÄѹÁ¦ÈúܶàÉç½»Íø¿ª·¢ÈËԱŬÁ¦È¥Ñ°ÕÒ¸ü¸ßÐԼ۱ȵĽâ¾ö·½°¸¡£Ñо¿±íÃ÷»ùÓÚÆÕͨÁ®¼ÛÓ²¼þµÄ·Ö²¼Ê½´æ´¢½â¾ö·½°¸±ÈÏÖÔڵĸ߶ËÊý¾Ý¿â¸ü¼Ó¿É¿¿¡£Ö§³ÖSQLµÄRDBMS²»Äܽâ¾öËùÓÐÎÊÌâµÄʱºò£¬NoSQL²»ÊǼòµ¥µÄNo
SQL£¬Æä±¾ÖÊÊÇNon-Relational£¬ÕâʱºòNoSQLÒ²¾Í³ÉΪNot Only SQL¡£ |