Hey Leute,
als ich von NoSQL Datenbanken, bzw. auch von MongoDB gehört habe, war ich begeistert.
Klang im ersten Moment alles ganz einfach und bietet gute Vorteile (Natürlich auf Anwendungszwecke bezogen).
Aber nun bei einem Projekt, bei dem ich wirklich mal MongoDB verwende, stoße ich immer auf schwierige Entscheidungen, bzw. auf Stellen, an denen ich das System für mich in Frage stelle, da ich vieles doppelt speichern müsste.
Kleines Beispiel:
Ich kann auf meiner Website Beiträge (Posts) erstellen (Wie bei jedem beliebigen Netzwerk auch). An diese Beiträge kann ich auch Bilder anhängen. Die Beiträge sollen zudem mit Hashtags markiert sein.
Z.B. in MySQL halte ich nun alles in einzelnen Tabellen und kann mir bei bedarf alles zusammen joinen. Wenn ich also ein Bild über ein bestimmtes Hashtags suche, dann frage ich dieses über Hashtags > Posts > Images ab. Eine simple Abfrage.
Jetzt zu NoSQL-Datenbank bzw. MongoDB.
Hier habe ich die Möglichkeit alles in einem Dokument zu speichern. Nur will ich ja Hashtags nicht doppelt und dreifach in verschiedenen Post-Dokumenten haben, also lagere ich diese in eine eigene Collection aus. Die Bilder möchte ich auch einzeln z.B. in einer Galerie verwenden, also lagere ich diese auch aus. Somit habe ich 3 Collections.
Posts, Images, Hashtags
Das Post-Dokument hat dann Referenz-Objekte zu seinen Images und Hashtags.
So, nun wird es knifflig und ich frage mich, wie die optimale Lösung ist.
Ich möchte nun alle Posts anhand eines Hashtags ermitteln. Also frage ich einen Hashtag ab, erstelle mir anhand des Ergebnisses ein Referenzobjekt und frage wiederum damit die Posts ab. Somit eine Abfrage für Hashtag und eine für die Posts.
Jetzt möchte ich aber alle Bilder haben, die eben meinen gesuchten Hashtag haben. Somit müsste ich jetzt den Hashtag abfragen, daraus ein Referenz-Objekt erstellen, dann alle Posts abfragen und mit dem Image-Referenz-Objekten dann meine Images abfragen. Bei einer Zahl von 1000 Posts, sind das ja schon viele tausende Abfragen.
Die zweite Möglichkeit wäre dann, alles doppelt und dreifach zu speichern. Also setzte ich die Hashtag-Referenzen nicht nur in Post rein, sondern auch in die Images die dazu gehören. Somit erstelle ich aber viele Daten.
Welche Methoden sind nun für solche Datenbanken vorgesehen? Geht man den Weg der mehrfachen Abfragen oder den des mehrfachen Speicherns?
Die Frage die mir dann wiederum dabei aufkommt... Wenn ich auf solche Probleme stoße, ist dann NoSQL noch die richtige Wahl für mich? Wenn man sich umhört, dann ist ja Twitter z.B. auch auf dieses Datenbank-System umgestiegen... Die mussten theoretisch (ganz vereinfacht und vorsichtig gesagt) auch eine Lösung dafür finden... oder?
Ich erhoffe mir jetzt hierdurch keine direkte Antwort, dass ich jetzt diese oder jene Datenbank nehmen soll. Nur mal grobe Meinungen ob ihr auch auf solche Situationen gestoßen seid, wie ihr diese gelöst habt oder ob ihr irgendwo Erfahrung habt.
Vielen Dank.
als ich von NoSQL Datenbanken, bzw. auch von MongoDB gehört habe, war ich begeistert.
Klang im ersten Moment alles ganz einfach und bietet gute Vorteile (Natürlich auf Anwendungszwecke bezogen).
Aber nun bei einem Projekt, bei dem ich wirklich mal MongoDB verwende, stoße ich immer auf schwierige Entscheidungen, bzw. auf Stellen, an denen ich das System für mich in Frage stelle, da ich vieles doppelt speichern müsste.
Kleines Beispiel:
Ich kann auf meiner Website Beiträge (Posts) erstellen (Wie bei jedem beliebigen Netzwerk auch). An diese Beiträge kann ich auch Bilder anhängen. Die Beiträge sollen zudem mit Hashtags markiert sein.
Z.B. in MySQL halte ich nun alles in einzelnen Tabellen und kann mir bei bedarf alles zusammen joinen. Wenn ich also ein Bild über ein bestimmtes Hashtags suche, dann frage ich dieses über Hashtags > Posts > Images ab. Eine simple Abfrage.
Jetzt zu NoSQL-Datenbank bzw. MongoDB.
Hier habe ich die Möglichkeit alles in einem Dokument zu speichern. Nur will ich ja Hashtags nicht doppelt und dreifach in verschiedenen Post-Dokumenten haben, also lagere ich diese in eine eigene Collection aus. Die Bilder möchte ich auch einzeln z.B. in einer Galerie verwenden, also lagere ich diese auch aus. Somit habe ich 3 Collections.
Posts, Images, Hashtags
Das Post-Dokument hat dann Referenz-Objekte zu seinen Images und Hashtags.
So, nun wird es knifflig und ich frage mich, wie die optimale Lösung ist.
Ich möchte nun alle Posts anhand eines Hashtags ermitteln. Also frage ich einen Hashtag ab, erstelle mir anhand des Ergebnisses ein Referenzobjekt und frage wiederum damit die Posts ab. Somit eine Abfrage für Hashtag und eine für die Posts.
Jetzt möchte ich aber alle Bilder haben, die eben meinen gesuchten Hashtag haben. Somit müsste ich jetzt den Hashtag abfragen, daraus ein Referenz-Objekt erstellen, dann alle Posts abfragen und mit dem Image-Referenz-Objekten dann meine Images abfragen. Bei einer Zahl von 1000 Posts, sind das ja schon viele tausende Abfragen.
Die zweite Möglichkeit wäre dann, alles doppelt und dreifach zu speichern. Also setzte ich die Hashtag-Referenzen nicht nur in Post rein, sondern auch in die Images die dazu gehören. Somit erstelle ich aber viele Daten.
Welche Methoden sind nun für solche Datenbanken vorgesehen? Geht man den Weg der mehrfachen Abfragen oder den des mehrfachen Speicherns?
Die Frage die mir dann wiederum dabei aufkommt... Wenn ich auf solche Probleme stoße, ist dann NoSQL noch die richtige Wahl für mich? Wenn man sich umhört, dann ist ja Twitter z.B. auch auf dieses Datenbank-System umgestiegen... Die mussten theoretisch (ganz vereinfacht und vorsichtig gesagt) auch eine Lösung dafür finden... oder?
Ich erhoffe mir jetzt hierdurch keine direkte Antwort, dass ich jetzt diese oder jene Datenbank nehmen soll. Nur mal grobe Meinungen ob ihr auch auf solche Situationen gestoßen seid, wie ihr diese gelöst habt oder ob ihr irgendwo Erfahrung habt.
Vielen Dank.
Kommentar