Sem categoria

Deseja se livrar de documentos com conteúdo duplicado?

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

Uso: generate.rb [opções]
   -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

 

Cada documento no Couchbase tem uma chave especificada pelo usuário que pode ser acessada como meta.id na função de mapa da visualização. Na Figura 1 abaixo, há vários documentos carregados no Couchbase Server usando o cliente gerador de dados acima.
 

Etapa 1

Escreva uma função de mapa personalizada que emita o ID do documento (meta.id) de todos os documentos se um determinado padrão duplicado corresponder (primeiro_nome, sobrenome, código postal neste caso).
 

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) {

  se (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

A parte principal do limpador de dados é escrito em Ruby.
 
 
exigir 'couchbase'
 
conexão = Couchbase.conectar(opções)
ddoc = conexão.documentos_de_design[opções[:design_document]]
visualização = ddoc.enviar(opções[:view])
conexão.executar fazer
 visualização.cada(:group => verdadeiro) fazer |doc|
   dup_num = doc.valor.tamanho
   se dup_num > 1
      coloca "left doc #{doc.valor[0]}, “
      # excluir documentos do penúltimo ao último
       conexão.excluir(doc.valor[1..1])
      coloca "removido #{dup_num} duplicata(s)"
   final
 final
final
 
Conecte-se ao Couchbase Server e consulte a exibição. O campo de valor é uma matriz de meta.ids que correspondem a documentos duplicados (nome, sobrenome e código postal correspondentes). Se o tamanho da matriz for maior que 1, excluiremos todos os documentos, exceto o que corresponde ao último meta.id.

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.

A saída do script de limpeza de dados é semelhante a -
 
Conforme mostrado na figura abaixo, os documentos duplicados foram eliminados.
Aproveite!
Agradecemos a Sergey por ter elaborado o código rubi.
Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Don Pinto, gerente principal de produtos da Couchbase

Don Pinto é gerente de produto principal da Couchbase e atualmente está concentrado no avanço dos recursos do Couchbase Server. Ele é extremamente apaixonado por tecnologia de dados e, no passado, foi autor de vários artigos sobre o Couchbase Server, incluindo blogs técnicos e white papers. Antes de ingressar no Couchbase, Don passou vários anos na IBM, onde ocupou a função de desenvolvedor de software no grupo de gerenciamento de informações DB2 e, mais recentemente, como gerente de programa na equipe do SQL Server na Microsoft. Don tem mestrado em ciência da computação e é bacharel em engenharia da computação pela Universidade de Toronto, no Canadá.

4 Comentários

  1. Ele apresenta o erro \"Redução muito grande\".

    1. 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...

  2. É possível fazer isso no N1QL? Deve ser mais rápido do que no cliente.

    1. Matt Ingenthron setembro 2, 2016 em 5:18 am

      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.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.