Zum Hauptinhalt springen

Synchronisation

Diese Funktionalität steht ab MapEdit Version 23.1.52 zur Verfügung und kann nur mit MapEdit Desktop und MapEdit Professional genutzt werden.

Bitte beachten

Die Synchronisation kann nur für Datenbanken die das MapEdit Datenmodel haben genutzt werden!

Wozu dient die Synchronisation?

Mit der Synchronisation können beim jedem starten eines Projektes die Datensätze einen Tabelle in Datenbank A mit einer Tabelle in Datenbank B synchronisiert werden.

Beispiel:
Die Gemeinde Summerlin hat eine Datenbank mit dem Namen "BASIS" in der es eine Tabelle "STRASSEN" gibt mit allen Strassen der Gemeinde.
Die Gemeinde hat des weiteren die Datenbanken "GAS" und "WASSER". In diesen beiden Datenbanken will der Kunde die exakt gleichen Strassen aus der Datenbank BASIS verwenden.

Um diese zu bewerkstelligen gibt es unter anderem zwei Ansätze:

  • Ohne Synchronisierung:
    Man bindet via Synonymen, Rechten, DBLinks etc die Datenbank BASIS die Datenbanken GAS und WASSER direkt ein.
    Vorteil: Einfach und keinen doppelten Daten.
    Nachteile: je nach Datenbanksystem und Kombination von Datenbanksystemen (Oracle,Postgres,Sqlite etc) nicht immer performant oder teilweise garnicht möglich. Beispielsweise wenn die Datenbanken nicht auf dem gleichen Server Rechner stehen oder gar verschiedene Datenbanksystem bestehen, also eine Mischung aus Oracle und Postgres und Sqlite.
  • Mit Synchronisierung:
    Man hält alle Daten redundant/doppelt d.h. man kopiert die Strassen Daten in die Datenbanken WASSER und GAS und hält diese durch Synchronisierung aktuell.
    Vorteil: Abfrage Performant
    Nachteil: Änderungen müssen protokolliert werden und beim starten muss synchronisiert werden.
Warnung

Es wird geraten die Synchronisierung wirklich nur in Ausnahmefällen zu verwenden wo dies wirklich notwendig ist, da diese Funktionalität mit einem extremen Overhead verbunden ist, da:

  • bei jeden Start des Programmes zusätzliche Prüfungen ausgeführt werden müssen ob eine Synchronisierung notwendig ist.
  • Datensätze kopiert werden müssen, was Zeit beim starten braucht.
  • In der Quelldatenbank wird das einfügen, updaten und löschen der betroffenen Tabellen langsamer weil diese Aktionen Protokolliert werden müssen.
  • Die Datenmenge und somit der Festplattenplatz wird durch die redundante Datenhaltung jeweils verdoppelt.

Begriffe

Quelltabelle:
Tabelle in der die originalen Datensätze stehen.

Zieltabelle:
Tabelle in der eine Kopie der Datensätze der Quelltabelle abgelegt werden sollen.

Vorbereitung der Synchronisation

Um die Synchronisation nutzen zu können muss die Datensatzprotokollierung und die "Erweiterte Protokollierung" in der Quelltabelle eingeschalten sein.

Führen Sie dazu alle Schritte des Kapitel "Protokollierung von Datensatzänderungen" aus. https://help.mapedit.de/admin-guide/mapedit-appbuilder/database-connections/structure/tables#protokollierung-von-datensatz%C3%A4nderungen

Wichtige Bedingungen die erfüllt sein müssen

Die Ziel und Quelltabelle muss den gleichen Namen haben.

In der Ziel- und Quelltabelle muss folgendes gegeben sein:

  • Ein Feld UFID vom Typ Text mit der Länge 36 Zeichen.
  • Ein Index auf das Feld UFID.

In der Quelltabelle muss unter "Tabelle->Mehr" die Datensatzprotokollierung eingeschalten sein. Es ist nicht notwendig die Datensatzprotokollierung in der Zieltabelle einzuschalten.

Achten Sie darauf das die Datenstruktur der Ziel- und Quelltabelle exakt gleich ist. Das heist das alle Feldnamen und Feldtypen exakt gleich sind. Ist die nicht gegeben kann die Synchronisation ggf. fehlschlagen.

Warnung

Die Ziel Tabelle sollte an Anfang keine Datensätze enthalten. Sie sollen die Ziel Tabelle also vorab leeren. Sie sollten die Ziel Tabelle auch für Eingaben durch den Anwender sperren.
Wenn dort bereits Datensätze stehen und wenn es Eindeutigkeitsindexe auf Feldern gibt, dann wird das Synchronisieren fehlschlagen da sonst dopplete Datensätze entstehen würden.

Warnung

Bei der Synchronisierung werden in der Ziel Tabelle die FIDs der Datensätze nicht beibehalten sondern neu vergeben. Es würden sonst doppelte FIDs entstehen.

Wenn sie die FID mit übertragen wollen können sie optional in der Zieltabelle ein Feld FID_ORIGIN vom Typ Number(10) anlegen. Das Programm kopiert dann die Originale FIDs der Quell Tabelle in diese Feld.

Es ist deshalb wichtig das keine Relationen von anderen Tabellen auf FIDs der Zieltabellen gemacht werden! Verwenden sie deshalb, wenn es bei zu synchronisierenden Tabellen Relationen gibt statt der FID immer das Feld UFID oder FID_ORIGIN.

Konfigurieren der Synchronisation

Legen Sie unter "Datenbanken->Synchronisation" mit dem "Neu" Knopf eine neue Einstellung an.

Fügen sie mit dem "Plus" Knopf nun für jede Tabelle die synchronisiert werden soll einen Eintrag hinzu.

Warnung

Sind diese Bedingungen (siehe oben) nicht erfüllt dann erscheinen die Tabellen nicht in der Auswahl.

Weisen Sie danach in dem Projekt das die Synchronisierung verwenden soll diese neue Einstellung hinzu.

Ausführen der Synchronisation

Wenn einem Projekt eine Synchronisationseinstellung zugewiesen ist, dann führt das Programm automatisch bei jedem öffnen des Projektes mit MapEdit Desktop/Professional die Synchronisation aus. Dieser Vorgang wird im einzelnen im Programm Log Fenster protokolliert.

Die Synchronisation kann auch zu jeder beliebigen Zeit nach dem Start von MapEdit manuell ausgeführt werden.

Im Ribbon Designer stehen ihnen dazu die zwei Befehle
"Synchronisierung" und "Synchronisierung (Full Force)"
zur Verfügung.

Der Unterschied der Befehle wird im nachfolgenden erläutert.

Synchronisierung

Dies wird beim Programmstart und beim drücken des "Synchronisation" Knopfes ausgeführt. Hierbei werden nur die Datensätze synchronisiert die seit der letzten Synchronisierung geändert wurden. Des weiteren werden alle offenen Dialoge neu abgerufen.

Das Programm verwendet dazu intern die Felder "record_log_date_utc" und "sync_date_utc" der Tabelle ME_TABLE.

Das Feld "record_log_date_utc" in der Quelldatenbank enthält das UTC Datum an dem zum letzten mal Datensätze der Tabelle hinzugefügt, geändert oder gelöscht wurden.

Das Feld "sync_date_utc" der Quelldatenbank enthält das UTC Datum an dem das letzte mal synchronisiert wurde.

D.h. das Programm vergleicht für jede Tabelle die in der Synchronisierung eingerichtet die Datumsangaben in "record_log_date_utc" und "sync_date_utc".

Ist das Datum in "record_log_date_utc" neuer als in "sync_date_utc" dann wird die Synchronisierung gestartet und mittels der Tabelle ME_RECORD_LOG ermittelt welche Datensätze genau betroffen sind und diese werden dann sychronisiert. In ME_RECORD_LOG steht im Detail welche Datensätze eingefügt, geändert oder gelöscht wurden.

Ist das Datum in "record_log_date_utc" älter als in "sync_date_utc" dann wird keine Synchronisierung ausgeführt.

Um zu erkennen welche Datensätze zusammen gehören haben alle Datensätze ein Feld UFID mit einer weltweit eindeutigen ID. Ist dieses Feld aus irgend welchen gründen nicht gefüllt, funktioniert die Synchronisierung für diese nicht! Das Feld UFID und die Tabelle ME_RECORD_LOG wird von einer Feature Rule gefüllt!

Warnung

Tabellen die für die Synchronisierung genutzt werden dürfen nur über MapEdit Client/Professional bearbeitet werden da nur diese die Feature Rule ausgeführen.
Händische Änderungen via SQL oder SQL Tools lösen keine Feature Rules aus und damit werden UFID und ME_RECORD_LOG nicht gefüllt.

Wenn sie Datensätze händisch manipulierem, müssen Sie die UFID mittels dem Schalter "Leere RECODR_UIDs füllen und Datensatz Log aktualisieren" füllen. siehe Kapitel "Protokollierung von Datensatzänderungen"

Hinweis

Diese Synchronisierung ist erheblich schneller als "Synchronisierung (Full Force)".

Hinweis

Bei Verwendung der Variantenplanung wird die Synchronisierung vom Programm erst nach der Auswahl der Planungsvariante ausgeführt.

Hinweis

Wenn Sie eine Ziel Tabelle händisch (via SQL) leeren und sie wollen das alle Datensätze neu vom programm synchronisert werden dann muss das Feld sync_date_utc in der Tabelle ME_TABLE auf null gesetzt werden. Benutzen Sie stattdessen besser die "Full Force Synchronisierung".

Beachten Sie das hier absichtlich das Datum in UTC (Universal Time/GMT) und nicht das Datum des Clients verwendet wird. Dies ist nötig weil es Kunden gibt deren Clients in unterschiedlichen Zeitzonen arbeiten.

Synchronisierung (Full Force)

Dies wird beim drücken des "Synchronisierung (Full Force)" Knopfes ausgeführt.

Hierbei werden ALLE Datensätze komplett synchronisiert unabhängig wann die letzte Synchronisierung erfolgt ist, unabhängig davon ob diese wirklich geändert wurden oder nicht. Des weiteren werden alle offenen Dialoge neu abgerufen.

Die kann genutzt werden wenn Synchronisierungen fehlgeschlagen sind oder wenn man eine komplette Synchronisation mit Gewalt erzwingen will.

Hinweis

Diese Synchronisierung ist erheblich langsamer als der Befehl "Synchronisierung" da hier immer alle Datensätze neu übertragen werden.

Wenn Sie also eine Tabelle mit 1 Millionen Datensätzen haben, dann werden mit dieser "Full Force" Synchronisierung auch 1 Millionen Datensätze übertragen, was sehr lange dauern kann, während mit der "standard" Synchronisierung im Normalfall nur sehr sehr wenige Datensätze übertragen werden.