我想在本地服务器上运行碎片。请一步一步地帮助我。我想要在我的cpu(16核心)上创建多个单神实例。顺便问一下,我是由700万个文档组成的集合,它们是否在我运行碎片时丢失了?
我使用这个脚本在一个replicaSet上创建3个碎片:
# clean everything up
echo "killing mongod and mongos"
killall mongod
killall mongos
echo "removing data files"
rm -rf /media/mongo/data/config
rm -rf /media/mongo/data/shard*
rm -rf /data/config
rm -rf /data/shard*
# For mac make sure rlimits are high enough to open all necessary connections
ulimit -n 2048
# start a replica set and tell it that it will be shard0
mkdir -p /media/mongo/data/shard0/rs0
mongod --replSet s0 --logpath "/var/log/mongodb/s0-r0.log" --dbpath /media/mongo/data/shard0/rs0 --port 37017 --fork --shardsvr --smallfiles
sleep 5
# connect to one server and initiate the set
mongo --port 37017 << 'EOF'
config = { _id: "s0", members:[
{ _id : 0, host : "localhost:37017" },
]};
rs.initiate(config)
EOF
# start a replicate set and tell it that it will be a shard1
mkdir -p /media/mongo/data/shard1/rs0
mongod --replSet s1 --logpath "/var/log/mongodb/s1-r0.log" --dbpath /media/mongo/data/shard1/rs0 --port 47017 --fork --shardsvr --smallfiles
sleep 5
mongo --port 47017 << 'EOF'
config = { _id: "s1", members:[
{ _id : 0, host : "localhost:47017" },
]};
rs.initiate(config)
EOF
# start a replicate set and tell it that it will be a shard2
mkdir -p /media/mongo/data/shard2/rs0
mongod --replSet s2 --logpath "/var/log/mongodb/s2-r0.log" --dbpath /media/mongo/data/shard2/rs0 --port 57017 --fork --shardsvr --smallfiles
sleep 5
mongo --port 57017 << 'EOF'
config = { _id: "s2", members:[
{ _id : 0, host : "localhost:57017" },
]};
rs.initiate(config)
EOF
# now start 3 config servers
rm cfg-a.log cfg-b.log cfg-c.log
mkdir -p /media/mongo/data/config/config-a /media/mongo/data/config/config-b /media/mongo/data/config/config-c
mongod --logpath "/var/log/mongodb/cfg-a.log" --dbpath /media/mongo/data/config/config-a --port 57040 --fork --configsvr --smallfiles
mongod --logpath "/var/log/mongodb/cfg-b.log" --dbpath /media/mongo/data/config/config-b --port 57041 --fork --configsvr --smallfiles
mongod --logpath "/var/log/mongodb/cfg-c.log" --dbpath /media/mongo/data/config/config-c --port 57042 --fork --configsvr --smallfiles
# now start the mongos on port 27018
rm mongos-1.log
sleep 5
mongos --port 27018 --logpath "/var/log/mongodb/mongos-1.log" --configdb localhost:57040,localhost:57041,localhost:57042 --fork
echo "Waiting 60 seconds for the replica sets to fully come online"
sleep 60
echo "Connnecting to mongos and enabling sharding"
# add shards and enable sharding on the test db
mongo --port 27018 << 'EOF'
db.adminCommand( { addshard : "s0/"+"localhost:37017" } );
db.adminCommand( { addshard : "s1/"+"localhost:47017" } );
db.adminCommand( { addshard : "s2/"+"localhost:57017" } );
db.adminCommand({enableSharding: "IBSng"});
EOF
sleep 5
echo "Done setting up sharded environment on localhost"但我不知道如何在我的收藏品上添加碎片钥匙。我的速度写/读(I/O)非常重要。
发布于 2014-10-22 08:31:18
分片将无助于提高查询性能,如果它是在一台拥有大量文档(700万不小)的机器上完成的。
原因:MongoDB使用内存映射文件,这意味着数据和索引的副本存储在RAM中,每当有查询时,它就从RAM本身获取数据和索引。在当前的场景中,查询速度较慢,因为数据+索引的大小太大,无法在RAM中使用,因此从磁盘获取数据需要大量的I/O活动,这是瓶颈。
还能做些什么来提高查询性能(incase切分不是一个选项):
Note -即使您实现了上述点,仍然有一个限制,可以提高多少查询性能,可以期望读/写吞吐量的线性缩放。
https://stackoverflow.com/questions/26254791
复制相似问题