Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Èí¼þ¹«Ë¾ÎªºÎÒª·ÅÆúMongoDB£¿
 
À´Ô´£º51CTO ·¢²¼ÓÚ£º2015-04-10
  3452  次浏览      28
 

Olery³ÉÁ¢ÓÚ2010Ä꣬×ܲ¿Î»ÓÚ°¢Ä·Ë¹Ìص¤¡£¸Ã³õ´´¹«Ë¾Îª¾ÆµêÐÐÒµÌṩÉùÓþ¹ÜÀíÓëýÌå¼à¿Ø¹¤¾ß£¬°ïÖú¾Æµê½«ÍøÂçÆÀÂÛºÍÉ罻ýÌå·´À¡×ª»¯³É¿ÉÖ´ÐеÄÉÌÒµÖÇÄÜ·ÖÎö¡£

Olery³ÉÁ¢×î³õÊÇʹÓÃMySQLÀ´´æ´¢(Óû§¡¢ºÏͬµÈµÈ)ºËÐÄÊý¾Ý£¬ÓÃMongoDBÀ´´æ´¢ÆÀÂÛ¼°ÆäÀàËÆµÄÊý¾Ý(¼´ÄÄЩÔÚÊý¾Ý¶ªÊ§µÄÇé¿öϺÜÈÝÒ×»Ö¸´µÄÊý¾Ý)¡£Ò»¿ªÊ¼£¬ÕâÑùµÄ°²×°ÔËÐеķdz£ºÃ£¬È»¶ø£¬Ëæ×Ź«Ë¾µÄ³É³¤£¬¿ªÊ¼Óöµ½Á˸÷ÖÖ¸÷ÑùµÄÎÊÌ⣬ÓÈÆäÊÇMongoDBµÄÎÊÌâ¾Ó¶à¡£ÆäÖÐһЩÎÊÌâÊÇÓÉÓÚÓ¦ÓÃÓëÊý¾Ý¿âµÄ½»»¥·½Ê½¶øÒýÆðµÄ£¬Ò»Ð©ÔòÊÇÓÉÊý¾Ý¿â±¾Éí¶ø²úÉúµÄ¡£

ÀýÈ磬ij¸öʱ¿Ì£¬OleryÐèÒª´ÓMongoDBÖÐɾ³ýÒ»°ÙÍò¸öÎĵµ£¬ÒÔºóÔÙ°ÑÕâЩÊý¾ÝÖØÐ²åÈëµ½MongoDBÀï¡£ÕâÑùµÄ´¦Àí·½·¨Ê¹µÃÕû¸öÊý¾Ý¿â¼¸ºõÒª±»Ëø¶¨Êý¸öСʱ£¬×ÔÈ»·þÎñÐÔÄܾͻήµÍ¡£¶øÇÒÖ±µ½¶ÔÊý¾Ý¿âÖ´ÐÐÐÞ¸´(¼´ÔÚ MongoDBÉÏÖ´ÐÐrepairDatabaseÃüÁî)ºó²Å»á½âËø¡£¶øÇÒÍê³ÉÐÞ¸´»¹Òª»¨·ÑÊý¸öСʱ£¬ÐÞ¸´Ëù»¨µÄСʱÊýÒª¸ù¾ÝÊý¾Ý¿âµÄ´óСÀ´È·¶¨¡£

ÔÚÁíһʵÀýÖÐOlery×¢Òâµ½Ó¦ÓóÌÐòµÄÐÔÄܽµµÍºÍÉè·¨¸ú×Ùµ½µÄ MongoDB ¼¯Èº¡£È»¶ø£¬¾­¹ý½øÒ»²½¼ì²é£¬ÎÞ·¨ÕÒµ½ÎÊÌâµÄÕæÕýÔ­Òò¡£ÎÞÂÛÔõô°²×°£¬»òʹÓÃʲô¹¤¾ßÇÃÁËʲôÃüÁî¶¼ÕÒ²»µ½Ô­Òò¡£Ö±µ½Olery¸ü»»Á˼¯ÈºµÄ³õÑ¡£¬ÐÔÄܲŻָ´Õý³£¡£

ÕâÖ»ÊÇÁ½¸öÀý×Ó£¬OleryÒѾ­ÓйýÐí¶àÕâÑùµÄÇé¿ö¡£Õâ¸öÎÊÌâµÄºËÐÄÊÇ£¬Õâ²»Ö»Êý¾Ý¿âÔÚÔËÐУ¬¶øÇÒÎÞÂÛºÎʱ²ì¿´Ëü¶¼Ã»Óоø¶ÔµÄ¼£Ïó±íÃ÷ÊÇʲôԭÒòµ¼ÖµÄÎÊÌâ¡£

ÎÞģʽµÄÎÊÌâ

ÁíÍ⣬OleryÃæ¶ÔµÄºËÐÄÎÊÌâÊÇmongoDBµÄÖØÒªÌØÕ÷Ö®Ò»£ºÄ£Ê½µÄȱ·¦¡£Ä£Ê½µÄȱ·¦¿ÉÄÜÌýÆðÀ´ÊÇÓÐȤµÄ£¬²¢ÇÒÔÚһЩÇé¿öÏÂÊÇÓкô¦µÄ¡£È»¶ø£¬¶ÔÓÚÐí¶àÎÞģʽ´æ´¢ÒýÇæµÄÓ÷¨£¬Æäµ¼ÖÂÁËһЩģʽ֮¼äµÄÄÚ²¿ÎÊÌâ¡£ÕâЩģʽûÓÐͨ¹ý´æ´¢ÒýÇæ¶¨Òå¶øÊÇͨ¹ýÓ¦ÓõÄÐÐΪ¼°Æä¿ÉÄܵÄÐèÒª¶ø¶¨ÒåµÄ¡£

ÀýÈ磺Äã¿ÉÄÜÓÐÒ»Ò³´æ´¢ÄãµÄÓ¦ÓÃÐèÒªµÄ×Ö·û´®ÀàÐ͵Ätitle×ֶεļ¯ºÏ¡£Õâ¶ùÕâ¸öģʽÊǷdz£·ûºÏµ±Ç°ÇéÐε쬼´Ê¹ËüûÓб»Ã÷È·µÄ¶¨Òå¡£µ«Èç¹ûÕâ¸öÊý¾Ý½á¹û¸Ä±ä³¬Ê±£¬ÓÈÆäÊÇÈç¹ûÔ­À´µÄÊý¾ÝûÓб»Ç¨ÒƵ½ÐµÄÊý¾Ý½á¹¹£¬Õâ¾Í³ÉÁËÎÊÌâ(ÔÚһЩÎÞģʽµÄ´æ´¢ÒýÇæÉÏÊÇÏ൱ÓÐÎÊÌâµÄ)¡£ÀýÈ磬Äã¿ÉÄÜÓÐÏÂÃæÕâÑùµÄ Ruby´úÂ룺

post_slug = post.title.downcase.gsub(/\W+/, '-') 

ÕâÑù£¬Õë¶Ôÿһ¸öÓС°title¡±×ֶβ¢·µ»ØÒ»¸öStringµÄÎĵµ£¬Ëü¶¼ÄÜÕý³£¹¤×÷¡£È»¶ø£¬¶ÔÓÚÄÇЩʹÓò»Í¬×Ö¶ÎÃû×Ö(ÀýÈ磺post_title)»òÕ߸ù±¾Ã»ÓбêÌâ×ֶεÄÎĵµÀ´Ëµ£¬Ëü½«²»ÄÜÕý³£¹¤×÷¡£ÎªÁË´¦ÀíÕâÖÖÇé¿ö£¬ÄãÐèÒª½«´úÂëµ÷ÕûΪÏÂÃæÄÚÈÝ£º

if post.title 

post_slug = post.title.downcase.gsub(/\W+/, '-')

else

# ...

end

ÁíÒ»ÖÖ´¦Àí·½·¨ÊÇ£¬ÔÚÄãµÄÄ£ÐÍÖж¨ÒåÒ»¸öģʽ¡£ÀýÈç Mongoid£¬Ò»¸öÁ÷ÐеÄÕë¶ÔRubyµÄMongoDB ODM£¬¾ÍÄÜÈÃÄã×öµ½ÕâÒ»µã¡£È»¶ø£¬µ±Ê¹ÓÃÕâЩ¹¤¾ß¶¨ÒåÒ»¸öģʽʱ£¬Äã¿ÉÄÜ»áºÃÆæÎªÊ²Ã´ËüÃDz»ÔÚÊý¾Ý¿âÄÚ¶¨Òå¸Ãģʽ¡£Êµ¼ÊÉÏ£¬ÕâÑù×ö¿ÉÒÔ½â¾öÁíÒ»¸öÎÊÌ⣺¿ÉÖØÓÃÐÔ¡£Èç¹ûÄãÖ»ÓÐÒ»¸öÓ¦ÓóÌÐò£¬ÄÇôÔÚ´úÂëÖж¨Òåģʽ²¢²»ÊÇʲô´óÎÊÌ⡣Ȼ¶ø£¬Èç¹ûÄãÓÐÐí¶àÓ¦ÓóÌÐòµÄ»°£¬Õ⽫ºÜ¿ì»á³ÉΪһ¸ö´óÂé·³¡£

ÎÞģʽ´æ´¢ÒýÇæÏ£Íûͨ¹ýɾ³ý¶ÔģʽµÄÏÞÖÆµÄ·½Ê½£¬ÈÃÄãµÄ¹¤×÷±äµÃ¸ü¼òµ¥¡£µ«ÏÖʵµÄÇé¿öÊÇ£¬È·±£Êý¾ÝÒ»ÖÂÐÔµÄÔðÈÎÍÆµ½ÁËÓû§×Ô¼ºµÄÉíÉÏ¡£ÓÐʱºòÎÞģʽÒýÇæ¿ÉÒÔ¹¤×÷£¬µ«ÎÒ´ò¶Ä£¬¸ü¶àµÄʱºòÊÇÊÂÓëԸΥ¡£

ºÃÊý¾Ý¿âµÄÐèÇó

ÓÐÁ˸ü¶àµÄÌØÊâÐèÇóºó£¬ÆÈʹOleryѰÇóÒ»¿î¸üºÃµÄÊý¾Ý¿âÀ´½â¾öÎÊÌâ¡£¶ÔÓÚϵͳ£¬ÌرðÊÇÊý¾Ý¿â£¬Olery·Ç³£×¢ÖØÒÔϼ¸µã:

1.Ò»ÖÂÐÔ

2.Êý¾ÝºÍϵͳÐÐΪµÄ¿ÉÊÓ»¯

3.ÕýÈ·ÐÔºÍÃ÷È·ÐÔ

4.¿ÉÍØÕ¹

Ò»ÖÂÐÔÊÇÖØÒªµÄÔÚÓÚËüÓÐÖúÓÚ°ïÖúOlery¶ÔϵͳÉ趨Ã÷È·µÄÆÚÍû¡£Èç¹ûÊý¾Ý×ÜÊǰ´ÕÕͬÑùµÄ·½Ê½´æ´¢£¬ÄÇôϵͳ¿ÉÒԺܷ½±ãµÄʹÓÃÕâЩÊý¾Ý¡£Èç¹ûÔÚÊý¾Ý¿â²ãÃæÒªÇó±íµÄĪһÁбØÐë´æÔÚ£¬ÄÇôÔÚÓ¦ÓòãÃæ¾Í²»Óüì²éÕâÁÐÊý¾ÝÊÇ·ñ´æÔÚ¡£Êý¾Ý¿â¼´Ê¹ÊµÔÚ¸ßѹÇé¿öÏ£¬Ò²±ØÐ뱣֤ÿһ´Î²Ù×÷µÄÍêÕûÐÔ¡£Ã»ÓÐʲôÊÂÇé±Èµ¥´¿µÄ²åÈëÊý¾Ý£¬¹ýÁ˼¸·ÖÖÓºóÈ´ÕÒ²»µ½Êý¾ÝµÄʸüÈÃÈ˾ÚÉ¥ÁË¡£

¿É¼ûÐÔ°üº¬ÁËÁ½µã£ºÏµÍ³±¾ÉíÒÔ¼°´ÓÖлñÈ¡Êý¾ÝµÄÈÝÒ׳̶ȡ£Èç¹ûÒ»¸öϵͳ³ö´íÄÇôӦ¸ÃÒ×ÓÚµ÷ÊÔ¡£·´¹ýÀ´£¬Óû§Ó¦ºÜÈÝÒײ鵽ÏëÒª²éѯµÄÊý¾Ý¡£

ÕýÈ·ÐÔÊÇָϵͳµÄÐÐΪÈçOleryËùÆÚÍûµÄÄÇÑù¡£Èç¹ûij¸ö×ֶζ¨ÒåΪһ¸öÊýÖµÐÍ£¬Ã»ÓÐÈË¿ÉÒÔÏñÆäÖвåÈëÎı¾¡£Õâ·½ÃæMySQLÊdzôÃûÕÑÖø£¬Ò»µ©ÄãÕâÑù×öÄ㽫µÃµ½Î±½á¹û¡£

¿ÉÀ©Õ¹ÐÔ²»½öÕë¶ÔÐÔÄܶøÑÔ£¬¶øÇÒÒ²Éæ¼°²ÆÎñ·½ÃæºÍϵͳÄܹ»¶àôºÃµØÓ¦¶Ô²»¶Ï±ä»¯µÄÐèÇó¡£Ò»¸öϵͳÔÚûÓдóÁ¿×ʽð³É±¾»ò¼õ»ºÏµÍ³ËùÒÀÀµµÄ¿ª·¢ÖÜÆÚÇé¿öÏ£¬ºÜÄѱíÏֵ÷dz£ºÃ¡£

·ÅÆúMongoDB

ÉÏÃæµÄÐèÇóÀμÇÓÚÐĺó£¬Olery¾Í¿ªÊ¼Ñ°ÕÒÒ»¸öÈ¡´úMongoDBµÄÊý¾Ý¿â¡£ÉÏÃæÌáµ½µÄÌØÐÔͨ³£ÊÇ´«Í³RDBMÌØÕ÷µÄÒ»×éºËÐ¬ËùÒÔOleryËø¶¨ÁËÁ½¸öºòÑ¡ÕߣºMySQLºÍPostgreSQL¡£

±¾À´£¬MySQLÊǵÚÒ»ºòÑ¡£¬ÒòΪOleryµÄһЩ¹Ø¼üÊý¾ÝÒѾ­ÔÚʹÓÃËü´æ´¢¡£È»¶ø£¬MySQLÒ²ÓÐһЩÎÊÌâ¡£ÀýÈ磬µ±½«Ò»¸ö×ֶζ¨ÒåΪint(11)ʱ£¬ÄãÈ´¿ÉÒÔÇáËɵØÏò¸Ã×ֶβåÈëÎı¾Êý¾Ý£¬ÒòΪMySQL»áÊÔͼ¶ÔËü½øÐÐת»»¡£ÏÂÃæÊÇһЩÀý×Ó£º

mysql> create table example ( `number` int(11) not null ); 

Query OK, 0 rows affected (0.08 sec)

mysql> insert into example (number) values (10);

Query OK, 1 row affected (0.08 sec)

mysql> insert into example (number) values ('wat');

Query OK, 1 row affected, 1 warning (0.10 sec)

mysql> insert into example (number) values ('what is this 10 nonsense');

Query OK, 1 row affected, 1 warning (0.14 sec)

mysql> insert into example (number) values ('10 a');

Query OK, 1 row affected, 1 warning (0.09 sec)

mysql> select * from example;

+--------+

| number |

+--------+

| 10 |

| 0 |

| 0 |

| 10 |

+--------+

4 rows in set (0.00 sec)

ÖµµÃ×¢ÒâµÄÊÇ£¬MySQLÔÚÕâЩÇé¿öÏ»ᷢ³ö¾¯¸æ¡£µ«ÊÇ£¬½ö½öÊǾ¯¸æ¶øÒÑ£¬ËüÃÇͨ³£(Èô·Ç×ÜÊÇ)»á±»ºöÂÔ¡£

´ËÍ⣬MySQLµÄÁíÒ»¸öÎÊÌâÊÇ£¬ÈκαíµÄÐ޸IJÙ×÷(ÀýÈ磺Ìí¼ÓÒ»ÁÐ)¶¼»áµ¼ÖÂ±í±»Ëø£¬´Ëʱ½«ÎÞ·¨½øÐжÁ»òд²Ù×÷¡£Õâ¾ÍÒâζ×Å£¬Ê¹ÓÃÕâÖÖ±íµÄÈκβÙ×÷¶¼²»µÃ²»µÈ´ýÐÞ¸ÄÍê³ÉÖ®ºó²ÅÄܽøÐС£¶ÔÓÚ°üº¬ÓдóÁ¿Êý¾ÝµÄ±í£¬Õâ¿ÉÄܻỨ·Ñ¼¸¸öСʱ²ÅÄÜÍê³É£¬ºÜ¿ÉÄܻᵼÖÂÓ¦ÓóÌÐòå´»ú¡£ÕâÒѾ­µ¼ÖÂһЩ¹«Ë¾(ÀýÈç SoundCloud)²»µÃ²»×Ô¼º¿ª·¢¹¤¾ß(ÀýÈçlhm)À´½â¾ö¸ÃÎÊÌâ¡£

Á˽⵽ÉÏÃæµÄÎÊÌâºó£¬Olery¿ªÊ¼¿¼²ìPostgreSQL¡£PostgreSQL¿ÉÒÔ½â¾öºÜ¶àMySQL²»Äܽâ¾öµÄÎÊÌâ¡£ÀýÈ磬PostgreSQLÖÐÄã²»Äܽ«Îı¾Êý¾Ý²åÈëÒ»¸öÊý×Ö×ֶΣº

olery_development=# create table example ( number int not null ); 

CREATE TABLE

olery_development=# insert into example (number) values (10);

INSERT 0 1

olery_development=# insert into example (number) values ('wat');

ERROR: invalid input syntax for integer: "wat"

LINE 1: insert into example (number) values ('wat');

^

olery_development=# insert into example (number) values ('what is this 10 nonsense');

ERROR: invalid input syntax for integer: "what is this 10 nonsense"

LINE 1: insert into example (number) values ('what is this 10 nonsen...

^

olery_development=# insert into example (number) values ('10 a');

ERROR: invalid input syntax for integer: "10 a"

LINE 1: insert into example (number) values ('10 a');

PostgreSQL »¹¾ßÓÐÔÚÐí¶à·½Ê½Öв»ÐèҪÿһ¸ö²Ù×÷¶¼ÉÏËø¾Í¿ÉÒÔ¸Äд±íµÄÄÜÁ¦¡£ÀýÈ磬Ìí¼ÓÒ»ÁÐûÓÐĬÈÏֵȴ¿ÉÒÔÉèÖÃΪnullµÄÁв¢Äܹ»¿ìËÙÍê³ÉÎÞÐèËø¶¨Õû¸ö±í¡£

»¹ÓÐÆäËû¸÷ÖÖÓÐȤµÄ¹¦ÄÜ£¬ÈçÔÚ PostgreSQL ¿ÉÒÔ£ºtrigram Ϊ»ù´¡µÄË÷ÒýºÍ¼ìË÷£¬È«ÎļìË÷£¬Ö§³ÖJSON²éѯ£¬Ö§³Ö²éѯ/´æ´¢¼ü-Öµ¶Ô£¬Ö§³Ö·¢²¼/¶©Ôĵȸü¶à¡£

×îÖØÒªµÄÊÇPostgreSQLÔÚÐÔÄÜ£¬¿É¿¿ÐÔ£¬ÕýÈ·ÐÔºÍÒ»ÖÂÐÔÖ®¼äÄܹ»È¨ºâ¡£

Ç¨ÒÆµ½PostgreSQL

×îºó£¬ÎªÁËÔÚËù¹ØÐĵĸ÷ÖÖÏîĿ֮Öдﵽƽºâ£¬Olery¾ö¶¨Ê¹ÓÃPostgreSQL¡£µ«ÊÇ£¬½«Õû¸öƽ̨´ÓMongoDBÇ¨ÒÆµ½Ò»¸ö½ØÈ»²»Í¬µÄÊý¾Ý¿â²¢²»ÊǺÜÈÝÒ×µÄÊ¡£ÎªÁËÊ¹×ªÒÆ¹¤×÷¼òµ¥»¯£¬Olery½«´Ë¹ý³Ì·Ö³ÉÁË3¸ö²½Ö裺

1.´î½¨Ò»¸öPostgreSQLÊý¾Ý¿â£¬²¢Ç¨ÒÆÊý¾ÝµÄÒ»¸öС×Ó¼¯¡£

2.¸üÐÂËùÓÐÒÀÀµÓÚMongoDBµÄÓ¦ÓóÌÐò£¬Á¬Í¬ÈκÎÐèÒªµÄÖØ¹¹£¬¶¼ÓÃÒÀÀµÓÚPostgreSQLµÄ³ÌÐòÌæ´ú¡£

3.½«²úÆ·Êý¾ÝÇ¨ÒÆµ½ÐÂÊý¾Ý¿âÉÏ£¬È»ºó²¿ÊðÐÂÆ½Ì¨¡£

²¿·ÖÊý¾ÝÇ¨ÒÆ

ÔÚ¿¼ÂǰÑËùÓÐÊý¾ÝÇ¨ÒÆµ½ÐÂÊý¾Ý¿â֮ǰ£¬OleryÏÈÇ¨ÒÆÁËһС²¿·ÖÊý¾ÝÀ´×ö²âÊÔ¡£Èç¹û½ö½öÊÇÇ¨ÒÆÒ»Ð¡²¿·ÖÊý¾Ý£¬¾ÍÓзdz£¶àµÄÂé·³µÄ»°£¬ÄÇôÊý¾Ý¿âÇ¨ÒÆÒ²¾ÍûʲôÒâÒåÁË¡£

¾¡¹ÜÓÐÏֳɵŤ¾ß¿ÉÒÔÀûÓ㬵«»¹ÊÇÓÐЩÊý¾Ý(±ÈÈ磬ÁÐÖØÃüÃû£¬Êý¾ÝÀàÐͲ»Ò»ÖÂ)Òª×öת»»£¬¶ÔÓÚÕâЩÊý¾ÝOlery×Ô¼º¿ª·¢ÁËЩ¹¤¾ß¡£ÕâЩ¹¤¾ßÖУ¬´ó²¿·Ö¶¼ÊÇRubyдµÄÒ»´ÎÐԽŲ½£¬ÓÃÓÚɾ³ýһЩÆÀÂÛ£¬ÕûÀíÊý¾Ý±àÂ룬ÐÞÕýÖ÷¼ü·¢ÉúÐòÁеȵȡ£

ÔÚ²âÊÔ¿ªÊ¼½×¶Î¾¡¹ÜÓÐЩÊý¾ÝÉϵÄÎÊÌ⣬²¢Ã»ÓгöÏÖ´óµÄ»á×è°­Ç¨ÒÆµÄÎÊÌâ¡£ÀýÈ磬ÓÐЩÓû§Ìá½»µÄÊý¾ÝûÓÐÍêÈ«°´¸ñʽ±àÂ룬µ¼ÖÂÕâЩÊý¾Ý±»ÖØÐ±àÂë֮ǰ£¬²»Äܱ»µ¼Èëµ½ÐÂÊý¾Ý¿â¡£ÀýÍâÒ»¸öÓÐÒâ˼µÄ¸Ä±äÊÇ£¬Ö®Ç°ÆÀÂÛµÄÊý¾Ý´æµÄÊÇÆÀÂÛÓõÄÓïÑÔµÄÃû³Æ(Èç¡°ºÉÀ¼Ó£¬¡°Ó¢ÓµÈ)£¬ÏÖÔÚ¸ÄÁË´æÓïÑԵıàÂ룬ÒòΪ OleryеÄÓïÒå·ÖÎöϵͳʹÓõÄÊÇÓïÑÔ±àÂ룬¶ø²»ÔÙÊÇÓïÑÔÃû³Æ¡£

¸üÐÂÓ¦ÓÃ

ĿǰΪֹ£¬»¨·Ñʱ¼ä×î¶àµÄ¾ÍÊǸüÐÂÓ¦Óã¬ÓÈÆäÊÇÄÇЩÑÏÖØÒÀÀµMongoDB¾ÛºÏ¿ò¼ÜµÄÓ¦Óá£ÈÓµôÄÇÉÙÊý¼¸¸öÒÅÁôµÄRailsÓ¦Óðɣ¬¹âÊDzâÊԾͻỨµôÄ㼸¸öÐÇÆÚµÄʱ¼ä¡£¸üÐÂÓ¦ÓõĹý³Ì´óÖÂÈçÏ£º

1.ÓÃPostgreSQLµÄÏà¹Ø´úÂëÀ´Ìæ»»µôMongoDBµÄÇý¶¯/ÉèÖÃÄ£¿éµÄ´úÂë

2.ÔËÐвâÊÔ

3.ÐÞ¸´Bugs

4.·´¸´ÔËÐвâÊÔ£¬Ö±µ½ËùÓвâÊÔͨ¹ý

¶ÔÓÚ·ÇRailsÓ¦Óã¬OleryÍÆ¼öʹÓà Sequel£¬¶ÔÓÚRailsÓ¦Óã¬OleryÏÖÔÚ»¹ÎÞ·¨°ÚÍÑActiveRecord(ÖÁÉÙÊÇÏÖÔÚ)¡£SequelÊÇÒ»¸ö·Ç³£ºÃµÄÊý¾Ý¿â¹¤¾ß¼¯£¬ËüÖ§³Ö¾ø´ó¶àÊý(Èç¹û²»ÊÇÈ«²¿)ÎÒÃÇÏëʹÓõÄPostgreSQLÌØÐÔ¡£Ïà½ÏÓÚActiveRecord£¬Ëü»ùÓÚDSLµÄqueryҪǿ´óµÄ¶à£¬¾¡¹Ü¿ÉÄܺÄʱ»áÓе㳤¡£

¾Ù¸öÀý×Ó£¬¼ÙÉèÄãÏë¼ÆËãÓжàÉÙÓû§Ê¹ÓÃijÖÖÓïÑÔ£¬²¢¼ÆËãÿÖÖÓïÑÔËùÕ¼µÄ±ÈÀý(Ïà¶ÔÓÚÕû¸ö¼¯ºÏ)¡£´¿´âµÄSQL²éѯÓï¾äÈçÏÂËùʾ£º

SELECT locale,count(*) AS amount, 

(count(*) / sum(count(*)) OVER ()) * 100.0 AS percentageFROM users

GROUP BY localeORDER BY percentage DESC;

ÔÚÎÒÃǵÄÀý×ÓÖУ¬½«»á²úÉúÒÔÏÂÊä³ö(µ±Ê¹ÓÃPostgreSQLÃüÁîÐнçÃæÊ±)£º

locale | amount | percentage

--------+--------+--------------------------

en | 2779 | 85.193133047210300429000

nl | 386 | 11.833231146535867566000

it | 40 | 1.226241569589209074000

de | 25 | 0.766400980993255671000

ru | 17 | 0.521152667075413857000

| 7 | 0.214592274678111588000

fr | 4 | 0.122624156958920907000

ja | 1 | 0.030656039239730227000

ar-AE | 1 | 0.030656039239730227000

eng | 1 | 0.030656039239730227000

zh-CN | 1 | 0.030656039239730227000

(11 rows)

SequelÔÊÐíÄãʹÓô¿Ruby±àдÉÏÃæµÄ²éѯ£¬¶ø²»ÐèÒª×Ö·û´®·Ö¶Î(ActiveRecord¾­³£ÐèÒª)£º

star = Sequel.lit('*')User.select(:locale) 

.select_append { count(star).as(:amount) }

.select_append { ((count(star) / sum(count(star)).over) * 100.0).as(:percentage) }

.group(:locale)

.order(Sequel.desc(:percentage))

Èç¹ûÄ㲻ϲ»¶Ê¹Óá°Sequel.lit(¡°*¡±)¡±£¬ÄãÒ²¿ÉÒÔʹÓÃÏÂÃæµÄÓï·¨£º

User.select(:locale) 

.select_append { count(users.*).as(:amount) }

.select_append { ((count(users.*) / sum(count(users.*)).over) * 100.0).as(:percentage) }

.group(:locale)

.order(Sequel.desc(:percentage))

ËäÈ»Õâ¿ÉÄÜÓÐЩÈß³¤£¬µ«ÊÇÉÏÃæµÄÁ½ÖÖ²éѯ¶¼Ê¹µÃËüÃǸüÒ×ÓÚÖØÓ㬶øÎÞÐè½øÐÐ×Ö·û´®Á¬½Ó¡£

δÀ´¿ÉÄÜÒ²»á½«OleryµÄRailsÓ¦ÓóÌÐòÇ¨ÒÆµ½Sequel£¬µ«ÊÇ¿¼Âǵ½RailsÓëActiveRecordñîºÏµÃÈç´Ë½ôÃÜ£¬ËùÒÔOlery»¹²»Íêȫȷ¶¨ÕâÊÇ·ñÖµµÃ»¨·Ñʱ¼äºÍ¾«Á¦¡£

Ç¨ÒÆÉú²úÊý¾Ý

×îÖÕOleryÀ´µ½Ç¨ÒÆÉú²úÊý¾ÝµÄ¹ý³Ì¡£Ò»°ãÓÐÁ½ÖÖ·½·¨À´×öÕâ¼þÊ£º

1.¹ØµôÕû¸öƽ̨£¬Ö±µ½ËùÓÐÊý¾Ý¶¼ÒÑÇ¨ÒÆÍê³É¡£

2.Ç¨ÒÆÊý¾ÝµÄͬʱ±£³ÖϵͳÔËÐС£

µÚÒ»¸öÑ¡Ïî¾ßÓÐÒ»¸öÃ÷ÏÔµÄȱµã£ºÍ£»úʱ¼ä¡£µÚ¶þ¸öÑ¡Ïî²»ÐèҪͣ»úµ«ÊǺÜÄÑ´¦Àí¡£ÀýÈ磬ÔÚÕâ¸ö·½°¸ÖУ¬µ±ÄãÇ¨ÒÆÊý¾ÝµÄͬʱ£¬Äã±ØÐëÒª¿¼ÂÇËùÓн«ÒªÌí¼ÓµÄÊý¾Ý£¬·ñÔòÄã¾Í»áËðʧÊý¾Ý¡£

ÐÒÔ˵ÄÊÇ£¬OleryÓÐÒ»¸ö¶ÀÌØµÄ·½°¸¾ÍÊÇOleryµÄÊý¾Ý¿âµÄ¾ø´ó¶àÊýд²Ù×÷¶¼ÊÇÏ൱¶¨ÆÚµÄ£¬¾­³£±ä»¯µÄÊý¾Ý(ÀýÈçÓû§Í¨Ñ¶Â¼ÐÅÏ¢)Ö»Õ¼×ÜÊý¾ÝÁ¿µÄһС²¿·Ö£¬Ïà±ÈÆðOlery¼ì²éÊý¾Ý£¬Ç¨ÒÆËüÃÇ»¨·ÑµÄʱ¼äÏ൱µÄС¡£

Õⲿ·ÖµÄ»ù±¾Á÷³ÌÊÇ£º

1.Ç¨ÒÆ¹Ø¼üÊý¾Ý£¬ÀýÈçÓû§¡¢ºÏͬºÍÄÇЩÎÞÂÛÈçºÎ¶¼ÎÞ·¨³Ðµ£ËðʧµÄÊý¾Ý¡£

2.Ç¨ÒÆ²»ÄÇô¹Ø¼üµÄÊý¾Ý(ÎÒÃÇ¿ÉÒÔÖØÐÂÊÕ¼¯£¬ÖØÐ¼ÆËãµÈµÄÊý¾Ý)

3.²âÊÔÊÇ·ñËùÓÐÊÂÇé¶¼ÒÑÍê³É£¬²¢ÔËÐÐÔÚÒ»×é·ÖÀëµÄ·þÎñÆ÷ÉÏ¡£

4.½«Éú²ú»·¾³×ª»»µ½ÐµķþÎñÆ÷ÉÏ¡£

5.ÖØÐÂÇ¨ÒÆµÚÒ»²½µÄÊý¾Ý£¬È·±£ÔÚÇ¨ÒÆ¹ý³ÌÖвúÉúµÄÊý¾ÝûÓжªÊ§¡£

µ½Ä¿Ç°ÎªÖ¹£¬µÚ¶þ²½»¨·ÑµÄʱ¼ä×£¬´óԼΪ24Сʱ¡£ÁíÒ»·½Ãæ£¬Ç¨ÒÆ²½Öè1ºÍ5ÖÐÌáµ½µÄÊý¾ÝÖ»»¨ÁË45·ÖÖÓ¡£

½áÂÛ

OleryÇ¨ÒÆÍê³É²¢ÇÒÖ±µ½·Ç³£ÂúÒâ´ó¸Å¹ýÈ¥ÁËÒ»¸öÔ¡£µ½ÏÖÔÚΪֹ³ýÁËÄÇЩ»ý¼«µÄÓ°Ï죬»¹ÔøÔÚ¸÷ÖÖÇé¿öÖÐÈÃÓ¦ÓõÄÐÔÄÜ´ó·ùÌá¸ß¡£¾ÙÀýÀ´Ëµ£¬OleryµÄ ¾ÆµêÆÀÂÛÊý¾ÝAPI(Hotel Review Data API)(ÔÚSinatraÔËÐÐ)Ïà±ÈÇ¨ÒÆÖ®Ç°½»»¥ÑÓ³Ù±äµÍÁËÐí¶à£º

Ç¨ÒÆÊÇÔÚ1ÔÂ21ÈÕ¿ªÊ¼µÄ£¬¸ß·å±íʾӦÓÃÐÔÄܵÄÓ²ÖØÆô(ÔÚ´¦ÀíÆÚ¼äµ¼Ö½»»¥Ê±¼äÇá΢±äÂý)¡£ÔÚ21ÈÕÖ®ºó½»»¥µÄƽ¾ùʱ¼ä´óÖÂÊÇÔ­À´µÄÒ»°ë¡£

ÔÚÁíÍâÒ»ÖÖ±»Olery³Æ×÷¡°ÆÀÂ۳־û¯¡±(ÒëÕß×¢£º¼´´æ´¢ÆÀÂÛ)µÄ¹ý³ÌÖУ¬Olery·¢ÏÖÁËÐÔÄÜÉϾ޴óµÄÌáÉý¡£ºǫ́³ÌÐòÄ¿±êºÜ¼òµ¥£º±£´æÆÀÂÛÊý¾Ý(ÆÀÂÛÄÚÈÝ£¬ÆÀÂÛ·ÖÊýµÈµÈ)¡£µ±×îÖÕÍê³ÉÁËÎªÇ¨ÒÆ¹¤×÷×öµÄºÜ¶à´óµÄ¸ü¸Äºó£¬½á¹ûÁîÈËÕñ·Ü£º

ץȡÆ÷Ò²±äµÄ¸ü¿ìÁË£º

ץȡÆ÷ÐÔÄÜÌáÉýûÓÐÆÀÂÛ´æ´¢µÄ¹ý³ÌÄÇÑù´ó£¬ÒòΪץȡÆ÷Ö»ÓÃÊý¾Ý¿âÀ´²éѯij¸öÆÀÂÛÊÇ·ñ´æÔÚ(Ò»¸öÏà¶ÔºÜ¿ìµÄ²Ù×÷)£¬ËùÒÔÕâÑùµÄ½á¹û²¢²»ºÜÁîÈ˳Ծª¡£

×îºóÀ´µ½³ÌÐòÀïÓÃÀ´µ÷¶Èץȡ¹ý³ÌµÄ½ø³Ì(¼òµ¥³ÆÖ®Îª¡°µ÷¶ÈÆ÷¡±)£º

ÒòΪµ÷¶ÈÆ÷Ö»ÊÇÒԹ̶¨Æµ¶ÈÔËÐУ¬Õâ¸öͼ¿ÉÄÜÓеãÄÑÒÔÀí½â£¬µ«ÊDz»¹ÜÔõÑù£¬ÔÚÇ¨ÒÆÖ®ºóÓÐÒ»¸öºÜÇåÎúµÄƽ¾ù´¦Àíʱ¼äµÄϽµ¡£

   
3452 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ


²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí


GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí