Como determinar de forma eficiente (programaticamente) se dois conjuntos de dados têm ou não conteúdo idêntico?

8

Dado:

  • uma geodatabase A que contém 100 conjuntos de dados com o nome de um 1 .. a 100
  • um geodatabase B que contém 100 conjuntos de dados chamados b 1 .. b 100

Desejo determinar programaticamente (*) para cada par de conjuntos de dados ( a i , b i ) se eles têm conteúdo idêntico. Como estou comparando 100 pares, preciso de um método de comparação eficiente. Idealmente, toda a comparação levaria apenas alguns segundos.

(*) Nota: mencionei o termo "programático", não porque estou procurando exemplos de código (embora eu os aceite com prazer), mas para enfatizar que estou procurando um método de comparação muito rápido, que nunca possível ao comparar 100 pares de conjuntos de dados manualmente.

Estou planejando implementar esse método de comparação, então o que estou procurando essencialmente é um algoritmo , e não uma ferramenta pronta para uso (a menos que talvez seja de código aberto).

Estou ciente de que provavelmente estou pedindo o impossível, pois isso exigiria a comparação do conteúdo completo dos conjuntos de dados (talvez com as ferramentas do conjunto de ferramentas Gerenciamento de dadosComparação de dados ); ou pelo menos comparar hashes / resumos de conjuntos de dados, mas a geração de resumos também exigiria a análise de todos os dados dos conjuntos de dados.

Portanto, minha melhor abordagem até agora é a seguinte:

  1. Determine primeiro quais pares de conjuntos de dados ( a i , b i ) não podem ter conteúdo idêntico.

  2. Faça uma comparação completa dos dados apenas para os pares de conjuntos de dados restantes.

Minhas perguntas:

  • O ArcGIS calcula automaticamente algum tipo de resumo do conjunto de dados que eu poderia consultar? Se sim, como?

    (Como não conheço nada desse tipo, espero que a resposta seja "não". Por favor, prove que estou errado.)

  • Quais são algumas maneiras eficientes e confiáveis ​​de determinar se dois conjuntos de dados não podem ter conteúdo idêntico?

    (Até agora, considerei comparar os carimbos de data / hora da modificação, embora não saiba o quão confiáveis ​​eles são, e comparar os esquemas dos conjuntos de dados. Qual é a confiabilidade dos carimbos de data e hora em um geodatabase do ArcGIS? Existem outras características do conjunto de dados que podem servir para esse fim?)

stakx
fonte
Relevante, mas não duplicado: gis.stackexchange.com/questions/49427/…
nicksan

Respostas:

2

Você pode criar um campo na tabela de atributos do recurso e calcular um hash, por exemplo , MD5 , no recurso usando IEditEvents ou uma extensão de classe.

O hash seria calculado em uma representação de string do recurso (json ou xml), onde o WKT poderia ser usado para o campo de forma.

Kirk Kuykendall
fonte
Na verdade, eu poderia fazer algo assim. Embora possa não ser fácil fazer com que isso funcione em todos os cenários, sem chance de contornar o cálculo da digestão.
stakx
@stakx Sim, evitar indigestão pode ser complicado :) Uma extensão de classe provavelmente forneceria o maior controle sobre o CRUD.
Kirk Kuykendall
0

Eu olhava o raio-X para comparar esquemas e, em seguida, Comparação de recursos, Comparação de tabelas etc. no conjunto de ferramentas Comparação de dados para comparar o conteúdo quando os esquemas coincidem. Se você já tentou essa abordagem, talvez nos informe onde ela pode ficar aquém.

PolyGeo
fonte
Olá @PolyGeo. Obrigado pelo link, esta ferramenta parece muito útil. No entanto, me fez perceber que esqueci de mencionar que não estou procurando uma ferramenta pronta para uso , mas um algoritmo . Eu alterei minha resposta.
stakx