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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
¸ß¿ÉÓõÄMongoDB¼¯ÈºÏê½â
 
  3192  次浏览      33
 2018-3-16
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚjavaϺÃ׵IJ©¿Í,±¾ÎÄÖ÷Ҫͨ¹ý»·¾³´î½¨½éÉܸ߿ÉÓÃµÄ MongoDB ¼¯ÈººÍÅäÖá£

1.ÐòÑÔ

MongoDB ÊÇÒ»¸ö¿ÉÀ©Õ¹µÄ¸ßÐÔÄÜ,¿ªÔ´,ģʽ×ÔÓÉ,ÃæÏòÎĵµµÄÊý¾Ý¿â¡£ ËüʹÓà C++±àд¡£MongoDB °üº¬Ò»ÏÂÌØµã:

1.ÃæÏò¼¯ºÏµÄ´æ´¢:Êʺϴ洢¶ÔÏó¼°JSONÐÎʽµÄÊý¾Ý¡£

2.¶¯Ì¬²éѯ:Mongo Ö§³Ö·á¸»µÄ²éѯ·½Ê½,²éѯָÁîʹÓà JSON ÐÎʽµÄ±ê¼Ç,¿ÉÇáÒײéѯÎĵµÖÐÄÚǶµÄ¶ÔÏó¼°Êý×é¡£

3.ÍêÕûµÄË÷ÒýÖ§³Ö:°üÀ¨ÎĵµÄÚǶ¶ÔÏó¼°Êý×é¡£Mongo µÄ²éѯÓÅ»¯Æ÷»á·ÖÎö²éѯ±í´ïʽ,²¢Éú³ÉÒ»¸ö¸ßЧµÄ²éѯ¼Æ»®¡£

4.²éѯ¼àÊÓ:Mongo°üº¬Ò»¸ö¼à¿Ø¹¤¾ßÓÃÓÚ·ÖÎöÊý¾Ý¿â²Ù×÷ÐÔÄÜ¡£

5.¸´ÖƼ°×Ô¶¯¹ÊÕÏ×ªÒÆ:Mongo Êý¾Ý¿âÖ§³Ö·þÎñÆ÷Ö®¼äµÄÊý¾Ý¸´ÖÆ,Ö§³ÖÖ÷-´Óģʽ¼°·þÎñÆ÷Ö®¼äµÄÏ໥¸´ÖÆ¡£¸´ÖƵÄÖ÷ҪĿµÄÊÇÌṩÈßÓ༰×Ô¶¯¹ÊÕÏ×ªÒÆ¡£

6.¸ßЧµÄ´«Í³´æ´¢·½Ê½:Ö§³Ö¶þ½øÖÆÊý¾Ý¼°´óÐͶÔÏó(Èç:ÕÕÆ¬»òͼƬ)¡£

7.×Ô¶¯·ÖƬÒÔÖ§³ÖÔÆ¼¶±ðµÄÉìËõÐÔ:×Ô¶¯·ÖƬ¹¦ÄÜÖ§³ÖˮƽµÄÊý¾Ý¿â¼¯Èº,¿É¶¯Ì¬Ìí¼Ó¶îÍâµÄ»úÆ÷¡£

2.±³¾°

MongoDB µÄÖ÷ҪĿ±êÊÇÔÚ¼üÖµ¶Ô´æ´¢·½Ê½(ÌṩÁ˸ßÐÔÄܺ͸߶ÈÉìËõÐÔ) ÒÔ¼°´«Í³µÄ RDBMS(¹ØÏµÐÔÊý¾Ý¿â)ϵͳ,¼¯Á½ÕßµÄÓÅÊÆÓÚÒ»Éí¡£Mongo ʹÓà һϳ¡¾°:

1.ÍøÕ¾Êý¾Ý:Mongo ·Ç³£ÊʺÏʵʱµÄ²åÈë,¸üÐÂÓë²éѯ,²¢¾ß±¸ÍøÕ¾ÊµÊ±Êý¾Ý´æ´¢ËùÐèµÄ¸´ÖƼ°¸ß¶ÈÉìËõÐÔ¡£

2.»º´æ:ÓÉÓÚÐÔÄܸܺß,Mongo Ò²ÊʺÏ×÷ΪÐÅÏ¢»ù´¡ÉèÊ©µÄ»º´æ²ã¡£ÔÚÏµÍ³ÖØÆôÖ®ºó,ÓÉ Mongo ´î½¨µÄ³Ö¾Ã»¯»º´æ¿ÉÒÔ±ÜÃâϲãµÄÊý¾ÝÔ´¹ýÔØ¡£

3.´ó³ß´ç,µÍ¼ÛÖµµÄÊý¾Ý:ʹÓô«Í³µÄ¹ØÏµÊý¾Ý¿â´æ´¢Ò»Ð©Êý¾Ýʱ¿ÉÄÜ»á±È½Ï¹ó,ÔÚ´Ë֮ǰ,ºÜ¶à³ÌÐòÔ±ÍùÍù»áÑ¡Ôñ´«Í³µÄÎļþ½øÐд洢¡£

4.¸ßÉìËõÐԵij¡¾°:Mongo·Ç³£ÊʺÏÓÉÊýÊ®»òÊý°Ų̀·þÎñÆ÷×é³ÉµÄÊý¾Ý¿â

5.ÓÃÓÚ¶ÔÏó¼°JSONÊý¾ÝµÄ´æ´¢:MongoµÄBSONÊý¾Ý¸ñʽ·Ç³£ÊʺÏÎĵµ¸ñʽ»¯µÄ´æ´¢¼°²éѯ¡£

×¢:ÕâÀïÐèҪ˵Ã÷ÏÂ,±¾ÎÄÖ¼ÔÚ½éÉܸ߿ÉÓÃµÄ MongoDB ¼¯Èº;ÕâÀï²»ÌÖÂÛ Hadoop ƽ̨µÄ HDFS¡£¿É¸ù¾Ý¹«Ë¾Êµ¼ÊÒµÎñÐèÇó,Ñ¡ÔñºÏÊʵĴ洢ϵͳ¡£

µ±È» MongDB Ò²Óв»Êʺϵij¡¾°:

1.¸ß¶ÈÊÂÎñÐÔµÄϵͳ:ÀýÈçÒøÐлò»á¼ÆÏµÍ³¡£´«Í³µÄ¹ØÏµÐÍÊý¾Ý¿âĿǰ»¹ÊǸüÊÊÓÃÓÚÐèÒª´óÁ¿Ô­×ÓÐÔ¸´ÖÆÊÂÎïµÄÓ¦ÓóÌÐò¡£

2.´«Í³µÄÉÌÒµÖÇÄÜÓ¦ÓÃ:Õë¶ÔÌØ¶¨ÎÊÌâµÄ BI Êý¾Ý¿â»á¶Ô²úÉú¸ß¶ÈÓÅ»¯µÄ²éѯ·½Ê½¡£¶ÔÓÚ´ËÀàÓ¦ÓÃ,Êý¾Ý²Ö¿â¿ÉÄÜʱ¸üÊʺϵÄÑ¡Ôñ(ÈçHadoopÌ×¼þÖеÄHive)¡£

3.ÐèÒªSQLµÄÎÊÌâ¡£

3.´î½¨

3.1»·¾³×¼±¸

ÔÚ Mongo µÄ¹ÙÍøÏÂÔØ Linux °æ±¾°²×°°ü,È»ºó½âѹµ½¶ÔÓ¦µÄĿ¼ÏÂ;ÓÉÓÚ×ÊÔ´ÓÐÏÞ,ÎÒÃDzÉÓà Replica Sets + Sharding ·½Ê½À´ÅäÖø߿ÉÓ᣽ṹͼÈçÏÂËùʾ:

ÕâÀïÎÒ˵Ã÷ÏÂÕâ¸öͼËù±í´ïµÄÒâ˼¡£

1.Shard·þÎñÆ÷:ʹÓÃReplica SetsÈ·±£Ã¿¸öÊý¾Ý½Úµã¶¼¾ßÓб¸·Ý¡¢×Ô¶¯ÈÝ´í×ªÒÆ¡¢×Ô¶¯»Ö¸´µÄÄÜÁ¦¡£

2.ÅäÖ÷þÎñÆ÷:ʹÓÃʹÓÃ3¸öÅäÖ÷þÎñÆ÷È·±£ÔªÊý¾ÝÍêÕûÐÔ¡£

3.·Óɽø³Ì:ʹÓÃ3¸ö·Óɽø³ÌʵÏÖÆ½ºâ,Ìá¸ß¿Í»§¶Ë½ÓÈëÐÔÄÜ

4.3 ¸ö·ÖƬ½ø³Ì:Shard11,Shard12,Shard13 ×é³ÉÒ»¸ö¸±±¾¼¯,ÌṩSharding ÖÐ shard1 µÄ¹¦ÄÜ¡£

5.3 ¸ö·ÖƬ½ø³Ì:Shard21,Shard22,Shard23 ×é³ÉÒ»¸ö¸±±¾¼¯,ÌṩSharding ÖÐ Shard2 µÄ¹¦ÄÜ¡£

6.3¸öÅäÖ÷þÎñÆ÷½ø³ÌºÍ3¸ö·ÓÉÆ÷½ø³Ì¡£

¹¹½¨Ò»¸ö mongoDB Sharding Cluster ÐèÒªÈýÖÖ½ÇÉ«:shard ·þÎñÆ÷(ShardServer)¡¢ÅäÖ÷þÎñÆ÷(config Server)¡¢Â·Óɽø³Ì(Route Process)

Shard ·þÎñÆ÷shard ·þÎñÆ÷¼´´æ´¢Êµ¼ÊÊý¾ÝµÄ·ÖƬ,ÿ¸ö shard ¿ÉÒÔÊÇÒ»¸ö mongod ʵÀý, Ò²¿ÉÒÔÊÇÒ»×é mongod ʵÀý¹¹³ÉµÄ Replica Sets.ΪÁËʵÏÖÿ¸ö Shard ÄÚ²¿µÄ¹ÊÕÏ ×Ô¶¯×ª»»,MongoDB ¹Ù·½½¨Òéÿ¸ö shard Ϊһ×é Replica Sets.

ÅäÖ÷þÎñÆ÷

ΪÁ˽«Ò»¸öÌØ¶¨µÄ collection ´æ´¢ÔÚ¶à¸ö shard ÖÐ,ÐèҪΪ¸Ã collection Ö¸¶¨ Ò»¸ö shard key,¾ö¶¨¸ÃÌõ¼Ç¼ÊôÓÚÄĸö chunk,ÅäÖ÷þÎñÆ÷¿ÉÒÔ´æ´¢ÒÔÏÂÐÅÏ¢, ÿ¸öshard½ÚµãµÄÅäÖÃÐÅÏ¢,ÿ¸öchunkµÄshard key·¶Î§,chunkÔÚ¸÷shard µÄ·Ö²¼Çé¿ö,¼¯ÈºÖÐËùÓÐ DB ºÍ collection µÄ sharding ÅäÖÃÐÅÏ¢¡£

·Óɽø³Ì

ËüÊÇÒ»¸öǰ¶Î·ÓÉ,¿Í»§¶ËÓɴ˽ÓÈë,Ê×ÏÈѯÎÊÅäÖ÷þÎñÆ÷ÐèÒªµ½Äĸö shard Éϲéѯ»ò±£´æ¼Ç¼,È»ºóÁ¬½ÓÏàÓ¦µÄ shard Ö´ÐвÙ×÷,×îºó½«½á¹û·µ»Ø¸ø¿Í»§¶Ë,¿Í »§¶ËÖ»ÐèÒª½«Ô­±¾·¢¸ø mongod µÄ²éѯ»ò¸üÐÂÇëÇóÔ­·â²»¶¯µØ·¢¸øÂ·Óɽø³Ì,¶ø ²»±Ø¹ØÐÄËù²Ù×÷µÄ¼Ç¼´æ´¢ÔÚÄĸö shard ÉÏ¡£

°´Õռܹ¹Í¼,ÀíÂÛÉÏÊÇÐèÒª 16 ̨»úÆ÷µÄ,ÓÉÓÚ×ÊÔ´ÓÐÏÞ,ÓÃĿ¼À´Ìæ´úÎïÀí»ú(ÓзçÏÕ,ÈôÆäÖÐij̨»úÆ÷å´»ú,ÅäÖÃÔڸûúÆ÷µÄ·þÎñ¶¼»á down µô),ÏÂÃæ¸ø³öÅäÖñí¸ñ:

3.2.»·¾³±äÁ¿

ÏÂÃæ¸ø³ö MongoDB µÄ»·¾³±äÁ¿ÅäÖÃ,ÊäÈëÃüÁî²¢ÅäÖÃ:

[root@mongo ~]# vi /etc/profile
export MONGO_HOME=/root/mongodb-linux-x86_64-2.6.7
export PATH=$PATH:$MONGO_HOME/bin

È»ºó±£´æÍ˳ö£¬ÊäÈëÒÔÏÂÃüÁîÅäÖÃÎļþÁ¢¼´ÉúЧ£º

?[root@mongo ~]# . /etc/profile

3.3.ÅäÖÃ Shard+Replica Sets

ÎÒÃÇ·Ö±ðÆô¶¯ Shard1 µÄËùÓнø³Ì,²¢ÉèÖø±±¾¼¯Îª:shard1¡£ÏÂÃæ¸ø³öÆô¶¯ Shard1 µÄ½Å±¾Îļþ¡£

shard11.conf

?dbpath=/mongodb/data/shard11
logpath=/mongodb/log/shard11.log
pidfilepath=/mongodb/pid/shard11.pid
directoryperdb=true
logappend=true
replSet=shard1
port=10011
fork=true
shardsvr=true
journal=true

shard12.conf

?dbpath=/mongodb/data/shard12
logpath=/mongodb/log/shard12.log
pidfilepath=/mongodb/pid/shard12.pid
directoryperdb=true
logappend=true
replSet=shard1
port=10012
fork=true
shardsvr=true
journal=true

shard13.conf

?dbpath=/mongodb/data/shard13
logpath=/mongodb/log/shard13.log
pidfilepath=/mongodb/pid/shard13.pid
directoryperdb=true
logappend=true
replSet=shard1
port=10013
fork=true
shardsvr=true
journal=true

shard21.conf

dbpath=/mongodb/data/shard21
logpath=/mongodb/log/shard21.log
pidfilepath=/mongodb/pid/shard21.pid
directoryperdb=true
logappend=true
replSet=shard2
port=10021
fork=true
shardsvr=true
journal=true

shard22.conf

dbpath=/mongodb/data/shard22
logpath=/mongodb/log/shard22.log
pidfilepath=/mongodb/pid/shard22.pid
directoryperdb=true
logappend=true
replSet=shard2
port=10022
fork=true
shardsvr=true
journal=true

shard23.conf

dbpath=/mongodb/data/shard23
logpath=/mongodb/log/shard23.log
pidfilepath=/mongodb/pid/shard23.pid
directoryperdb=true
logappend=true
replSet=shard2
port=10023
fork=true
shardsvr=true
journal=true

config1.conf

?dbpath=/mongodb/config/config1
logpath=/mongodb/log/config1.log
pidfilepath=/mongodb/pid/config1.pid
directoryperdb=true
logappend=true
port=10031
fork=true
configsvr=true
journal=true

config2.conf

dbpath=/mongodb/config/config2
logpath=/mongodb/log/config2.log
pidfilepath=/mongodb/pid/config2.pid
directoryperdb=true
logappend=true
port=10032
fork=true
configsvr=true
journal=true

config3.conf

dbpath=/mongodb/config/config3
logpath=/mongodb/log/config3.log
pidfilepath=/mongodb/pid/config3.pid
directoryperdb=true
logappend=true
port=10033
fork=true
configsvr=true
journal=true

route.conf

?configdb=mongo:10031,mongo:10032,mongo:10033
pidfilepath=/mongodb/pid/route.pid
port=10040
chunkSize=1
logpath=/mongodb/log/route.log
logappend=true
fork=true

route2.conf

?configdb=mongo:10031,mongo:10032,mongo:10033
pidfilepath=/mongodb/pid/route.pid
port=10042
chunkSize=1
logpath=/mongodb/log/route2.log
logappend=true
fork=true

route3.conf

?configdb=mongo:10031,mongo:10032,mongo:10033
pidfilepath=/mongodb/pid/route3.pid
port=10043
chunkSize=1
logpath=/mongodb/log/route3.log
logappend=true
fork=true

3.4.Æô¶¯Åú´¦Àí

ÏÂÃæ¸ø³öÆô¶¯Åú´¦ÀíµÄ½Å±¾£¬ÄÚÈÝÈçÏ£º

mongod -f /etc/shard11.conf
mongod -f /etc/shard12.conf
mongod -f /etc/shard13.conf
mongod -f /etc/shard21.conf
mongod -f /etc/shard22.conf
mongod -f /etc/shard23.conf
mongod -f /etc/config1.conf
mongod -f /etc/config2.conf
mongod -f /etc/config3.conf
mongos -f /etc/route.conf
mongos -f /etc/route2.conf
mongos -f /etc/route3.conf

3.5.²ÎÊý˵Ã÷

dbpath:Êý¾Ý´æ·ÅĿ¼

logpath:ÈÕÖ¾´æ·Å·¾¶ logappend:ÒÔ×·¼ÓµÄ·½Ê½¼Ç¼ÈÕÖ¾

replSet:replica set µÄÃû×Ö

port:mongodb ½ø³ÌËùʹÓõĶ˿ںÅ,ĬÈÏΪ 27017 fork:ÒÔºǫ́·½Ê½ÔËÐнø³Ì

journal:дÈÕÖ¾

smallfiles:µ±Ìáʾ¿Õ¼ä²»¹»Ê±Ìí¼Ó´Ë²ÎÊý

ÆäËû²ÎÊý

pidfilepath:½ø³ÌÎļþ,·½±ãÍ£Ö¹ mongodb directoryperdb:Ϊÿһ¸öÊý¾Ý¿â°´ÕÕÊý¾Ý¿âÃû½¨Á¢Îļþ¼Ð´æ·Å bind_ip:mongodb Ëù°ó¶¨µÄ ip µØÖ·

oplogSize:mongodb ²Ù×÷ÈÕÖ¾ÎļþµÄ×î´ó´óС¡£µ¥Î»Îª Mb,ĬÈÏΪӲÅÌÊ£Óà ¿Õ¼äµÄ 5%

noprealloc:²»Ô¤ÏÈ·ÖÅä´æ´¢

shardsvr:·ÖƬ

configsvr:ÅäÖ÷þÎñ½Úµã

configdb:ÅäÖà config ½Úµãµ½ route ½Úµã

3.6.ÅäÖÃ·ÖÆ¬µÄ±íºÍƬ¼ü

Ê×ÏÈ,ÎÒÃÇÐèÒªµÇ¼µ½Â·Óɽڵã,ÕâÀïÎÒÃǵǼµ½ÆäÖÐÒ»¸ö 10040 ¶Ë¿ÚϵĽڵ㡣ÊäÈëÈçÏÂÃüÁî:

?mongo mongo:10040
use admin
db.runCommand({addshard:"shard1/mongo:10011

,mongo:10012,mongo:10013"})
db.runCommand({addshard:"shard2/mongo:10021

,mongo:10022,mongo:10023"})
db.runCommand({ listshards:1 }) #Áгö shard

¸öÊý
db.runCommand({enablesharding:"friends"});

#´´½¨ friends ¿â
db.runCommand( { shardcollection : "friends.

user",key : {id: 1},unique : true } ) #

ʹÓà user ±íÀ´×ö·ÖƬ,Ƭ¼üΪ id ÇÒΨһ

3.7.ÑéÖ¤

ÖÁ´Ë,Õû¸ö¼¯ÈºµÄ´î½¨Íê³É,ÏÂÃæÎÒÃDzâÊÔ¼¯ÈºµÄ¸ß¿ÉÓÃÐÔ¡£ÏÂÃæ¸ø³ö½ØÍ¼:

Ê×ÏÈÊDz鿴¼¯ÈºµÄ״̬ͼ £º

¿ÉÒÔ¿´µ½,¼¯ÈºÖдæÓÐÊý¾Ý,ÕâÊÇÎÒ֮ǰΪÁ˲âÊÔ´æµÄÊý¾Ý,×¢Òâ,Mongo Ö»ÓÐÊý¾Ý´ïµ½Ò»¶¨Á¿²Å»á·ÖƬ,ËùÓÐÎÒ²åÈëµÄÊý¾Ý±È½Ï´ó,ÿ´Î²âÊÔ¶¼ÊÇ 10w µÄ¼Ç¼²åÈë¡£

ÏÂÃæ,ÎÒ kill µô shard11 ·þÎñ,¿´»á·¢ÉúʲôÇé¿ö?½ØÍ¼ÈçÏÂ:

ÕâÀïÎÒÒѾ­ kill ÁË shard11 µÄ½ø³Ì·þÎñ¡£½ÓÏÂÀ´,ÎÒÃÇÔÚ 10040 ¶Ë¿ÚµÄ·ÓÉ ½ÚµãÊäÈë:db.user.stats()²é¿´×´Ì¬,ÏÔʾÔËÐÐÕý³£¡£½ØÍ¼ÈçÏÂËùʾ:

ͬÑù¿ÉÒÔÔڸ÷Óɽڵã²åÈë 10w Ìõ¼Ç¼,¿´ÊÇ·ñ³É¹¦,ÏÂÃæ¸ø³ö²åÈë½Å±¾, ÄÚÈÝÈçÏÂ:

?for(var i=1;i<=100000;i++)db.user.save({id:i,value1

:"1234567890",value2:"1234567890",value3:"123 4567890"

,value4:"1234567890"});

4.×ܽá

ÕâÆ¬ÎÄÕ¾ͷÖÏíµ½ÕâÀÈôÔÚÑо¿µÄ¹ý³ÌÖÐÓÐʲôÎÊÌâ¿ÉÒÔ¼ÓȺÌÖÂÛ»ò·¢ËÍÓʼþ¸øÎÒ£¬ÎһᾡÎÒËùÄÜΪÄú½â´ð£¬Óë¾ý¹²Ã㣡

 

Ïà¹ØÎÄÕÂ

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

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

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
   
3192 ´Îä¯ÀÀ       33