MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Dove devo inserire la sequenza temporale delle attività in mongodb, incorporata in user o separatamente?

Entrambi gli articoli hanno ragione ed entrambi sono sbagliati.

Incorporare o non incorporare? Questa è sempre la domanda chiave e dipende dalle tue esigenze, dalle query e dall'archiviazione e persino dal tuo set di lavoro.

Alla fine della giornata possiamo solo dare indicazioni che in realtà non puoi dirti quale sia il migliore.

Tuttavia, considerando le dimensioni di un feed di attività, personalmente non lo incorporerei poiché potrebbe facilmente superare i 16 mega (per utente), tuttavia per la velocità e la potenza delle query è possibile aggregare, ad esempio, le ultime 20 attività di un utente e quindi incorporare che nella riga degli utenti (poiché gli ultimi 20 sono normalmente quelli che vengono interrogati di più).

Ma poi l'incorporamento di un aggregato dipende, lo sharding può occuparsi di eseguire query su enormi raccolte scalate orizzontalmente e l'utilizzo delle query corrette significa che non si ottiene alcun vantaggio reale dall'incorporamento e potrebbe potenzialmente renderti la vita più difficile dovendo mantenere gli indici, l'archiviazione e query necessarie per mantenere quel documento secondario.

Per quanto riguarda l'incorporamento fino alla morte. Molte delle query di MongoDB al momento si basano principalmente sull'incorporamento di uno o due livelli, ecco perché potrebbe essere difficile mantenere diciamo 12 tabelle nidificate, a quel punto inizierai a vedere domande qui e nel gruppo Google su come mantenere tali un documento enorme (la risposta è lato client, se proprio lo desideri).

Considerando questo, ospiterei un aggregato sull'utente, il che significa che l'utente può vedere l'attività propria o di altri utenti singolarmente con un viaggio di andata e ritorno.

Tuttavia, considerando che un insegnante dovrebbe molto probabilmente avere risultati di pagine da tutti gli utenti, ospiterei una raccolta di attività separata e interrogherei su quella per loro. Il paging di un aggregato di documenti secondari richiede alcune query e in questo caso sarebbe meglio farlo in questo modo.

Spero che questo dovrebbe iniziare.