Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Tabellen Syncronisieren

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von fohnbit, 17 Januar 2014.

  1. fohnbit

    fohnbit Benutzer

    Hallo!

    Ich habe eine Datenbank im Web und eine lokal. Web ist mySQL und lokal ist MS SQL.
    Beide halten Adressen von Kunden.

    Auf beiden wird unabhängig gearbeitet. (Einfügen, löschen, ändern)

    Ich muss nun beide Tabellen abgleichen. Gibt es hier ein "Best Practice" ?

    Ich stelle mir das so vor:
    dbLokal:
    Ich füge eine neue Tabelle "sync" ein.
    Spalten (idWeb, idLocal)

    Die Tabelle im web hat (kann ich nicht ändern):
    id, name, lastChange (id = Int)

    Die Tabelle lokal hat (kann ich nicht ändern):
    id, name, lastChange (id = GUID)

    Vorgehensweise:
    Ich lade alle drei Tabelle komplett in mein Programm (dbWeb, dbLokal und sync)

    1. Schritt (alle löschen die es nicht mehr gibt):
    delete in dbWeb when:
    sync.idWeb ist nicht vorhanden in dbWeb
    delete in dbLocal when:
    sync.idLocal ist nicht vorhanden in dbLocal
    (Wenn schon mal ein Sync erfolgt ist, steht die ID in der sync. Wurde danach lokal oder im web einer gelöscht, fehlt in der Datenbank dbLocal oder dbWeb die ID)

    2. Schritt (Alle Aktualisieren oder neu anlegen):
    Web Datenbank zuerst:
    Insert "name", "lastChange"(on duplicate key update) in dbWeb when:
    dbLocal.Id ist in sync vorhanden
    dbLokal.lastChange > dbWeb.lastChange (When null = 1.1.1970)
    Dann lokal:
    Insert "name", "lastChange"(on duplicate key update) in dbLocal when:
    dbWeb.Id ist in sync vorhanden
    dbWeb.lastChange > dbLocal.lastChange (When null = 1.1.1970)

    oder gibts hier schon andere, bessere Strategien?
     
  2. akretschmer

    akretschmer Datenbank-Guru

    • warum nicht eine zentrale Stelle, wo die Daten sind?
    • wird auf die Tabelle von anderen her referenziert?
    • warum nicht durchgehend GUID verwenden?
    • warum ersetzt Du NULL mit einem x-beliebigen Datum?
     
  3. fohnbit

    fohnbit Benutzer

    Hallo!

    1. Unterschiedliche Programme sollen den selben Adressenstamm haben
    2. Ja, Referenzen gibt es und die muss ich berücksichtigen
    3. Weil es 2 völlig unterschiedliche Programme sind und ich beide nutzen muss. Jedoch sollen diese eben den selben Adressenstamm haben
    4. weil wenn der Eintrag noch nicht vorhanden ist, er NULL prüfen würde. Wußte nicht was er dann macht :)

    Ich beschäftige mich ein bisschen mit Talend Open Studio. Eventuell versuche ich dort das zu machen. Oder sonst vb.net oder Java.

    Danke!
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Das ist kein Argument gegen eine zentrale Datenbank. Eher dafür ;-)
     
  5. fohnbit

    fohnbit Benutzer

    :)

    Nun, die eine Webapplikation nutzt mySQL und die lokale am Windows Server nutzt MS SQL.
    Ich habe keine Lust ein Programm neu zu schreiben :)
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Deine Sache. Ich halte es aber für ein Designfehler.
     
  7. ukulele

    ukulele Datenbank-Guru

    Du solltest vieleicht die Tabelle in gleicher Form als Log Tabelle aufsetzen und alle Datensätze die durch deinen Sync geändert, gelöscht oder geschrieben werden sicherheitshalber mit Zeitstempel da rein donnern. Wenn alles läuft kann man das ja immernoch stoppen.

    Abhängigkeiten auf diese Tabellen sind natürlich extrem wichtig, wie akreschmer schon sagte.

    Ich würde vieleicht zwischen lastupdate durch User und lastsyncdate unterscheiden. Wie wird der Sync ausgelöst, manuell? Oder während an den Beständen gearbeitet wird?
     
  8. fohnbit

    fohnbit Benutzer

    Der Sync soll immer am Abend laufen. Da arbeitet keiner mehr.

    Werds mal probieren.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden