luamaral93 / py_mongo

Python MongoDB MS
GNU Affero General Public License v3.0
0 stars 0 forks source link

Benchmark docdb #1

Open luamaral93 opened 1 year ago

luamaral93 commented 1 year ago

Usar a ferramenta de benchmarking integrada do MongoDB (benchRun) é uma opção poderosa para simular cargas de trabalho específicas, incluindo operações insertMany. Aqui está um guia passo a passo sobre como usá-la:

  1. Acessar o Shell do MongoDB: Inicie o shell do MongoDB. Se você estiver usando o MongoDB localmente, pode simplesmente executar:

    mongo

    Se estiver se conectando a um cluster remoto, pode ser necessário fornecer as credenciais e o endereço do host.

  2. Defina sua Carga de Trabalho: Crie uma especificação de carga de trabalho (ou um "documento de operações") para benchRun. Por exemplo:

    var ops = [
       {
           op: "insert",
           ns: "yourDB.yourCollection",
           doc: { x: { "#RAND_INT": [0, 1000000] } },
           multi: true,
           writeCmd: true,
           writeConcern: { w: 1 },
           safe: false,
           batchsize: 1000 // Isso simula insertMany com 1000 documentos por operação
       }
    ];

    No exemplo acima, estamos inserindo documentos em yourDB.yourCollection. O campo x em cada documento é preenchido com um valor aleatório entre 0 e 1.000.000. Estamos fazendo uma operação de inserção em lote com 1000 documentos por lote.

  3. Defina Parâmetros de Execução: Você também pode definir parâmetros como o número total de operações, número de threads, etc. Por exemplo:

    var options = {
       seconds: 60,  // Duração da carga de trabalho em segundos
       parallel: 10  // Número de threads paralelos
    };
  4. Execute benchRun: Agora você pode executar sua carga de trabalho com a função benchRun:

    res = benchRun({
       ops: ops,
       host: "localhost",
       parallel: options.parallel,
       seconds: options.seconds
    });
    
    printjson(res);
  5. Avalie os Resultados: A função benchRun retornará um objeto com estatísticas sobre a execução da carga de trabalho, como o número total de operações realizadas, o número de operações por segundo, latências médias, etc.

Lembre-se de ajustar os parâmetros de acordo com suas necessidades específicas e o tamanho do ambiente em que está testando. Além disso, recomenda-se testar em um ambiente separado ou não produtivo para evitar afetar a produção com cargas de trabalho intensivas.

luamaral93 commented 1 year ago
benchRun({
    ops: [
        {
            op: "insert",
            ns: "mydb.mycollection",
            doc: {
                field1: "value1",
                field2: "value2",
                // ... outros campos que você deseja inserir
            }
        }
    ],
    seconds: 10,    // por quanto tempo o teste será executado
    parallel: 10,   // número de threads simultâneos
    writeConcern: { j: false }  // desativa a confirmação de escrita no journal para melhorar o desempenho
})
luamaral93 commented 1 year ago
var generateDoc = function(num) {
    return {
        field1: "value1_" + num,
        field2: "value2_" + num,
        // ... outros campos que você deseja inserir
    };
};

benchRun({
    ops: [
        {
            op: "noop",
            ns: "mydb.mycollection",
            code: function() {
                var bulk = db.mycollection.initializeUnorderedBulkOp();
                for (var i = 0; i < 50; i++) {
                    bulk.insert(generateDoc(i));
                }
                bulk.execute();
            }
        }
    ],
    seconds: 10,    // por quanto tempo o teste será executado
    parallel: 10    // número de threads simultâneos
})
luamaral93 commented 1 year ago
  1. Primeiro, crie uma função para gerar os documentos:

    db.system.js.save({
    _id: "generateDocs",
    value: function(num) {
        var docs = [];
        for (var i = 0; i < num; i++) {
            docs.push({
                field1: "value1_" + i,
                field2: "value2_" + i
            });
        }
        return docs;
    }
    });
  2. Em seguida, execute o benchmark usando a operação eval do benchRun para inserir os documentos:

    benchRun({
    ops: [
        {
            op: "eval",
            ns: "mydb.mycollection",
            code: function() {
                var docs = generateDocs(50);
                db.mycollection.insertMany(docs);
            }
        }
    ],
    seconds: 10,    // por quanto tempo o teste será executado
    parallel: 10    // número de threads simultâneos
    })