Grundlæggende har du 3 muligheder:
-
Gem bare
userId
og hent derefter brugeren separat. På denne måde får du altid de optimale resultater i form af friske data. Men det er selvfølgelig langsommere. Det er dybest set, hvad en relationsdatabase gør. En SQL DB vil blot se på den fremmede nøgle og hente dataene efter id. -
Lev med forældede data. Gem en kopi af brugernavnet i kommentarerne. Nogle gange er dette ønsket adfærd, fordi man på denne måde kan repræsentere dataene præcis, som de var, da de blev gemt. Det betyder:Hvis John opretter en kommentar og senere bliver hans brugernavn opdateret til Paul, kan du stadig se, det vil sige er blevet oprettet som John. (Dette er især nyttigt for f.eks. fakturaer, når du henviser til en person der og adressen ændres, end du ikke ønsker at opdatere adressen på en gammel faktura)
-
Opdater alt, der indeholder et brugernavn, når brugernavnet bliver opdateret. Dette er heller ikke dårligt, for et brugernavn bør normalt aldrig ændre sig. Så læsninger vil altid være hurtige, fordi navnet er gemt inde i kommentaren. Og hvis navnet ændres, er du nødt til at opdatere alt, hvor brugeren er involveret. Dette er selvfølgelig en langsom opgave, men fordi det ikke burde ske hvert minut, er det acceptabelt.
3.1 Du kan optimere tingene:Hvis brugernavn ændres, bliver dette gemt et sted og anvendt ved midnat. På denne måde kan du indsamle flere navneændringer og opdatere alt på samme tid.
Som du kan se:NoSQL handler om valg . Du kan gøre de ting, der passer bedst til dine data. Det er selvfølgelig altid en afvejning:Langsommere/hurtigere, mere/mindre kode at skrive, nemmere/sværere at vedligeholde.
Opsummeret er det:
- Hurtig skrivning, konsistente data, langsom læsning
- Hurtig skrivning, inkonsekvente data, hurtig læsning
- Hurtig skrivning, hurtig læsning, data bliver konsistente efter opdateringsprocessen, hvilket kan tage noget tid. Og opdateringsprocessen er selvfølgelig langsom.