Python vs. PHP
Show all projects!

Systemarchitektur: Object-relational impedance mismatch mit relationale und objektorientierte 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 werden?
    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, das 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) speziele 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 objektorienterte oder relationale Datenbank.



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

Article relase date: / Last update: