10

Seit langer Zeit haben wir unsere Daten im Projekt-Repository gespeichert. Wir haben alles unter data/sql gespeichert, und jede Tabelle hatte ihre eigenen Dateien create_tablename.sql und data_tablename.sql.Code & Daten Tracking/Deployment

Wir haben jetzt nur unser zweites Projekt auf Scalr eingesetzt und wir haben erkannt, es ein bisschen chaotisch ist.

Die Art, wie wir einsetzen:

Wir haben eine „packageup“ Sammlung von Skripten haben, die das Projekt in drei Archive zerreißen (Daten, Code, statische Dateien), die wir dann in drei separaten Eimer auf S3 gespeichert werden.

Immer wenn eine Rolle gestartet wird, lädt sie eine der Dateien herunter (abhängig von der Rolle: data, nfs oder web) und dann erstellt ein "entpackage" -Skript alles für jede Rolle, lädt die Daten in mysql, richtet sie ein die nfs, etc.

Wir machen das so, weil wir keine Serverbilder speichern wollen, wir beginnen immer mit Vanilla-Instanzen, auf denen wir alles von Grund auf mit verschiedenen hauseigenen Skripten installieren. Startzeit ist kein Problem (wir haben eine betriebsbereite Farm in 9 Minuten).

Das Problem ist, dass es ein Problem ist, die richtige Version der Datenbank zu finden, wenn wir versuchen, einen neuen Build zu erstellen (zu jedem Zeitpunkt haben wir etwa 4 Entwicklerversionen für ein Projekt). Auch Git beginnt zu ersticken, sobald wir in die Produktion gehen, da die SQL-Dateien insgesamt rund 500 MB.

Die Frage ist:

Wie alle anderen Verwaltung von Datenbanken? Ich habe nach etwas gesucht, das es einfach macht, Daten aus der Produktion in Dev zu übernehmen und auch Daten von Dev in die Produktion zu migrieren, bin aber über nichts gestolpert.

+0

Warum würden Sie wollen Daten von dev migrieren prod? –

+1

@sheepsimulator - viele Frameworks (zB Magento, ATG, etc) speichern Konfigurationsdaten in der Datenbank, die portiert werden muss, um die Dev/Staging-Umgebung zu replizieren –

Antwort

4

Sie sollten ernsthaft einen Blick auf dbdeploy nehmen (dbdeploy.com). Es ist portiert auf viele Sprachen, die wichtigsten sind Java und PHP.Es ist in Build-Tools wie Ant und Phing integriert und erlaubt den einfachen Austausch von sogenannten Delta-Dateien.

Eine Deltadatei besteht immer aus einem Deploy-Abschnitt, kann aber auch einen Undo-Abschnitt enthalten. Wenn Sie Ihre Deltadatei festschreiben und ein anderer Entwickler sie überprüft, kann er einfach dbdeploy ausführen und alle neuen Änderungen werden automatisch auf seine Datenbank angewendet.

Ich verwende dbdeploy für meine Open-Source-Blog, so können Sie einen Blick auf nehmen, wie Delta-Dateien organisiert sind: http://site.svn.dasprids.de/trunk/sql/deltas/

+0

gibt es hier einen wichtigen Punkt "rückgängig machen". Jeder ordentliche DB-Bereitstellungsprozess muss eine einstufige Roll-Back-Funktion haben, sonst wirst du eines Tages erwischt ... –

+0

Das sieht ziemlich gut aus. Ich könnte es auch in zwei Zweige aufteilen (dev, prod) und wir können Dev-Änderungen einfach getrennt von Produktionsänderungen verfolgen, da Dev-Änderungen eher rückgängig gemacht werden und nicht immer in product münden. Ich frage mich, wie gut es in diesem Fall mit den Versionen umgehen würde. –

+0

Nun, da eine Delta-Datei in der Regel aus einer bestimmten Funktion anstelle einer Version besteht, könnten Sie diese Delta-Datei einfach aus der Versionskontrolle entfernen und Sie sollten dann gut sein (sicherlich nach dem Anwenden des Undo-Teils, vorher nicht). – DASPRiD

0

Auschecken capistrano. Es ist ein Tool, das die Ruby-Community für den Einsatz in verschiedenen Umgebungen verwendet und ich finde es sehr nützlich.

Auch wenn Ihre Bereitstellung gebaut zu ersticken beginnt genannt Murder ein Werkzeug twitter versuchen.

+0

Ich bin nicht so besorgt über den Deployment-Schritt selbst, wie ich bin über die Bereitstellung in Kombination mit den Produktions-/Entwicklungsumgebungen. Wir müssen sehr oft Datenbank (Struktur + Daten) zwischen uns sowie mit der Live-Umgebung teilen. Außerdem erstickt Git unsere SQL-Dateien. –

2

Wie ich Ihre wichtigste Frage verstehen ist expirience von anderen Menschen in von Entwicklern in der Produktion von SQL-Daten zu migrieren.

Ich verwende Microsoft SQL Server anstelle von My SQL, also bin ich nicht sicher, dass meine expirience Sie direkt verwenden können. Trotzdem funktioniert dieser Weg sehr gut.

Ich verwende Visual Studio 2010 Ultimate Edition, um Daten in zwei Datenbanken zu vergleichen. Die gleiche Funktion gibt es auch in Vinsual Studio Team Edition 2008 (oder Datenbankedition). Sie können http://msdn.microsoft.com/en-us/library/dd193261.aspx lesen, um zu verstehen, wie es funktioniert. Sie können zwei Datenbanken (dev und prod) vergleichen und SQL-Script zum Ändern der Daten generieren. Sie können einige Tabellen oder einige Spalten einfach aus dem Vergleich ausschließen. Sie können auch die Ergebnisse untersuchen und einige Einträge von der Generierung des Skripts ausschließen. So kann man einfach und flexibel Skripte generieren, die für den Einsatz der Änderungen in der Datenbank verwendet werden können. Sie können die Daten zweier Datenbanken von der Struktur getrennt vergleichen (Schemavergleich). So können Sie Daten in dev mit den Daten von prod aktualisieren oder Skripte generieren, die die prod-Datenbank auf die letzte Version der dev-Datenbank ändern. Ich empfehle Ihnen, diese Funktionen und einige Produkte von http://www.red-gate.com/ (wie http://www.red-gate.com/products/SQL_Compare/index.htm) zu betrachten.

0

persönlich bei Toad i aussehen würde

http://www.toadworld.com/

Weniger als 10k;) ... wird Datenbankstrukturen analysieren, Skripte erstellen, um sie zu modifizieren, und auch Daten migrieren.

0

Ein Teil der Lösung besteht darin, die Version jedes Ihrer Codemodule und ihrer entsprechenden Datenressourcen an einem einzigen Speicherort zu erfassen und diese zu vergleichen, um Konsistenz zu gewährleisten. Zum Beispiel erfordert eine Erhöhung der Versionsnummer Ihres Moduls, z. B. customer_comments, eine entsprechende SQL-Delta-Datei, um die relevanten DB-Tabellen auf die gleiche Versionsnummer für die Daten zu aktualisieren.

Für ein Beispiel, schauen Sie sich Magento core_resourceapproach wie von @AlanStorm dokumentiert.

Cheers, JD

Verwandte Themen