¿Cómo determinar eficientemente (mediante programación) si dos conjuntos de datos tienen / no tienen contenido idéntico?

8

Dado:

  • una geodatabase A que contiene 100 conjuntos de datos con nombre de un 1 .. un 100
  • una geodatabase B que contiene 100 conjuntos de datos llamados b 1 .. b 100

Quiero determinar mediante programación (*) para cada par de conjunto de datos ( a i , b i ) si tienen contenido idéntico. Como estoy comparando 100 pares, necesito un método de comparación eficiente. Idealmente, toda la comparación tomaría solo unos segundos.

(*) Nota: menciono el término "programático", no porque esté buscando ejemplos de código (aunque con mucho gusto los aceptaría), sino para enfatizar que estoy buscando un método de comparación muy rápido, que nunca ser posible al comparar 100 pares de conjuntos de datos manualmente.

Estoy planeando implementar este método de comparación, así que lo que esencialmente estoy buscando es un algoritmo y no una herramienta lista para usar (a menos que sea cuando sea de código abierto).

Soy consciente de que probablemente pregunte lo imposible, ya que esto requeriría comparar el contenido completo de los conjuntos de datos (quizás con las herramientas en el conjunto de herramientas Gestión de datosComparación de datos ); o al menos comparar hashes / resúmenes de conjuntos de datos, pero generar resúmenes también requeriría revisar primero todos los datos de los conjuntos de datos.

Por lo tanto, mi mejor enfoque hasta ahora es el siguiente:

  1. Determine primero qué pares de conjuntos de datos ( a i , b i ) no pueden tener un contenido idéntico.

  2. Realice una comparación de datos completa solo para los pares de conjuntos de datos restantes.

Mis preguntas:

  • ¿ArcGIS puede calcular automáticamente algún tipo de resumen de conjunto de datos que podría consultar? ¿Si es así, cómo?

    (No tengo conocimiento de nada de ese tipo, así que espero que la respuesta sea "no". Por favor, demuéstrame que estoy equivocado).

  • ¿Cuáles son algunas formas muy eficientes y confiables de determinar si dos conjuntos de datos no pueden tener contenido idéntico?

    (Hasta ahora he considerado comparar marcas de tiempo de modificación, aunque no sé qué tan confiables son, y comparar los esquemas de los conjuntos de datos. ¿Qué tan confiables son las marcas de tiempo en una geodatabase de ArcGIS? ¿Hay otras características de conjunto de datos que podrían servir para este propósito?)

stakx
fuente
Relevante, pero no duplicado: gis.stackexchange.com/questions/49427/…
nicksan

Respuestas:

2

Puede crear un campo en la tabla de atributos de la función y calcular un hash, por ejemplo , MD5 , en la función utilizando IEditEvents o una extensión de clase.

El hash se calcularía en una representación de cadena de la característica (ya sea json o xml), donde WKT podría usarse para el campo de forma.

Kirk Kuykendall
fuente
De hecho, podría hacer algo así. Aunque podría no ser fácil hacer que esto funcione en todos los escenarios sin una posibilidad de eludir el cómputo de resumen.
stakx
@stakx Sí, evitar la indigestión puede ser complicado :) Una extensión de clase probablemente proporcionaría el mayor control sobre CRUD.
Kirk Kuykendall
0

Miraría a los rayos X para comparar esquemas y luego a Comparación de características, Comparación de tablas, etc. del conjunto de herramientas Comparación de datos para comparar los contenidos cuando los esquemas coincidan. Si ya ha intentado este enfoque, quizás nos diga dónde puede fallar este enfoque.

PolyGeo
fuente
Hola @PolyGeo Gracias por el enlace, esta herramienta se ve muy útil. Sin embargo, me di cuenta de que olvidé mencionar que no estoy buscando una herramienta lista para usar , sino un algoritmo . He modificado mi respuesta.
stakx