Frage

Mein Entwicklungsteam von vier Personen ist seit einiger Zeit, um diese Frage, die sich jetzt:

Manchmal müssen wir die gleiche Menge von Daten abgearbeitet werden. Während wir also auf unsere lokalen Computer entwickeln, die dev-Datenbank ist mit der Ferne.

Aber manchmal müssen wir Operationen auf dem db auszuführen, die an anderen Entwicklern Datum Schritt werden, dh wir Vereinigungen brechen. Hierzu wird eine lokale db wäre schön.

Gibt es eine bewährte Methode für das Erhalten dieses Dilemma um? Gibt es so etwas wie eine „SCM für Daten“ Werkzeug?

In einer seltsamen Art und Weise, um eine Textdatei von SQL insert / delete / update Abfragen im git-Repo zu halten wäre nützlich, aber ich denke, das ist sehr schnell sehr langsam konnte.

Wie geht man Jungs mit diesem?

War es hilfreich?

Lösung

Sie können Ihre Frage gefunden Wie wollen Sie bauen Ihre Datenbank von Quellcodeverwaltung nützlich.

Im Grunde eine wirksame Verwaltung der gemeinsam genutzten Ressourcen (wie eine Datenbank) ist schwer. Es ist schwer, weil es erfordert, dass die Bedürfnisse der verschiedenen Menschen balancieren, einschließlich anderer Entwickler, Tester, Projektmanager, usw.

Oft ist es effektiver einzelne Entwicklern ihre eigene Sandbox-Umgebung zu geben, in dem sie die Entwicklung und Unit-Tests ohne Auswirkungen auf andere Entwicklern oder Tester durchführen können. Dies ist kein Allheilmittel aber, weil Sie jetzt einen Mechanismus zu schaffen, haben diese mehrere separaten Umgebungen synchron miteinander im Laufe der Zeit zu halten. Sie müssen sicherstellen, dass die Entwickler haben eine vernünftige Art und Weise einander Änderungen des Aufnehmens (beide Daten, Schema und Code). Dies ist nicht necesarily einfacher. Eine gute SCM Praxis kann helfen, aber es erfordert noch ein erhebliches Maß an Kooperation und Koordination, sie abzuziehen. Nicht nur das, sondern jeden Entwickler mit ihrer eigenen Kopie einer ganzen Umgebung kann die Kosten für die Lagerung einführen und zusätzliche DBA-Ressource in der Leitung und Überwachung von diesen Umgebungen zu unterstützen.

Hier sind einige Ideen für Sie zu prüfen:

  1. Erstellen Sie eine gemeinsame, öffentliche „Umwelt Whiteboard“ (es elektronisch sein könnte), in den Entwickler leicht, die Umgebungen sind verfügbar sehen und wer sich zu benutzen.
  2. Identifizieren Sie eine Einzelperson oder Gruppe eigene Datenbankressourcen. Sie sind verantwortlich für den Überblick über Umgebungen zu halten und zu helfen beheben, um die widersprüchlichen Bedürfnisse der verschiedenen Gruppen (Entwickler, Tester, etc).
  3. Wenn es die Zeit und Budgets ermöglichen, sollten die Schaffung Sandbox-Umgebungen für alle Ihre Entwickler.
  4. Wenn Sie nicht bereits so tun, betrachtet Trennung Entwickler „Spielplätze“, von Ihrer Integration, Prüfung und Abnahme Testumgebungen.
  5. Stellen Sie sicher, dass Sie die Versionskontrolle kritische Datenbankobjekte - insbesondere diejenigen, die Veränderung oft wie Trigger, Stored Procedures und Views. Sie wollen nicht zu verlieren Arbeit, wenn jemand Überschreibungen jemand andere Änderungen sind.

Andere Tipps

Wir verwenden lokale Entwickler-Datenbanken und eine einzige, Master-Datenbank für Integrationstests. Wir speichern Erstellungsskripts in SCM. Ein Entwickler ist verantwortlich für die Aktualisierung des SQL-Scripts basiert auf dem „Golden Master“ Schema. Ein Entwickler kann die erforderlichen Änderungen vor, um ihre lokalen Datenbank machen, wie notwendig aus den Daten in der Integration DB bevölkert, ein Import-Verfahren, oder Erzeugen von Daten ein Werkzeug (Red Gate Data Generator, in unserem Fall) verwenden. Falls erforderlich, wischen Entwickler ihre lokale Kopie und können vom Erstellungsskript und Integrationsdaten aktualisieren je nach Bedarf. Typischerweise werden nur Datenbanken für Integrationstests verwendet und wir sie für Unit-Tests verspotten, so dass die Menge der Arbeit zu halten Dinge synchronisiert minimiert wird.

Ich empfehle, dass Sie in dieser Angelegenheit einen Blick auf Scott Allens Aussicht. Er schrieb eine Reihe von Blogs, die sind, meiner Meinung nach, sehr gut. Drei Regeln für die Datenbank Arbeit , Der Baseline ändern Skripte , Views, Stored procs usw. , Branching und Merging .

Ich verwende diese Richtlinien mehr oder weniger, mit persönlichen Veränderungen und sie arbeiten.

In der Vergangenheit habe ich mit diesen mehr Arten behandelt.

Eine davon ist die SQL-Skript-Repository, das erstellt und füllt die Datenbank. Es ist keine schlechte Option überhaupt und alles synchron halten können (auch wenn Sie diese Methode nicht verwenden, sollten Sie immer noch diese Skripte beibehalten, so dass Ihre DB in Source Control ist).

Die andere (die ich lieber) wurden auf dem Server eine einzelne Instanz einer „sauberen“ dev Datenbank mit, dass niemand mit. Wenn Entwickler benötigen, um ihre Entwickler Datenbanken zu aktualisieren, lief sie ein SSIS-Paket, das die „saubere“ Datenbank auf ihre dev Kopie kopiert. Wir könnten dann unsere Entwickler Datenbanken nach Bedarf ändern, ohne auf die Füße von anderen Entwicklern zu treten.

Wir haben eine Datenbank Wartungs-Tool haben, dass wir verwenden, die erstellt / aktualisiert unsere Tabellen und unsere Procs. wir haben einen Server, eine up-to-date-Datenbank mit Daten gefüllt hat.

halten wir lokale Datenbanken, dass wir mit spielen können, wie wir wählen, aber wenn wir auf „Baseline“ zurück zu gehen brauchen wir eine Sicherung des „Master“ vom Server erhalten und lokal wiederherstellen.

wenn / wenn wir Spalten / Tabellen / Procs fügen wir das dbMaintenance Tool aktualisieren, die in der Quellcodeverwaltung gehalten wird.

manchmal, es ist ein Schmerz, aber es funktioniert recht gut.

Wenn Sie ein ORM wie nHibernate verwenden, erstellen Sie ein Skript, das sowohl das Schema & die Daten in der lokalen Entwicklung Datenbank Ihrer Entwickler generiert.

Verbessern Sie das Skript während der Entwicklung typischer Daten aufzunehmen.

Test auf einer Staging-Datenbank vor der Bereitstellung.

Wir replizieren Produktionsdatenbank zu UAT Datenbank für die Endbenutzer. Diese Datenbank ist nicht mit dem Entwickler.

Es dauert weniger als wenige Sekunden, um alle Tabellen zu löschen, erstellen sie wieder und inject Testdaten.

Wenn Sie ein ORM verwenden, um das Schema generiert, müssen Sie nicht die Schaffung Skript zu erhalten.

Früher arbeitete ich an einem Produkt, das Datum war Lager bezogen und entwickelte bei Kunden installiert werden, falls gewünscht. Folglich wußte, dass die Software, wie etwa „Installation“ gehen (vor allem der Schaffung des erforderlichen Datenbankschemas und Population von statischen Daten wie Währung / Ländercodes usw.).

Weil wir diese Informationen in dem Code selbst hatten, und weil wir steckbare SQL-Adapter hatten, war es trivial diesen Code an der Arbeit mit einer In-Memory-Datenbank zu erhalten (wir haben HSQL). Folglich haben wir die meisten unsere aktuelle Entwicklungsarbeit und Performance-Tests gegen „echten“ lokaler Server (Oracle oder SQL Server), aber alle von den Unit-Tests und anderen automatisierten Aufgaben gegen prozessspezifische In-Memory-DBs.

Wir waren sehr glücklich, in dieser Hinsicht, dass, wenn es eine Änderung an die zentralen statischen Daten war, mussten wir es in der Aktualisierung eines Teil der Installationsanleitung enthalten, so standardmäßig in der SCM-Repository gespeichert wurde, ausgecheckt durch die Entwickler und als Teil ihrer normalen Workflow installiert. Bei näherer Betrachtung ist dies sehr ähnlich wie Ihre vorgeschlagene DB Changelog Idee, außer ein wenig mehr formalisierte und mit einer domänenspezifischen Abstraktionsschicht um ihn herum.

Dieses Schema funktionierte sehr gut, weil jemand ein voll funktionsfähiges DB mit up-to-date statischen Daten in wenigen Minuten aufbauen konnte, ohne dass jemand anderes die Zehen zu treten. Ich konnte nicht sagen, ob es sich lohnt, wenn Sie nicht über die installieren / Upgrade-Funktion, aber ich würde es auf jeden Fall überlegen, weil es die Datenbank Abhängigkeit völlig schmerzlos gemacht.

Was ist mit diesem Ansatz:

Halten Sie einen separaten Repo für eine „saubere db“. Die Repo wird eine SQL-Datei mit Tabelle erstellt / Einsätze, etc.

Mit Rails (Ich bin sicher, dass für jeden git Repo angepasst werden könnte), hält die „clean db“ als Submodul innerhalb der Anwendung. Schreiben Sie ein Skript (Rake Aufgabe, vielleicht), die eine lokale dev db mit den SQL-Anweisungen abfragt.

So reinigen Sie Ihren lokalen db (und ersetzt mit frischen Daten):

git submodule init
git submodule update

dann

rake dev_db:update ......... (or something like that!)

Ich habe eine von zwei Dinge zu erledigen. In beiden Fällen Entwickler auf Code arbeiten, dass Macht Konflikt mit anderen führen ihre eigene Datenbank lokal oder eine separate Instanz auf dem Entwickler-Datenbank-Server erhalten.

  • Ähnlich wie @tvanfosson empfohlen, halten Sie eine Reihe von SQL-Skripten, die die Datenbank von Grund auf neu bauen, oder

  • Auf einem gut definierte, regelmäßig alle der Entwickler-Datenbanken werden mit einer Kopie von Produktionsdaten überschreiben oder mit einer verkleinerten / deidentified Kopie der Produktion, je nachdem, welche Art von Daten, die wir verwenden.

würde ich alle einig, die LBushkin in seiner Antwort gesagt hat. Wenn Sie SQL Server verwenden, haben wir hier eine Lösung bei Red Gate bekam, die Sie leicht teilen Änderungen zwischen mehreren Entwicklungsumgebungen ermöglichen soll.

http://www.red-gate.com/products/sql_source_control /index.htm

Wenn es Speicher Bedenken, dass es schwer für Ihre DBA mehrere Entwicklungsumgebungen zu ermöglichen, hat Red Gate, eine Lösung für dieses. Mit Red Gate HyperBac Technologie können Sie virtuelle Datenbanken für jeden Entwickler erstellen. Diese scheinen genau die gleichen wie normale Datenbank, aber im Hintergrund, die gemeinsamen Daten werden zwischen den verschiedenen Datenbanken geteilt. Dies ermöglicht es Entwicklern, ihre eigenen Datenbanken zu haben, ohne eine unpraktische Menge an Speicherplatz auf Ihrem SQL Server aufzunehmen.

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