
Não importa se você está combinando dados de duas fontes de dados diferentes, se tem várias compras do mesmo cliente ou se acabou de inserir os mesmos dados em um formulário da Web duas vezes, parece que todos enfrentam o problema de dados duplicados em um momento ou outro.
Nesta postagem do blog, veremos como usar o visualizações no Couchbase Server 2.0 para encontrar campos correspondentes entre documentos e reter os documentos não duplicados. Para fins deste exemplo, suponha que cada documento tenha três campos comuns especificados pelo usuário - primeiro_nome, sobrenome, código postal. Usando o cliente rubi para o Couchbase Server e o falsificador ruby gem, você pode criar um simples gerador de dados para carregar alguns dados duplicados de amostra no Couchbase. Para usar o Ruby como linguagem de programação com o Couchbase, você deve baixar o Ruby SDK aqui.
Aqui está um exemplo de execução:
$ ruby ./generate.rb -help
-h, -hostname HOSTNAME Nome do host ao qual se conectar (padrão: 127.0.0.1:8091)
-u, -user USERNAME Nome de usuário para registro (padrão: nenhum)
-p, -passwd SENHA Senha para registro (padrão: nenhuma)
-b, -nome do banco Nome do bucket ao qual se conectar (padrão: padrão)
-t, -total-records NUM O número total de registros a serem gerados (padrão: 10000)
-d, -duplicate-rate NUM Cada registro NUM-th será duplicado (padrão: 30)
-?, -help Mostrar esta mensagem
$ ruby ./generate.rb -t 1000 -d 5
1000 / 1000

Etapa 1
function (doc, meta) {
emit([doc.first_name + '-' + doc.last_name + '-' + doc.postal_code], meta.id);
}
A função de mapa define quando dois documentos são duplicados. De acordo com a função map definida acima, dois documentos são duplicados quando o nome, o sobrenome e o código postal coincidem. Usamos '-' para evitar o aliasing dos dados quando concatenamos o nome, o sobrenome e o código postal.
Etapa 2
A função de redução é semelhante a -
function (keys, values, rereduce) {
var res = [];
for (var i = 0; i < values.length; i++){
res = res.concat(values[i])
}
return res;
} else {
valores de retorno;
}
}
Após o agrupamento, se houver mais de um valor meta.id, nós os concatenamos para obter uma lista de meta.ids referentes a um documento duplicado.

Etapa 3

Se o número de meta.id's na matriz de valores for maior que 2, há documentos duplicados correspondentes a essa chave. Como mostrado na figura acima, id19 e id20 são documentos duplicados.


Ele apresenta o erro \"Redução muito grande\".
Quando me livro do trecho de código de redução, o erro desaparece. Mas suponho que eu precise desse código de redução...
É possível fazer isso no N1QL? Deve ser mais rápido do que no cliente.
Sim, certamente seria possível fazer algo semelhante com o N1QL na versão 4.0 e posteriores. Este blog foi escrito originalmente para a versão 2.0. Dito isso, o Couchbase é implantado como um sistema distribuído, portanto, um procedimento N1QL em execução teria o mesmo desempenho que um cliente teria. Ele realmente é um cliente para os dados subjacentes. Em alguns casos, você obtém um benefício ao executar o serviço de consulta co-localizado com os dados, mas certamente pode fazer isso com outros programas também.