2015-07-14 3 views
6

Esiste qualche differenza pratica tra la conservazione di molti semplici (semplici) abbonamenti e la conservazione di un unico complesso (molti livelli)? (con publish-composite, ad esempio)Qual è la differenza tra fare diverse sottoscrizioni semplici e una singola complessa?

Mi sembra che non ci dovrebbe essere alcuna differenza, ma volevo essere sicuro. Preferisco attenermi a semplici sottotitoli poiché sembra rendere il codice più chiaro in progetti altamente modulari, ma solo se ciò non portasse alcun problema di prestazioni o scalabilità.

Quindi qualcuno può aiutarmi?

+0

non corrisponde interamente alla quantità di dati che dovresti inviare? Se ti iscrivi al server, il set di dati da sincronizzare può essere molto piccolo. Proprio quello di cui hai bisogno. Se è necessario sincronizzare diverse raccolte prima di decidere sul client che è necessario solo un piccolo frammento di esso, si inviano più del necessario che possono influire sulle prestazioni. Ma ancora, potrebbe non essere sempre così. –

risposta

0

Ci sono due differenze fondamentali nel fare diversi abbonamenti semplici vs. mantenendo abbonamento composito complesso

1) Esposizione/Privacy

Un abbonamento composito consente di eseguire giunzioni/filtri sul lato server per assicurati di inviare solo i dati che l'utente corrente ha l'autorità di vedere. Non si desidera esporre l'intero database al client. Tieni presente che anche se l'interfaccia utente non mostra i dati, l'utente può accedere alla console e acquisire tutti i dati pubblicati dal server.

2) le prestazioni del client

Performing unisce/filtri sul client può essere costoso se si dispone di un grande insieme di dati. Questo dipende ovviamente dalla tua applicazione. Inoltre, se il database viene costantemente aggiornato e tali aggiornamenti non dovrebbero essere visibili all'utente; dovrai costantemente trasferire gli aggiornamenti al cliente senza trarre benefici dalle spese di rete.

0

Penso che a questa domanda non possa essere data una risposta precisa senza ulteriori dettagli specifici per la vostra applicazione. Detto questo, penso che sia una domanda importante, quindi descriverò alcune cose da considerare.

Per essere chiari, il focus di questa risposta sarà discutere i meriti relativi del lato server e lato client reactive joins.

decidere se è necessario reattività

È possibile produrre un semplice unire di più raccolte, senza alcuna reattività nel inserzionista (vedi il primo esempio dal suddetto articolo). A seconda della natura del problema, potrebbe non essere necessario un join reattivo. Immagina di unirti a commenti e autori, ma la tua app ha sempre tutti gli autori possibili pubblicati. In tal caso il difetto fondamentale nei join non reattivi (documenti secondari mancanti dopo un nuovo genitore) non esisterà, quindi una pubblicazione reattiva è ridondante.

considerano il vostro modello di sicurezza

Come ho detto nel mio articolo sul template joins, lato server si unisce il vantaggio di impacchettare tutti i dati insieme, mentre i client si unisce agli editori più granulari. Considera le implicazioni sulla sicurezza di avere un editore come commentsAndAuthors rispetto a due implementazioni generiche di comments e users. Quest'ultimo suggerisce che chiunque potrebbe richiedere una serie di documenti utente senza contesto.

Server unisce può essere CPU e memoria maiali

Guardate attentamente l'attuazione della libreria che si stanno prendendo in considerazione per il lato server si unisce. Alcuni di essi usano observe che richiede che ogni documento completo nella catena delle dipendenze sia conservato in memoria. Altri sono implementati solo su observeChanges che è più efficiente ma rende i pacchetti un po 'meno flessibili in quello che possono fare.

look per riutilizzare osservatore

Uno dei vostri obiettivi dovrebbe essere quello di reuse your observers. In altre parole, dato che si avranno S iscrizioni simultanee, si finirà solo con il lavoro ~ (S-I) dove I è il numero di osservatori identici tra i client. A seconda della natura dei tuoi abbonamenti, potresti vedere un maggiore riutilizzo dell'osservatore con abbonamenti più granulari, ma questo è molto specifico per l'applicazione.

guardatevi latenza

Un grande vantaggio di lato server si unisce è che essi offrono tutti i documenti in modo efficace in una sola volta. Confrontalo con un client join che deve attendere l'arrivo di ogni set di documenti padre prima di attivare le sottoscrizioni secondarie. Un client-join N-level dovrebbe effettuare N round-trip prima che il set iniziale di documenti venga consegnato al client.

conclusione

Avrete bisogno di prendere tutto quanto sopra in considerazione al momento di decidere la tecnica da utilizzare per ciascuna delle vostre pubblicazioni. La realtà è che il benchmarking di un'app live su qualcosa come kadira è l'unico modo per arrivare a una risposta definitiva.

+0

che è davvero utile, grazie. Probabilmente proverò la cosa più granulare. Sono solo preoccupato che avere molte (10+) piccole sottoscrizioni sia intrinsecamente peggio che avere un singolo grosso. Non ne so abbastanza su pubblicazione/sub implementazione da sapere. –