Tag Archives: parametros

MongoDB – Dicas – App – Defina a escrita apropriada

1.7 App, utilize os drivers atuais!

Web App Saga!

No Mongo existem questionamentos sobre a qualidade da persistência de dados comparado aos bancos relacionais. Mas, testes comprovaram que falhas de ACID normalmente são originadas por codificação ruim, e não pela base de dados.

write concerns

Isso porque ao contrário das bases relacionais que por natureza tem escrita bloqueante (podendo ser desabilitada manualmente via NOLOCKs). No Mongo podemos definir o nível de garantia de persistência write concerns.

Essas configurações podem ser definidas a nível de:

  • base
  • conexão
  • coleção
  • granularidade fina: a cada operação

Mais poderes, Grandes responsabilidades

É tarefa do arquiteto determinar o write concern correto.

A norma padrão garante apenas performance genérica de escrita, mas que pode não atender ao nosso cenário, considerando a concorrência de r/w da base.

mongo_dicas_writeconcern

Opções de write concerns:

Write Acknowledged (padrão e mais veloz)

O mongod confirma a execução da operação de write dos dados in-memory, permitindo ao cliente detectar erros na operação como chaves duplicadas, falhas de comunicação, etc.

Journal Acknowledged (segura e lenta)

O mongod confirma a operação apenas após o seu registro no log com sucesso. Isto permite a sobrevivência a uma queda do serviço, garantindo maior durabilidade.

Replica Acknowledged (apenas para replica sets)

O mongod confirma se o dado não apenas foi escrito no log da réplica primary como nas demais réplicas (configurável quantidade de réplicas para confirmação).

Majority (para cenários com replica sets)

Define a maioria das réplicas também devem confirmar que realizaram a escrita dos dados e dos logs, sempre incluindo a réplica primary.

Data Center Awareness: (opção mais avançada)

Permite customizar a garantia de escrita em ambientes multi-server.

Configuração a nível de operação

Podemos passar um segundo parâmetro para a função de escrita (insert, aqui).

Este segundo parâmetro informa um obj com o tipo de write concern (w:1 padrão) e se deve aguardar pela persistência nos logs ou não (j:true).

db.collection.insert({data}, {w:1, j:true})

Para mais detalhes consulte a documentação oficial do MongoDB.

Next stop MongoDB. Disembark on the left.

Keep Programming!

I Love ES 6 – News Features – rest parameters

Chega de teoria! #4 – rest parameters

Continuando a saga para conhecer agora as novas features do ES6, projetadas para nos ajudar no desenvolvimento de nossos aplicativos. Vamos lá:

Hoje o ES6 apresenta o quarto recurso, o rest parameters. Este carinha resolveu o problema antigo causado pelo obj arguments, permitindo diferenciar nossos parâmetros.

Index.js

JS atual:

var sum = function() {

    var result = 0;

    for (var i=0; i < arguments.length; i++) {
        result += arguments[i];
    }

    return result;
}

sum(1, 4, 5);

Retorna 10. Aqui eu utilizo o obj arguments para pegar todos os parâmetros de uma função.

Problemas dos arguments

  1. O obj se assemelha a um array, mas não é
  2. Todos os parâmetros da função são automaticamente atribuídos ao arguments. Não há um modo claro para diferenciar os parâmetros

Para resolver esses problemas, surgiu o ES6/Rest Parameters.

Agora no ES6

Modo soma reescrito

function sum(...numbers) {

  let result = 0

  numbers.forEach((number) => {
    result += number
  })

  return result
}

sum(1, 4, 5)

Ou do modo mais funcional:

const sum = (...numbers) => 
    numbers.reduce((acc, current) => acc + current, 0)
sum(1, 4, 5)

Um pouco mais

Suponha o exemplo da soma, só que agora o primeiro parâmetro é onde a soma inicia e os demais parâmetros seriam os números a serem somados:

function sum(start, ...numbers) {

  let result = start;

  numbers.forEach((number) => {
    result += number;
  });

  return result;
}

sum(10, 1, 4, 5);

Ou

const sum = (start, ...numbers) => 
    numbers.reduce((acc, current) => acc + current, start)
sum(10, 1, 4, 5)

Então é isso treine bastante, e fiquei familiarizado com estes novos recursos.

Ok! Sobre as FEATURES do ES6 é tudo o que eu tenho a dizer.