Fondamentalmente hai 3 opzioni:
-
Basta memorizzare l'
userId
e quindi recuperare l'utente separatamente. In questo modo ottieni sempre i risultati ottimali in termini di dati aggiornati. Ma ovviamente è più lento. Questo è fondamentalmente ciò che fa un database relazionale. Un DB SQL darà solo un'occhiata alla chiave esterna e recupererà i dati per id. -
Vivi con dati scaduti. Memorizza un duplicato del nome utente all'interno dei commenti. A volte questo è un comportamento desiderato, perché in questo modo puoi rappresentare i dati esattamente come erano quando sono stati archiviati. Ciò significa:se John crea un commento e successivamente il suo nome utente viene aggiornato a Paul, puoi ancora vedere che è stato creato come John. (Ciò è particolarmente utile per le fatture, ad esempio, quando si fa riferimento a una persona e l'indirizzo cambia, quindi non si desidera aggiornare l'indirizzo di una vecchia fattura)
-
Aggiorna tutto ciò che contiene un nome utente, quando il nome utente viene aggiornato. Anche questo non è male, perché un nome utente normalmente non dovrebbe mai cambiare. Quindi le letture saranno sempre veloci, perché il nome è memorizzato all'interno del commento. E se il nome cambia, devi aggiornare tutto ciò che riguarda l'utente. Questo è un compito lento ovviamente, ma poiché non dovrebbe accadere ogni minuto, è tollerabile.
3.1 Potresti ottimizzare le cose:se il nome utente cambia, questo viene archiviato da qualche parte e applicato a mezzanotte. In questo modo puoi raccogliere più cambi di nome e aggiornare tutto contemporaneamente.
Come puoi vedere:NoSQL riguarda la scelta . Puoi fare le cose che si adattano meglio ai tuoi dati. Ovviamente è sempre un compromesso:più lento/più veloce, più/meno codice da scrivere, più facile/più difficile da mantenere.
Riassunto è:
- Scritture veloci, dati coerenti, letture lente
- Scritture veloci, dati incoerenti, letture veloci
- Scritture veloci, letture veloci, i dati diventano coerenti dopo il processo di aggiornamento che potrebbe richiedere del tempo. E il processo di aggiornamento ovviamente è lento.