Comment déterminer efficacement (par programme) si deux ensembles de données ont / n'ont pas un contenu identique?


8

Donné:

  • une géodatabase A qui contient 100 jeux de données nommés a 1 .. a 100
  • une géodatabase B qui contient 100 jeux de données nommés b 1 .. b 100

Je veux déterminer par programme (*) pour chaque paire d'ensembles de données ( a i , b i ) si elles ont un contenu identique. Puisque je compare 100 paires, j'ai besoin d'une méthode de comparaison efficace. Idéalement, toute la comparaison ne prendrait que quelques secondes.

(*) Remarque: Je mentionne le terme "programmatique", non pas parce que je recherche des exemples de code (bien que je les accepte volontiers), mais pour souligner que je recherche une méthode de comparaison très rapide, qui ne être possible lors de la comparaison manuelle de 100 paires d'ensembles de données.

Je prévois d'implémenter cette méthode de comparaison moi-même, donc ce que je recherche essentiellement, c'est un algorithme , et non un outil prêt à l'emploi (sauf peut-être lorsqu'il est open-source).

Je suis conscient que je demande probablement l'impossible, car cela nécessiterait de comparer le contenu complet des jeux de données (peut-être avec les outils du jeu d'outils Gestion des donnéesComparaison des données ); ou au moins de comparer les hachages / résumés des ensembles de données, mais pour générer des résumés, il faudrait également parcourir d'abord toutes les données des ensembles de données.

Par conséquent, ma meilleure approche jusqu'à présent est la suivante:

  1. Déterminer d' abord que l' ensemble de données paires ( a i , b i ) ne peuvent éventuellement avoir un contenu identique.

  2. Effectuez une comparaison complète des données uniquement pour les paires d'ensembles de données restantes.

Mes questions:

  • ArcGIS arrive-t-il à calculer automatiquement une sorte de résumé d'ensemble de données que je pourrais interroger? Si c'est le cas, comment?

    (Je ne suis au courant de rien de ce genre, donc je m'attends à ce que la réponse soit «non». Veuillez me prouver le contraire.)

  • Quels sont les moyens très efficaces et fiables de déterminer si deux ensembles de données ne peuvent pas avoir un contenu identique?

    (J'ai jusqu'à présent envisagé de comparer les horodatages de modification, bien que je ne sache pas à quel point ils sont fiables, et de comparer les schémas des ensembles de données. Quelle est la fiabilité des horodatages dans une géodatabase ArcGIS? Existe-t-il d'autres caractéristiques d'ensemble de données qui pourraient servir à cette fin?)


Pertinent, mais pas en double: gis.stackexchange.com/questions/49427/…
nicksan

Réponses:


2

Vous pouvez créer un champ sur la table d'attributs d'entité et calculer un hachage, par exemple MD5 , sur l' entité en utilisant IEditEvents ou une extension de classe.

Le hachage serait calculé sur une représentation sous forme de chaîne de l' entité (json ou xml), où WKT pourrait être utilisé pour le champ de forme.


Je pourrais en fait faire quelque chose comme ça. Bien qu'il ne soit pas facile de faire ce travail dans tous les scénarios sans avoir la possibilité de contourner le calcul du résumé.
stakx

@stakx Oui, éviter les indigestions pourrait être délicat :) Une extension de classe fournirait probablement le plus de contrôle sur CRUD.
Kirk Kuykendall

0

J'examinerais les rayons X pour comparer les schémas, puis comparer les fonctionnalités, comparer les tables, etc. à partir du jeu d'outils de comparaison de données pour comparer le contenu lorsque les schémas correspondent. Si vous avez déjà essayé cette approche, faites-nous savoir où cette approche peut échouer.


Salut @PolyGeo. Merci pour le lien, cet outil semble très utile. Cependant, cela m'a fait réaliser que j'avais oublié de mentionner que je ne cherchais pas un outil prêt à l'emploi , mais un algorithme . J'ai modifié ma réponse.
stakx
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.