Я тестировал две модели.Первый имеет отдельный сервер, а другой имеет 3 общих сервера, 1 набор реплик для сервера конфигурации и 1 сервер mongos.Спецификация автономного сервера первой модели и спецификация защищенных серверов второй совпадают.Но неожиданно производительность первой модели выше, чем второй.Почти в три раза быстрее.
Я искал в Google некоторые ключевые слова, такие как «проблема производительности mongodb shard».И я обнаружил, что в этой проблеме есть несколько возможных причин.
1) Недостаточный ключ шарда -> Но я использую хеш-ключ _id для ключа шарда.sh.shardCollection ("test.testCollection", {"_ id": "hashed"});
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 Shell
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 дней, чтобы разгадать эту загадку.Пожалуйста, помогите.