ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

ÃûÆ󿪷ÅÐÔÃæÊÔÌ⼯(¶þ)
2014-11-24 01:15:23 ¡¾´ó ÖРС¡¿ ä¯ÀÀ:374´Î
Tags£ºÃûÆó ¿ª·ÅÐÔ ÊÔÌ⼯
k. To handle millions of users. Explain the following transactions
1) Adding/Deleting a friend
2) Friend suggestions


What if you cannot store all users on one server



һЩ´ó¹æÄ£ÍøÕ¾»áÓõ½µÄ³£ÓÃ×é¼þºÍ¼¼Êõ¡£


²Î¼ûhttp://tech.idv2.com/2008/08/17/memcached-pdf/


һЩҪµãÈçÏÂ


Ò»¸öµäÐ͵ÄÓÃÀý£º
³õʼ»¯Ò»¸öMemcacheµÄ¶ÔÏó£º
$mem = new Memcache;


Á¬½Óµ½ÎÒÃǵÄMemcache·þÎñÆ÷¶Ë£¬µÚÒ»¸ö²ÎÊýÊÇ·þÎñÆ÷µÄIPµØÖ·£¬Ò²¿ÉÒÔÊÇÖ÷»úÃû£¬µÚ¶þ¸ö²ÎÊýÊÇMemcacheµÄ¿ª·ÅµÄ¶Ë¿Ú£º
$mem->connect(¡°192.168.0.200¡å, 12000);


±£´æÒ»¸öÊý¾Ýµ½Memcache·þÎñÆ÷ÉÏ£¬µÚÒ»¸ö²ÎÊýÊÇÊý¾ÝµÄkey£¬ÓÃÀ´¶¨Î»Ò»¸öÊý¾Ý£¬µÚ¶þ¸ö²ÎÊýÊÇÐèÒª±£´æµÄÊý¾ÝÄÚÈÝ£¬ÕâÀïÊÇÒ»¸ö×Ö·û´®£¬µÚÈý¸ö²ÎÊýÊÇÒ»¸ö±ê¼Ç£¬Ò»°ãÉèÖÃΪ0»òÕßMEMCACHE_COMPRESSED¾ÍÐÐÁË£¬µÚËĸö²ÎÊýÊÇÊý¾ÝµÄÓÐЧÆÚ£¬¾ÍÊÇ˵Êý¾ÝÔÚÕâ¸öʱ¼äÄÚÊÇÓÐЧµÄ£¬Èç¹û¹ýÈ¥Õâ¸öʱ¼ä£¬ÄÇô»á±»Memcache·þÎñÆ÷¶ËÇå³ýµôÕâ¸öÊý¾Ý£¬µ¥Î»ÊÇÃ룬Èç¹ûÉèÖÃΪ0£¬ÔòÊÇÓÀÔ¶ÓÐЧ£¬ÎÒÃÇÕâÀïÉèÖÃÁË60£¬¾ÍÊÇÒ»·ÖÖÓÓÐЧʱ¼ä£º
$mem->set(¡®key1¡ä, ¡¯This is first value¡¯, 0, 60);


´ÓMemcache·þÎñÆ÷¶Ë»ñÈ¡Ò»ÌõÊý¾Ý£¬ËüÖ»ÓÐÒ»¸ö²ÎÊý£¬¾ÍÊÇÐèÒª»ñÈ¡Êý¾ÝµÄkey£¬ÎÒÃÇÕâÀïÊÇÉÏÒ»²½ÉèÖõÄkey1£¬ÏÖÔÚ»ñÈ¡Õâ¸öÊý¾ÝºóÊä³öÊä³ö£º
$val = $mem->get(¡®key1¡ä);
echo ¡±Get key1 value: ¡° . $val;


ÏÖÔÚÊÇʹÓÃreplace·½·¨À´Ìæ»»µôÉÏÃækey1µÄÖµ£¬replace·½·¨µÄ²ÎÊý¸úsetÊÇÒ»ÑùµÄ£¬²»¹ýµÚÒ»¸ö²ÎÊýkey1ÊDZØÐëÊÇÒªÌæ»»Êý¾ÝÄÚÈݵÄkey£¬×îºóÊä³öÁË£º
$mem->replace(¡®key1¡ä, ¡¯This is replace value¡¯, 0, 60);
$val = $mem->get(¡®key1¡ä);
echo ¡°Get key1 value: ¡± . $val;


ͬÑùµÄ£¬MemcacheÒ²ÊÇ¿ÉÒÔ±£´æÊý×éµÄ£¬ÏÂÃæÊÇÔÚMemcacheÉÏÃæ±£´æÁËÒ»¸öÊý×飬Ȼºó»ñÈ¡»ØÀ´²¢Êä³ö
$arr = array(¡®aaa¡¯, ¡¯bbb¡¯, ¡¯ccc¡¯, ¡¯ddd¡¯);
$mem->set(¡®key2¡ä, $arr, 0, 60);
$val2 = $mem->get(¡®key2¡ä);
print_r($val2);


ÏÖÔÚɾ³ýÒ»¸öÊý¾Ý£¬Ê¹ÓÃdelte½Ó¿Ú£¬²ÎÊý¾ÍÊÇÒ»¸ökey£¬È»ºó¾ÍÄܹ»°ÑMemcache·þÎñÆ÷Õâ¸ökeyµÄÊý¾Ýɾ³ý£¬×îºóÊä³öµÄʱºòûÓнá¹û
$mem->delete(¡®key1¡ä);
$val = $mem->get(¡®key1¡ä);
echo ¡°Get key1 value: ¡± . $val . ¡±
¡±;


×îºóÎÒÃÇ°ÑËùÓеı£´æÔÚMemcache·þÎñÆ÷ÉϵÄÊý¾Ý¶¼Çå³ý£¬»á·¢ÏÖÊý¾Ý¶¼Ã»ÓÐÁË£¬×îºóÊä³ökey2µÄÊý¾ÝΪ¿Õ£¬×îºó¹Ø±ÕÁ¬½Ó
$mem->flush();
$val2 = $mem->get(¡®key2¡ä);
echo ¡°Get key2 value: ¡±;
print_r($val2);
echo ¡±
¡±;


ÔÚ¶à»ú²¢ÐеÄʱºò£¬ÓÐÒ»¸öÑÏÖصÄÎÊÌâÊÇÔÚÔö¼õ»úÆ÷ºó£¬»á³öÏÖ´ó·¶Î§µÄ»º´æʧЧ£¨key±»Ó³Éäµ½²»Í¬µÄ»úÆ÷ÉÏ£©£¬½â¾ö·½·¨ÊÇʹÓÃconsistent hashing, ½éÉÜÔÚ£º


http://tech.idv2.com/2008/07/24/memcached-004/#content_2_6


Consistent HashingµÄ¼òµ¥ËµÃ÷


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



ͼ4 Consistent Hashing£º»ù±¾Ô­Àí


´ÓÉÏͼµÄ״̬ÖÐÌí¼Óһ̨memcached·þÎñÆ÷¡£ÓàÊý·Ö²¼Ê½Ëã·¨ÓÉÓÚ±£´æ¼üµÄ·þÎñÆ÷»á·¢Éú¾Þ´ó±ä»¯ ¶øÓ°Ï컺´æµÄÃüÖÐÂÊ£¬µ«Consistent HashingÖУ¬Ö»ÓÐÔÚcontinuumÉÏÔö¼Ó·þÎñÆ÷µÄµØµãÄæʱÕë·½ÏòµÄ µÚһ̨·þÎñÆ÷Éϵļü»áÊܵ½Ó°Ïì¡£



ͼ5 Consistent Hashing£ºÌí¼Ó·þÎñÆ÷


Òò´Ë£¬Consistent Hashing×î´óÏ޶ȵØÒÖÖÆÁ˼üµÄÖØзֲ¼¡£ ¶øÇÒ£¬ÓеÄConsistent HashingµÄʵÏÖ·½·¨»¹²ÉÓÃÁËÐéÄâ½ÚµãµÄ˼Ïë¡£ ʹÓÃÒ»°ãµÄhashº¯ÊýµÄ»°£¬·þÎñÆ÷µÄÓ³ÉäµØµãµÄ·Ö²¼·Ç³£²»¾ùÔÈ¡£ Òò´Ë£¬Ê¹ÓÃÐéÄâ½ÚµãµÄ˼Ï룬Ϊÿ¸öÎïÀí½Úµã£¨·þÎñÆ÷£© ÔÚcontinuumÉÏ·ÖÅä100¡«200¸öµã¡£ÕâÑù¾ÍÄÜÒÖÖÆ·Ö²¼²»¾ùÔÈ£¬ ×î´óÏ޶ȵؼõС·þÎñÆ÷Ôö¼õʱµÄ»º´æÖØзֲ¼¡£


ͨ¹ýÏÂÎÄÖнéÉܵÄʹÓÃConsistent HashingËã·¨µÄmemcached¿Í»§¶Ëº¯Êý¿â½øÐвâÊԵĽá¹ûÊÇ£¬ ÓÉ·þÎñÆ÷̨Êý£¨n£©ºÍÔö¼ÓµÄ·þÎñÆ÷̨Êý£¨m£©¼ÆËãÔö¼Ó·þÎñÆ÷ºóµÄÃüÖÐÂʼÆË㹫ʽÈçÏ£º


(1 ¨C n/(n+m)) * 100



ÁíÍ⻹ÓÐÒ»¸öÐèÇóÊǽ«memcacheÖеÄÊý¾Ý³Ö¾Ã»¯£¬¿ÉÒÔ¿¼ÂǶ¨Æڳ־û¯¡£



¹ØÓÚNoSQLµÄÎÄÕÂ


http://sebug.net/paper/databases/nosql/Nosql.html


Ê×Ò³ ÉÏÒ»Ò³ 1 2 ÏÂÒ»Ò³ βҳ 2/2/2
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
ÉÏһƪ£º³¹µ×½áÊø³ÖÐøÒ»¸öÔµÄÃæÊÔ£¬×ã×ã.. ÏÂһƪ£ºÌìÈÚÐÅÃæÊÔ

×îÐÂÎÄÕÂ

ÈÈÃÅÎÄÕÂ

Hot ÎÄÕÂ

Python

C ÓïÑÔ

C++»ù´¡

´óÊý¾Ý»ù´¡

linux±à³Ì»ù´¡

C/C++ÃæÊÔÌâÄ¿