2016-04-20 14 views
7

Abbiamo un'applicazione multitenant che utilizza Azure DocumentDB come database orientato ai documenti NoSQL.Memorizzazione di tipi di documenti diversi in una raccolta DocumentDb

Per multitenancy, si legge this question e this blog post. Perché in questo momento il nostro numero di utenti non soddisfa la necessità di utilizzare diversi database e/o documentCollections e, cosa ancora più importante, per risparmi abbiamo implementato la multi-tenancy con una clausola "Where" su un campo TenantId con uno documentCollection.

Analogamente, quando si tratta di memorizzare "documenti" o "oggetti" con complete nature differenti (ad esempio per esempio Book e Car), vuol dire interrogarsi sul fatto di usare uno documentCollection.

Inizialmente, sembra più ragionevole creare due diversi documentCollection per Book e Car. Tuttavia, la creazione di un documentCollection costa 25 $ minimo. Non vogliamo pagare + 25 $ ogni volta che è necessario aggiungere una nuova funzione, anche se è necessario memorizzare una bassa quantità di dati (ad esempio la nostra app memorizza molto Books ma pochi Cars ...).

E 'un buon design mettere il libro e l'auto nello stesso documentCollection? E mantieni un riferimento al tipo di documento in un membro condiviso (ad esempio string Type ="Book" or string Type = "Car").

Sapendo che abbiamo già implementato il multitenancy con una Dove "clausola", per interrogare tutte le macchine nel nostro App per un dato inquilino, le nostre domande sarebbero tutti contengono Where TenantId ="XXXX" AND Type = "Car".

Ho visto che DocumentDB supporta ora lo Partitioned Collection. Questo potrebbe essere un buon utilizzo delle partizioni o, al contrario, dovrebbero essere mantenute per ottenere una migliore scalabilità e non sono adatte a segregare diversi tipi di documenti le cui quantità di oggetti potrebbero non essere simili?

risposta

8

Sì, è "buona progettazione" per utilizzare type="Book". Puoi anche fare isBook=true, che credo sia leggermente più efficiente e abiliti il ​​comportamento di ereditarietà e mixin.

Le raccolte partizionate sono in realtà un modo per mettere più cose in una singola entità più grande piuttosto che il contrario. L'idea è di consentire il ridimensionamento di entrambi i throughput (RU) e lo spazio senza l'onere di gestire autonomamente più raccolte. "Potresti" rendere la tua chiave di partizione il tuo campo type, ma non lo consiglierei. Le chiavi di partizione dovrebbero consentire una distribuzione pressoché uniforme tra le partizioni ... tra gli altri criteri.

+0

Grazie per la tua pronta risposta. Giusto per essere sicuro quando scrivi "Le chiavi di partizione dovrebbero consentire una distribuzione uniforme tra le partizioni ... tra gli altri criteri." Vuoi dire che le chiavi di partizione sono utilizzate per creare "partizione di dimensioni approssimativamente simili"? –

+0

Stiamo anche esaminando la libreria [lumenize] (https://github.com/lmaccherone/documentdb-lumenize) per abilitare le funzioni di aggregazione a DocumentDb. Sembra molto promettente. –

+0

Dimensioni e velocità simili. Fammi sapere se hai bisogno di aiuto con Lumenize. Monitoro il tag Stack Overflow oltre a questo. –

Problemi correlati