Frage

Ich habe einen Test-Server, die Daten aus einer Testdatenbank verwendet. Wenn ich Tests fertig bin, wird es auf die Live-Datenbank verschoben.

Das Problem ist, dass ich andere Projekte, die jetzt auf die Daten verlassen in der Produktion, so habe ich ein Skript auszuführen, das die Daten aus den Tabellen packt ich brauche, löscht die Daten im Test DB und fügt die Daten aus der Live-DB.

Ich habe versucht, einen Weg, um herauszufinden, dieses Modell zu verbessern. Das Problem ist nicht so sehr in der Migration, da nur die Daten einmal aktualisiert wird oder zweimal pro Woche (ohne Zutun meinerseits). Das Problem wird mit der Migration erfolgt nur, wenn es muss. Ich mag meine Migration Skript enthält eine schnelle Überprüfung gegen die Live-Tabellen und die Testtabellen und, falls nötig, den Zug machen. Wenn es nicht Updates gewesen, beendet das Skript.

Auf diese Weise kann ich den Update-Skript in meinem anderen Skripte enthält und nicht zu befürchten, wenn die Daten synchron sind.

Ich kann nicht Zeitstempel verwenden. Zum einen habe ich keine Kontrolle über die Tabellen auf der Live-Seite, sobald es live geht, und auch, weil es ein bisschen albern scheint bulk die Tische mehr für conviencience auf.

Ich habe versucht, einen „SHOW TABLE STATUS VON livedb“ zu tun, sondern weil die Tabellen alle InnoDB sind, gibt es keine „Update Time“, plus, scheint es, dass die „Zeit der“ heute Morgen war, mich zu der Annahme, dass die Datenbank gesichert und neu erstellt täglich.

Gibt es eine andere Eigenschaft in der Tabelle, welche der beiden zeigen würde neuere ist? A "Newest Row Datum" vielleicht?

War es hilfreich?

Lösung

Kurz gesagt: Machen Sie die entwicklungs Live-Aktualisierung erste Klasse in Ihrer Anwendung. Statt auf dem Datenbank-Engine von je Sie mit den notwendigen Informationen zu versorgen, damit Sie eine Entscheidung treffen (aktualisieren oder nicht zu aktualisieren ... das ist die Frage ), implementieren nur als Teil von Ihre Bewerbung. Andernfalls Sie versuchen, einen runden Pflock in ein quadratisches Loch zu passen.

Ohne zu wissen, was Ihr Datenmodell ist, und ohne Verständnis das, was Ihr Synchronisationsmodell ist, haben Sie ein paar Optionen:

  1. Match Primärschlüssel gegen Live-Datenbank im Vergleich zu der Testdatenbank. Wenn Test> Live-IDs, ein Update zu tun.
  2. Verwenden Sie Zeitstempel in einer Tabelle, um zu bestimmen, ob es aktualisiert werden muss,
  3. Verwenden Sie den MD5-Hash einer Datenbanktabelle und Änderungsdatum (UTC), um zu bestimmen, ob eine Tabelle geändert hat.

Lange Rede kurzer Sinn: Datenbank-Synchronisation ist sehr hart. Implementieren Sie eine Lösung, die für Ihre Anwendung spezifisch ist. Es gibt keine „generische“ Lösung, die optimal funktioniert.

Andere Tipps

Wenn Sie eine autoincrement in Ihren Tabellen haben, können Sie die maximalen autoincrement Werte vergleichen, um zu sehen, ob sie anders sind.

Doch welche MySQL-Version verwenden Sie?

Anstatt Ihre eigenen Rollen, könnten Sie eine bereits existierende Lösung für die Aufbewahrung Datenbanken synchron verwenden. Ich habe gehört, gute Dinge über SQLYog des SJA (siehe hier ). Ich habe es selbst nie benutzt, aber ich habe sehr beeindruckt mit ihren anderen Programmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top