I documenti che crescono sostanzialmente nel tempo possono essere bombe a orologeria. La larghezza di banda della rete e l'utilizzo della RAM diventeranno probabilmente colli di bottiglia misurabili, costringendoti a ricominciare da capo.
Innanzitutto, consideriamo due raccolte: Cliente e Pagamento. Quindi, il grano è abbastanza piccolo: un documento per pagamento.
Successivamente è necessario decidere come modellare le informazioni sull'account, come le carte di credito. Consideriamo se i documenti del cliente contengono matrici di informazioni sull'account o se è necessaria una nuova raccolta di account.
Se i documenti dell'account sono separati dai documenti del cliente, il caricamento di tutti gli account per un cliente in memoria richiede il recupero di più documenti. Ciò potrebbe tradursi in memoria aggiuntiva, I / O, larghezza di banda e utilizzo della CPU. Ciò significa immediatamente che la raccolta di account è una cattiva idea?
La tua decisione influisce sui documenti di pagamento. Se le informazioni sull'account sono incorporate in un documento del cliente, come le faresti riferimento? I documenti di account separati hanno il proprio attributo _id. Con le informazioni sull'account incorporate, l'applicazione genera nuovi ID per gli account o utilizza gli attributi dell'account (ad esempio, il numero di account) per la chiave.
Un documento di pagamento potrebbe effettivamente contenere tutti i pagamenti effettuati in un arco di tempo fisso (ad es. Giorno?). Tale complessità influenzerà tutto il codice che legge e scrive documenti di pagamento. L'ottimizzazione prematura può essere mortale per i progetti.
Come i documenti del conto, i pagamenti sono facilmente referenziati a condizione che un documento di pagamento contenga un solo pagamento. Un nuovo tipo di documento, ad esempio credito, potrebbe fare riferimento a un pagamento. Ma creereste una raccolta crediti o incorporereste le informazioni sul credito all'interno delle informazioni di pagamento? Cosa succederebbe se in seguito dovessi fare riferimento a un credito?
Per riassumere, ho avuto successo con molti piccoli documenti e molte raccolte. Implemento riferimenti con _id e solo con _id. Pertanto, non mi preoccupo che i documenti in continua crescita distruggano la mia applicazione. Lo schema è facile da capire e indicizzare perché ogni entità ha la propria raccolta. Entità importanti non si nascondono all'interno di altri documenti.
Mi piacerebbe conoscere le tue scoperte. In bocca al lupo!