Nur weil Ihre NoSql-Datenbank kein Schema im herkömmlichen Sinne hat, heißt das nicht, dass es kein logisches Schema gibt, mit dem Sie sich bei Änderungen befassen müssen. Im Fall einer typischen App, die MongoDb verwendet, erwartet Ihr Code höchstwahrscheinlich, dass sich bestimmte Felder des json-Objekts auf bestimmte Weise verhalten. Wenn Sie das Verhalten ändern, möchten Sie möglicherweise die bereits in der Datenbank vorhandenen Daten aktualisieren. Mit herkömmlichen RDBMS war dies ein weitgehend gelöstes Problem - Sie mussten nur die zugrunde liegenden Tabellen ÄNDERN. Aber mit diesen neuen NoSQL-Datenbanken haben Sie die Entscheidung: Schreiben Sie ein Skript, um alle Ihre Objekte zu mungeen und zu aktualisieren? Oder fügen Sie Code hinzu, um zwischen Versionen im laufenden Betrieb zu konvertieren? Wenn ja, wie lange unterstützen Sie v1-Objekte? Für immer? Bis v3?
Ich füge hinzu, dass das im MongoDb-Blog-Beitrag verwendete Beispiel ein wenig vereinfacht und sehr einfach zu handhaben ist, wenn Sie einen anständigen Aktualisierungsprozess haben, unabhängig davon, um welches RDBMS es sich handelt. das Hinzufügen eines Feldes tut selten weh. Es ist, wenn Sie sich entscheiden, Ihr Name
Feld zu teilen, FirstName
und LastName
die Dinge werden spannend.
Es kann sein.
Einige Organisationen sind - gut - desorganisiert und leisten bei der Schemamigration sehr schlechte Arbeit.
"Migrationswochenende". Stoppen Sie die Server. Sichern und exportieren Sie alle Daten. Erstellen Sie das neue Schema (häufig durch Ändern des vorhandenen Schemas). Laden Sie die Daten neu oder versuchen Sie, sie neu zu strukturieren.
"Kontinuierliches Tweaken". Ändern Sie Tabellen in dem von SQL zulässigen Umfang. Ohne die Reihenfolge der durchgeführten ALTER zu verfolgen. Es ist nicht möglich, zu einer früheren Schema-Version zurückzukehren. Erstellen Sie bei Bedarf neue Tabellen aus vorhandenen Tabellen, und passen Sie hoffentlich alle Anwendungen an, um die neuen Tabellen zu verwenden. Aber - mangels guter Qualitätssicherung - lassen Sie die alten Tabellen "nur für den Fall".
"Volle Panik". Verhindern Sie einfach Schemaänderungen. Machen Sie einen großen Gestank. Behaupten Sie, das Risiko sei zu hoch. Blockiere alle Bemühungen in diese Richtung. Nehmen Sie das Schema als Geisel, bis Sie gezwungen sind, einen vernünftigeren Ansatz zu wählen.
Jedes Schema ist schwierig zu migrieren.
Das größte Problem ist nicht technisch.
Es ist semantisch.
Ein Hauptgrund für eine Schemaänderung ist, dass das vorherige Schema nicht sehr gut mit der Problemdomäne übereinstimmt. Da sich die Semantik geändert hat, müssen sich die Datenbank (und die Anwendungen) ändern. Manchmal sind dies tiefgreifende Änderungen, die ein Überdenken der Funktionsweise der Anwendungen mit den Daten erfordern.
Das Überarbeiten der Datenbanksemantik kann sehr schwierig sein.
Was Leute anstelle von Schemaänderungen tun, ist einfach, das physikalische Schema zu missbrauchen. Sie beginnen, falsche Daten in vorhandene Felder zu laden, weil sie können. In einem Feld "Kommentar" werden plötzlich wichtige Kundenverwaltungsinformationen angezeigt, gefolgt von "//" und dem eigentlichen Kommentar. Das wächst zu Datenstücken "Feld 1 - Feld 2 // Kommentar". Die Benutzer verfügen über eine Kalkulationstabelle, die diese zusätzlichen Daten aus dem Kommentarfeld extrahiert, da die "echte" Anwendungssoftware ein zu schwer zu änderndes Schema hatte, das die IT nicht ändern wollte.
quelle
Wir aktualisieren Produktionsdatenbanken ohne Probleme, indem wir Tabellen und (nullfähige) Spalten hinzufügen. Frühere Versionen der Anwendung funktionieren problemlos mit der aktualisierten Datenbank, sie verweisen nur nicht auf die neuen Inhalte. Wir vermeiden es, Tabellen oder Spalten zu entfernen oder die Art und Weise zu ändern, in der vorhandene Daten gespeichert werden. Wenn dies jedoch erforderlich ist, erstellen wir entsprechende Konvertierungsskripten. Unabhängig davon, ob Ihre Datenbank über ein deklariertes typsicheres Schema verfügt oder nicht, erfordern Änderungen in der Datenstruktur eine Datenkonvertierung und Anwendungsaktualisierungen, um mit der neuen Struktur interagieren zu können.
quelle
Es hängt davon ab, ob.
Erstens, wenn Sie eine wirklich große Datenbank haben, die sich über mehrere Computer erstreckt, wird alles (nicht nur Datenbankaktualisierung) schmerzhaft sein. (egal wie viel Sie im Voraus geplant haben).
Zweitens ist das Aktualisieren einer Datenbank NICHT nur eine Sache der Datenbank - es hängt auch von dem größeren System ab, zu dem die Datenbank gehört. Dies umfasst auch die Datenbankbereitstellung (viele Datenbankserver, mehrere Rechenzentren, Master-Slave-Setups usw.).
Der Schmerz kann gelindert werden, indem Sie die Systemkomponenten so architektonisch gestalten, dass sie alle das DB-Schema-Änderungsereignis in gewisser Weise kennen. Dies bedeutet, dass das gesamte System gegenüber Schemaänderungen tolerant sein und auf "gesunde" Weise darauf reagieren kann.
Sie können sich ein von Facebook entwickeltes Hilfsprogramm zur Behebung von MySQL-Schema-Updates ansehen.
Außerdem gibt es bewährte Standardmethoden wie das Aktivieren des Master-Schreibschutzes, das Ändern von Slaves oder das Erstellen von Entwicklungskopien usw.
In jedem Fall ist ein vollständiges Backup und eine umfangreiche Testsuite ein MUSS. Nur dann können Sie sicher und zuverlässig Änderungen vornehmen.
quelle