±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ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.×ܽá
ÕâÆ¬ÎÄÕ¾ͷÖÏíµ½ÕâÀÈôÔÚÑо¿µÄ¹ý³ÌÖÐÓÐʲôÎÊÌâ¿ÉÒÔ¼ÓȺÌÖÂÛ»ò·¢ËÍÓʼþ¸øÎÒ£¬ÎһᾡÎÒËùÄÜΪÄú½â´ð£¬Óë¾ý¹²Ã㣡
|