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:

  1. Werde ich dieselben Daten aus der Datenbank in verschiedenen Aggregationen darstellen?
    1. Ja: Tendenz zu relational
    2. Nein: Tendenz zu objektorientiert
  2. Kann ich die Objekte der Applikation gegeneinander abgrenzen, sodass ich ein Objekt immer nur im gesamten Betrachten werde?
    1. Ja: Ablegen des gesamten Objekts als ein Datensatz tendiert zu objektorientiert
    2. Nein: Muss ich Daten aus verschiedenen Perspektiven betrachten: Tendenz zu relational
  3. Setzte ich komplett auf das DDD Prinzip?
    1. Ja: Kapsel ich meine Domänen und kann daher auch die Objekte und deren Grenzen (boundaries) klar abgrenzen, kann eine objektorientierte Datenbank hilfreich sein.
    2. 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.
  4. Habe ich Erfahrungen mit Objektorientieren oder relationalen Datenbanken?
    1. Ja/Nein: Das sollte unbedingt beachtet werden. Neue Datenbank benötigt die entsprechende Einarbeitung.
  5. Reicht mir der Einsatz von Doctrine (ORM), um relationale Datenstrukturen als Objekte zu laden und zu speichern?
    1. Ja: Somit kann ich beides haben: objektorientierte Entitäten und trotzdem relationale Datenbanken. Die Datenmengen sollten allerdings nicht zu groß werden.
    2. Nein: Ich habe so viele Daten, dass dieser Ansatz zu langsam ist.
  6. Wie sind meine Reporting Anforderung?
    1. Selektionen nach z. B. einem Attribut sind in relationalen Datenbanken schneller.
  7. Werde ich in den Daten suchen?
    1. Kann ich die Suche mit einer anderen Datenbank umsetzen als die Quelldaten?
    2. Hilft mir CQRS um z.B. suchen zu optimieren?
    3. Kann ich durch eigene (von z.B. Doctrine unabhängige) spezielle Methoden implementieren? (z.B. getOutstandingInvoces())
  8. Wie groß sind meine erwarteten Datenbestände?
    1. Wirklich groß: Objektorientierte Datenbanken können besser verteilt abgelegt werden.
    2. Mittel: entscheide nach den anderen Fragen
    3. Klein: Nimm das, was du kennst.
  9. Ändern sich die Datenstrukturen häufig?
    1. 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.


https://de.m.wikipedia.org/wiki/Object-relational_impedance_mismatch

Article relase date: / Last update: