Das Expand- und Contract-Muster, auch als Parallele Änderung bekannt, wurde bereits an anderer Stelle dokumentiert ([1], [2]). Das Muster bietet einen Ansatz zum Ändern von Schnittstellen, ohne Systeme zu brechen. Das Muster ist auf alle Arten von Schnittstellen anwendbar, z. B. Schnittstellen in einer Programmiersprache, REST-APIs oder Datenbankschemas. An dieser Stelle wird die alte Datenstruktur wie bisher geschrieben. Alle neuen und geänderten Datensätze werden auch in die neue Struktur geschrieben. Dieser Schritt kann leicht zurückgesetzt werden. Bei Bedarf kann die neue Datenstruktur aus der Datenbank entfernt werden. Ein System arbeitet mit einer zentralen Datenbank. Die Datenbank, die eine relationale oder eine Dokumentdatenbank sein kann, enthält Daten in einer strukturierten Form, die auf einem expliziten oder impliziten Schema basiert. Im Laufe der Zeit ändern sich die Systemanforderungen, und durch die Implementierung dieser Änderungen müssen das Datenbankschema und damit die tatsächlichen Daten geändert werden. Einige Schemaänderungen sind abwärtskompatibel (z.
B. Hinzufügen neuer Tabellen/Sammlungen oder Spalten/Felder). Andere Änderungen unterbrechen vorhandenen Code (z. B. das Ändern der Kardinalität zwischen einigen Entitäten von 1:n auf n:m). Um ein Beispiel zu geben, nehmen Sie an, Dass Sie Entwickler in einem Onlineshop sind. Der Wettbewerbsvorteil des Unternehmens war immer seine Fähigkeit, die Erfahrung der Kunden schnell zu verbessern, wann immer es eine Gelegenheit gab. Unnötig zu sagen, dass der Online-Shop rund um die Uhr laufen muss, um nie einen Kunden zu verlieren, weil einige Systemwartungsausfallzeiten. Es gibt einen Cluster von Anwendungsinstanzen und einen weiteren Cluster von Datenbankinstanzen. Im ersten Schritt wird die neue Datenstruktur (d. h. neue Tabellen/Sammlungen, neue Spalten/Felder) in die Datenbank eingeführt.
Bei einer relationalen Datenbank muss die neue Struktur explizit erstellt werden. Der Anwendungscode muss so geändert werden, dass Daten sowohl in die alte als auch in die neue Struktur geschrieben werden, während das System die Daten weiterhin aus der alten Struktur liest. Im Rahmen der Umgestaltung erkennen wir, dass x und y ein DataClump sind, und beschließen, eine neue Coordinate-Klasse einzuführen. Dies ist jedoch eine rückwärtsinkompatible Änderung für Clients der Grid-Klasse. Anstatt alle Methoden und die interne Datenstruktur auf einmal zu ändern, entscheiden wir uns, das parallele Änderungsmuster anzuwenden. Dies bedeutet, dass die Datenbank von nun an einige Daten redundant speichert, bis die alte Struktur im letzten Schritt gelöscht wird, wodurch der Speicherplatz, den die Daten verbrauchen, erhöht wird. Dies bedeutet auch, dass die Anzahl der Schreibvorgänge in der Datenbank in diesem Zeitraum zunimmt. Um sicherzustellen, dass ein System ständig läuft, während Daten von einer alten in eine neue Struktur übertragen werden, müssen die Gesamtänderungen in mehreren verschiedenen Schritten bereitgestellt werden. Da diese Schritte entscheidend sind, um das Muster erfolgreich anzuwenden, werden sie eingehend untersucht.