MongoDB问题:分片性能比独立性能慢

时间:2019-04-09 03:44:29

标签: database mongodb server

我测试了两个模型。第一个具有独立服务器,另一个具有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天的时间来解决这个谜。请帮忙。

0 个答案:

没有答案