Sto cercando di capire l'equivalente di chiavi e indici esterni in NoSQL KVP o database di documenti. Dal momento che non ci sono tabelle pivot (per aggiungere chiavi che contrassegnano una relazione tra due oggetti), sono davvero perplesso su come potresti recuperare i dati in un modo che sarebbe utile per le normali pagine web.
Diciamo che ho un utente e questo utente lascia molti commenti in tutto il sito. L'unico modo in cui riesco a pensare di tenere traccia dei commenti degli utenti è farlo
- Incorporali nell'oggetto utente (che sembra abbastanza inutile)
- Crea e mantieni un
user_id:comments
valore che contenga un elenco della chiave di ogni commento [commento: 34, commento: 197, ecc ...] in modo che io possa recuperarli secondo necessità.
Tuttavia, prendendo il secondo esempio ti imbatterai presto in un muro di mattoni quando lo usi per tracciare altre cose come una chiave chiamata "active_comments" che potrebbe contenere 30 milioni di ID al suo interno, il che costa una TONNELLATA interrogare ogni pagina solo per conoscerne alcuni recenti commenti attivi. Sarebbe anche molto soggetto a condizioni di gara poiché molte pagine potrebbero tentare di aggiornarlo contemporaneamente.
Come posso tenere traccia di relazioni come le seguenti in un database NoSQL?
- Tutti i commenti di un utente
- Tutti i commenti attivi
- Tutti i post contrassegnati con [parola chiave]
- Tutti gli studenti in un club o tutti i club in cui si trova uno studente
O sto pensando a questo in modo errato?