Wie kann effizient (programmgesteuert) festgestellt werden, ob zwei Datensätze identischen Inhalt haben oder nicht?

8

Gegeben:

  • eine Geodatabase A , die 100 Datensätze genannt enthält eine 1 .. a 100
  • eine Geodatabase B , die 100 Datensätze mit den Namen b 1 .. b 100 enthält

Ich möchte programmgesteuert (*) für jedes Datensatzpaar ( a i , b i ) bestimmen , ob sie identischen Inhalt haben. Da ich 100 Paare vergleiche, brauche ich eine effiziente Vergleichsmethode. Im Idealfall würde der gesamte Vergleich nur wenige Sekunden dauern.

(*) Hinweis: Ich erwähne den Begriff "programmatisch", nicht weil ich nach Codebeispielen suche (obwohl ich sie gerne akzeptieren würde), sondern um zu betonen, dass ich nach einer sehr schnellen Vergleichsmethode suche, die es niemals geben würde möglich sein, wenn 100 Datensatzpaare manuell verglichen werden.

Ich plane, diese Vergleichsmethode selbst zu implementieren. Daher suche ich im Wesentlichen nach einem Algorithmus und nicht nach einem gebrauchsfertigen Tool (es sei denn, es handelt sich möglicherweise um Open Source).

Mir ist bewusst, dass ich wahrscheinlich nach dem Unmöglichen frage, da dies den Vergleich des vollständigen Inhalts der Datensätze erfordern würde (möglicherweise mit den Tools im Toolset DatenverwaltungDatenvergleich ). oder zumindest das Vergleichen von Dataset-Hashes / Digests, aber das Generieren von Digests würde auch erfordern, dass zuerst alle Daten der Datasets durchgesehen werden.

Daher ist mein bisher bester Ansatz der folgende:

  1. Bestimmen Sie zuerst, welche Datensatzpaare ( a i , b i ) möglicherweise nicht identischen Inhalt haben können.

  2. Führen Sie einen vollständigen Datenvergleich nur für die verbleibenden Datensatzpaare durch.

Meine Fragen:

  • Berechnet ArcGIS automatisch eine Art Dataset-Digest, den ich abfragen könnte? Wenn das so ist, wie?

    (Mir ist nichts dergleichen bekannt, daher erwarte ich, dass die Antwort "Nein" lautet. Bitte beweisen Sie mir das Gegenteil.)

  • Was sind einige sehr effiziente und zuverlässige Methoden, um festzustellen, ob zwei Datensätze möglicherweise nicht identischen Inhalt haben können?

    (Ich habe bisher überlegt, Änderungszeitstempel zu vergleichen, obwohl ich nicht weiß, wie zuverlässig diese sind, und die Schemas der Datensätze zu vergleichen. Wie zuverlässig sind Zeitstempel in einer ArcGIS-Geodatabase? Gibt es andere Datensatzmerkmale, die für diesen Zweck dienen könnten?)

stakx
quelle
Relevant, aber nicht dupliziert: gis.stackexchange.com/questions/49427/…
Nicksan

Antworten:

2

Sie können ein Feld in der Feature-Attributtabelle erstellen und einen Hash, z. B. MD5 , für das Feature mithilfe von IEditEvents oder einer Klassenerweiterung berechnen .

Der Hash wird anhand einer Zeichenfolgendarstellung des Features (entweder json oder xml) berechnet, wobei WKT für das Formfeld verwendet werden kann.

Kirk Kuykendall
quelle
Ich könnte tatsächlich so etwas tun. Obwohl es möglicherweise nicht einfach ist, diese Funktion in jedem Szenario durchzuführen, ohne die Digest-Berechnung zu umgehen.
Stakx
@stakx Ja, Verdauungsstörungen zu vermeiden könnte schwierig sein :) Eine Klassenerweiterung würde wahrscheinlich die meiste Kontrolle über CRUD bieten.
Kirk Kuykendall
0

Ich würde mir Röntgen ansehen , um Schemas zu vergleichen, und dann Feature Compare, Table Compare usw. aus dem Datenvergleichs- Toolset, um Inhalte zu vergleichen, wenn Schemas übereinstimmen. Wenn Sie diesen Ansatz bereits ausprobiert haben, teilen Sie uns möglicherweise mit, wo dieser Ansatz möglicherweise zu kurz kommt.

PolyGeo
quelle
Hallo @PolyGeo. Vielen Dank für den Link, dieses Tool sieht sehr nützlich aus. Mir wurde jedoch klar, dass ich vergessen hatte zu erwähnen, dass ich nicht nach einem gebrauchsfertigen Tool suche , sondern nach einem Algorithmus . Ich habe meine Antwort geändert.
Stakx