Проблема MongoDB: производительность шарда медленнее, чем автономная - PullRequest
0 голосов
/ 09 апреля 2019

Я тестировал две модели.Первый имеет отдельный сервер, а другой имеет 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 дней, чтобы разгадать эту загадку.Пожалуйста, помогите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...