我测试了两个模型。第一个具有独立服务器,另一个具有3个共享服务器,1个用于配置服务器的副本集和1个mongos服务器。第一个模型的独立服务器规格与第二个模型的分片服务器规格相同。但是出乎意料的是,第一个模型的性能比第二个模型快。快将近三倍。
我在Google中搜索了一些关键字,例如“ mongodb碎片性能问题”。 我发现此问题可能有某些原因。
1)分片密钥不足 ->但是我使用_id哈希键作为分片键。 sh.shardCollection(“ test.testCollection”,{“ _ id”:“已散列”}));
2)文件尺寸问题 ->当我尝试插入测试时,只需将{number:n}数据放入文档中。我认为这不会造成问题。
没有这些理论,我不知道是什么导致性能下降。
我使用jmeter进行测试。
1)用于插入测试的采样器
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.BulkWriteOptions;
import com.mongodb.client.model.InsertOneModel;
import com.mongodb.client.model.WriteModel;
try {
MongoCollection<Document> collection = vars.getObject("collection");
List<? extends WriteModel<? extends Document>> datas = new ArrayList<>();
List<WriteModel<Document>> list = new ArrayList<>();
List<Document> documentList = new ArrayList<>();
for(int i = 0 ; i < 2000; i++){
Document document = new Document("number",i);
// documentList.add(document);
list.add(new InsertOneModel<Document>(document));
}
//collection.insertMany(documentList);
collection.bulkWrite(list, new BulkWriteOptions().ordered(false));
}
catch (Exception e) {
}
2)这就是我设置环境的方式。
shard1
ssh 172.16.9.17
root /home/stack/mongo $ mongod --shardsvr --dbpath /home/stack/mongo/shard1 --port 40001 --bind_ip 0.0.0.0 --fork --logpath /var/log/mongod.log
shard2
ssh.172.16.9.15
root /home/stack/mongo $ mongod --shardsvr --dbpath /home/stack/mongo/shard2 --port 40002 --bind_ip 0.0.0.0 --fork --logpath /var/log/mongod.log
shard3
ssh.172.16.9.20
root /home/stack/mongo $ mongod --shardsvr --dbpath /home/stack/mongo/shard3 --port 40003 --bind_ip 0.0.0.0 --fork --logpath /var/log/mongod.log
config-master
ssh 172.16.8.40
mongod --configsvr --replSet configSet18 --port 10000 --bind_ip 0.0.0.0 --dbpath /home/stack/mongo/config0 --fork --logpath /var/log/mongod.log
config-slave
ssh 172.16.8.41
mongod --configsvr --replSet configSet18 --port 10001 --dbpath /home/stack/mongo/config1 --bind_ip 0.0.0.0 --fork --logpath /var/log/mongod.log
mongos
ssh 172.16.8.42
mongos --configdb configSet18/172.16.8.40:10000 --port 50000 --bind_ip 0.0.0.0 -fork --logpath /var/log/mongod.log
mongos壳
ssh 172.16.8.42
mongo --port 50000
db.runCommand({addshard:"172.16.9.17:40001"});
db.runCommand({addshard:"172.16.9.15:40002"});
db.runCommand({addshard:"172.16.9.20:40003"});
db.runCommand({enableSharding:"test"});
sh.shardCollection("test.testCollection",{"_id":"hashed"});
我花了大约7天的时间来解决这个谜。请帮忙。