2014-11-30 18 views
5

Viele Male habe ich gelesen, dass Daten in NoSQL-Datenbanken denormalized gespeichert. Betrachten Sie zum Beispiel einen Schachspielrekord. Es kann nicht nur die Spieler-IDs enthalten, die am Schachspiel teilnehmen, sondern auch den Vor- und Nachnamen des Spielers. Ich nehme an, dies weil erfolgt Joins sind nicht möglich in NoSQL, wenn Sie also nur Daten kopieren können Sie immer noch abrufen alle Daten, die Sie ohne Verarbeitung der Daten manuell auf Anwendungsebene in einem Aufruf möchten.NoSQL-Normalisierungsdatenmodell

Was ich nicht verstehe ist, dass jetzt, wenn Sie den Namen eines Schachspielers aktualisieren wollen, Sie eine Abfrage schreiben müssen, die sowohl die Schachspieldatensätze, an denen dieser Spieler teilnimmt, als auch die Spielerakte aktualisiert von diesem Spieler. Dies scheint eine enorme Performance-Overhead, da die Datenbank alle Spiele suchen, wo der Spieler beteiligt sich an und dann jeden dieser Datensätze aktualisieren.

Ist es wahr, dass die Daten oft denormalized wie in meinem Beispiel gespeichert ist?

Antwort

7

Sie sind richtig, werden die Daten oft gespeichert de-normalisiert in NoSQL-Datenbanken.

Das Problem mit den Updates ist teilweise, wo der Begriff "eventuelle Konsistenz" herkommt.

In Ihrem Beispiel, wenn Sie den Spielernamen aktualisieren (kein häufiges Ereignis, aber es kann passieren), würden Sie einen Hintergrund-Job ausgeben, um den Namen auf alle anderen Datensätze zu aktualisieren. Ja, während der Aktualisierung können Sie einen älteren Wert abrufen, aber die Daten sind möglicherweise konsistent. Da wir hier keine ATM-Software schreiben, ist der Kompromiss zwischen Leistung und Konsistenz akzeptabel.

Weitere Informationen finden Sie hier: http://www.allbuttonspressed.com/blog/django/2010/09/JOINs-via-denormalization-for-NoSQL-coders-Part-2-Materialized-views