Ein Bash-Skript zur Überwachung von mehrstufigen, lang laufenden Prozessen in Echtzeit, mit Simultananzeige von Fortschritt und vollständiger Log-Erfassung.
Systemarchitektur: Object-relational impedance mismatch mit relationalen und objektorientierten Datenbanken lösen
Wie üblich handelt es sich um eine Abwägung, wann man welche Datenbank verwendet. Keines der beiden Modelle kann alle Anforderungen, die an eine Datenbank gestellt werden, gleichzeitig erfüllen. Daher muss man jede Anforderung priorisieren und danach die entsprechende Auswahl, mit deren Nachteile, entscheiden.
Fragen, die man für sich beantworten muss:
Werde ich dieselben Daten aus der Datenbank in verschiedenen Aggregationen darstellen?
Ja: Tendenz zu relational
Nein: Tendenz zu objektorientiert
Kann ich die Objekte der Applikation gegeneinander abgrenzen, sodass ich ein Objekt immer nur im gesamten Betrachten werde?
Ja: Ablegen des gesamten Objekts als ein Datensatz tendiert zu objektorientiert
Nein: Muss ich Daten aus verschiedenen Perspektiven betrachten: Tendenz zu relational
Setzte ich komplett auf das DDD Prinzip?
Ja: Kapsel ich meine Domänen und kann daher auch die Objekte und deren Grenzen (boundaries) klar abgrenzen, kann eine objektorientierte Datenbank hilfreich sein.
Nein: Ich kann einzelne Attribute einer Entität als "Value Object" implementieren, ohne dass ich dafür auf eine objektorientierte Datenbank setzen muss. Hier hilft ggf. auch die Unterstützung von JSON für einzelne Spalten einer relationalen Datenbank.
Habe ich Erfahrungen mit Objektorientieren oder relationalen Datenbanken?
Ja/Nein: Das sollte unbedingt beachtet werden. Neue Datenbank benötigt die entsprechende Einarbeitung.
Reicht mir der Einsatz von Doctrine (ORM), um relationale Datenstrukturen als Objekte zu laden und zu speichern?
Ja: Somit kann ich beides haben: objektorientierte Entitäten und trotzdem relationale Datenbanken. Die Datenmengen sollten allerdings nicht zu groß werden.
Nein: Ich habe so viele Daten, dass dieser Ansatz zu langsam ist.
Wie sind meine Reporting Anforderung?
Selektionen nach z. B. einem Attribut sind in relationalen Datenbanken schneller.
Werde ich in den Daten suchen?
Kann ich die Suche mit einer anderen Datenbank umsetzen als die Quelldaten?
Kann ich durch eigene (von z.B. Doctrine unabhängige) spezielle Methoden implementieren? (z.B. getOutstandingInvoces())
Wie groß sind meine erwarteten Datenbestände?
Wirklich groß: Objektorientierte Datenbanken können besser verteilt abgelegt werden.
Mittel: entscheide nach den anderen Fragen
Klein: Nimm das, was du kennst.
Ändern sich die Datenstrukturen häufig?
Ja: Ist mit beiden System ein Problem. Ich sollte Dokumentendatenbank setzen, statt auf eine objektorientierte oder relationale Datenbank. Solche Daten kann ich zwar gut in objektorientierten Datenbanken durchsuchen, aber schlecht maschinell interpretieren.