2014-12-10 32 views
7

In Meteor, ho un po 'di confusione tra Session e Local Collection.Quali sono le differenze tra la raccolta Session e Local (solo lato client)?

So che Session è un archivio valori temporaneo reattivo, solo lato client e viene pulito all'aggiornamento della pagina. La raccolta locale sembra essere la stessa: memoria temporanea lato client reattiva, pulita all'aggiornamento della pagina con una funzione più flessibile come l'inserimento, aggiornamento & rimuovere la query come raccolta Mongo lato server.

Quindi penso che potrei gestire tutto in Raccolta locale senza Session, o, tutto in Session senza Local Collection.

Ma qual è il modo migliore ed efficace per utilizzare Sessione e/o Raccolta locale? Semplicemente, quando usare Session e non usarlo? E quando usare la raccolta locale e quando non la usi?

risposta

6

Mentre leggevo la tua domanda mi sono detto che questa è una domanda molto facile, ma poi mi stavo grattando la testa. Ho cercato di capire un esempio che puoi semplicemente realizzare con sessioni o raccolte. Ma non ho trovato nessun caso d'uso. Quindi, iniziamo con il rollup delle cose. Fondamentalmente hai già risposto alla domanda da solo, perché è il poco zucchero a rendere le collezioni qualcosa di speciale.

Quando utilizzare una raccolta?

Fondamentalmente una raccolta è un artefatto di database. Immagina di avere un'applicazione client-server. Tutti i dati sono persistenti nella memoria lato server. Ora è possibile utilizzare una raccolta locale per fornire all'utente un piccolo sottoinsieme della raccolta dei server. Quindi una raccolta client è un database con una quantità ridotta di dati. Il vantaggio è che puoi accedere alla raccolta con le query. È possibile utilizzare le stesse query su server e client. Inoltre, una collezione contiene sempre più oggetti dello stesso tipo. A volte produci dati sul client per il cliente. Nessuna interazione con il server necessaria. Di quanto tu possa usare una collezione locale. Una raccolta locale offre le stesse funzionalità di una normale raccolta senza comunicazione con il server. Questo dovrebbe essere usato se si hanno più oggetti con la stessa struttura e in particolare se si desidera utilizzare gli operatori di query.

È anche possibile salvare i dati all'interno di un oggetto di sessione. Gli oggetti di sessione possono contenere anche più oggetti. Ma l'immagine si desidera trovare un oggetto in un objectarray indicizzato con un ID speciale. Di quanto tu abbia bisogno di iterare lancia l'intero array per trovare questo oggetto. Devi scrivere logica aggiuntiva, che può essere gestita con la raccolta come per magia. Inoltre, le raccolte restituiscono i cursori. Un cursore è un oggetto reattivo che cambia solo se i dati selezionati cambiano. Ciò significa che se utilizzi trova con un ID. Di questo oggetto si eseguono nuovamente i rerender quando l'oggetto di questo ID cambia. Con la sessione non puoi. Quando una sessione cambia, devi rerenderizzare tutti gli oggetti dipendenti.

Quando utilizzare una sessione?

Per tutto il resto. Le sessioni sono spesso solo piccoli oggetti che contengono alcune logiche di configurazione.Fondamentalmente è solo un oggetto e non un'apparizione multipla di oggetti uguali. Non ho tempo ora di entrare nei dettagli, ma se non si adatta ai casi di utilizzo della collezione è possibile utilizzare le sessioni.

Dai un'occhiata al post this che descrive il motivo per cui le sessioni non devono essere sovrautilizzate.

+0

Meteor ti impedisce di inserire il lato client dei documenti a meno che tu non abbia l'ID, che non avrai. – jononomo

0

Si utilizzerà Session ogni volta che si memorizzano valori temporanei che NON devono essere mantenuti nel database.

Esempi banali possono includere una selezione di filtri o l'elemento di un utente in un vies di indice attualmente selezionato.

i dati manipolati in minimongo (inserimento, aggiornamento, eliminazione, ecc.) Devono essere inviati al server e archiviati nel database. Ad esempio questo potrebbe essere l'aggiornamento di informazioni sul profilo degli utenti, ecc.

+0

Ottimo, fammi sapere se desideri un spiegazione più lunga, prima di contrassegnarla corretta. :) – pushplaybang

+0

Capisco ora di più lo scopo della Sessione e a cosa serve. Nelle esercitazioni Discover Meteor, utilizza la raccolta locale per impostare una raccolta degli errori che non è destinata a essere rispedita al server, ecco perché ero confuso e non capivo il suo vero scopo. Quindi immagino che quando voglio rimandare i dati al server devo usare metodi (insert/update) e metodi personalizzati, ho ragione? –

+0

sì, penso che ce l'hai. – pushplaybang

4

Presumo che per collezione locale cercavi: new Mongo.Collection(null)

La differenza è che collezioni locali non sopravvivono codice caldo spinge. Un aggiornamento cancellerà Session, ma il push del codice non lo farà, c'è un codice speciale in Meteor per mantenere i valori della variabile Session nel caso di un hot code push.