Laden...

Webapi Datenbank Schnittstelle <-> MariaDB und MongoDB

Erstellt von ClaraSoft vor 4 Jahren Letzter Beitrag vor 4 Jahren 833 Views
C
ClaraSoft Themenstarter:in
55 Beiträge seit 2020
vor 4 Jahren
Webapi Datenbank Schnittstelle <-> MariaDB und MongoDB

Hallo Leute,

Ich schreibe gerade eine .Dot Core WebApi, die auch eine Schnittstelle zur einer Datenbank bzw. zu den beiden im Titel Datenbanken genannten hat. Grundsätzlich funktioniert das auch, das ich eine der Beiden Datenbanken nutzen kann, je nach dem was in der Config eingestellt ist.
Meine Idee war dabei folgende:
Über eine Config Datei kann man festlegen welche Datenbank genutzt werden soll. Es ist nicht vorgesehen, beide Datenbanken parallel zu nutzen, es kann zur Laufzeit nur eine Datenbank genutzt werden. Wenn eine Andere Datenbank genutzt werden soll muss die Config angepasst werden und die Webapi neu gestartet werden.
Programmier Technisch habe ich das so gelöst, dass die Controller Klasse nur das Interface kennt, das je nach verwendeter Datenbank unterschiedlich implementiert ist. In der Startup Klasse wird je nach Config dann die entsprechenden Service Klassen aktiviert.

Grundsätze Frage: Was haltet ihr von der Idee unabhängig davon, dass das tatsächlich Funktioniert?

Nun zu meinen Problem:
Die MongDB verwendet ein komplett anderes Id System als eine SQL Datenbank, eine ObjectId, die für jedes "Object" in der Datenbank einzigartig ist. Während eine SQL Datenbank dafür idr. ein Integer als Primary Key und AI für eine Tabelle hat.
Meine Lösung wäre hier, das ich in der MongoDB noch eine Funktion implementiere mit der ich ein Feld hochzählen kann.

Grüße

16.835 Beiträge seit 2008
vor 4 Jahren

Grundsätze Frage: Was haltet ihr von der Idee unabhängig davon, dass das tatsächlich Funktioniert?

Grundsätzlich ist das ein weit verbreitetes Vorgehen.

Du hast hier aber prinzipiell einen Technologiebruch bzgl. relationale Datenbank vs. nicht-relationale Datenbank.
Das ist ungewöhnlich und im gesamten Spektrum alles andere als einfach zu implementieren.

Während eine SQL Datenbank dafür idr. ein Integer als Primary Key und AI für eine Tabelle hat.

Wenn man sich wirklich größere Systeme anschaut, dann ist Guid die absolut verbreitetere Art und Weise; nicht int.

Guid und ObjectId verfolgen beide das Prinzip Universally Unique Identifier
Guids sind dabei eine direkt basierende Implementierung während ObjectId nur die Idee jedoch nicht die Implementierung selbst darstellt.
MongoDB hat sich aus Performancegründen für ObjectId entschieden. Prinzipiell würde ein Guid (und auch int) - mit Performanceeinbußen - direkt für _id auch funktionieren; hat aber eben ein paar Nachteile (siehe Doku).

Aus Software-Architektur-Sicht gibt es für diese Situation keine absolut perfekte Lösung, sondern mehrere Möglichkeiten

  • Generelle Annahme von Strings, die dann im Implementierungslayer geparst (in Guid oder Object) werden
  • Ein Wrapper-Typ schaffen
  • Mit Datenbankspezifischen Kompromissen leben
  • ...

Generell würde ich Dir aber raten, dass Du ObjectId nicht aus dem DAL raus gibst; dann lieber mit einem Wrapper-Typen arbeiten.
Ansonsten hast Du durch alle Schichten hindurch die Abhängigkeit zu MongoDB Bibliotheken - das willst Du nicht.