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

La raccolta partizionata di MongoDB non viene ribilanciata

In MongoDB, quando vai su un sistema partizionato e non vedi alcun bilanciamento, potrebbe essere una delle tante cose.

  1. Potresti non avere dati sufficienti per attivare il bilanciamento. Questa non era sicuramente la tua situazione, ma alcune persone potrebbero non rendersi conto che con una dimensione predefinita del blocco di 64 MB potrebbe essere necessario un po' di tempo per inserire i dati prima che ce ne sia abbastanza per dividere e bilanciare alcuni di essi con altri blocchi.

  2. Il bilanciatore potrebbe non essere stato in esecuzione, poiché le altre raccolte venivano bilanciate, il che era improbabile nel tuo caso a meno che questa raccolta non fosse stata frammentata per ultima dopo che il bilanciatore era stato interrotto per qualche motivo.

  3. I blocchi nella tua raccolta non possono essere spostati. Ciò può verificarsi quando la chiave shard non è sufficientemente granulare per suddividere i dati in blocchi sufficientemente piccoli. A quanto pare questo era il tuo caso perché la tua chiave shard si è rivelata non abbastanza granulare per una raccolta così grande:hai 105 blocchi (che probabilmente corrispondono al numero di valori job_id univoci) e oltre 30 GB di dati. Quando i blocchi sono troppo grandi e il bilanciatore non può spostarli, li etichetta come "jumbo" (quindi non girerà le ruote cercando di migrarli).

Come recuperare da una scelta sbagliata di una chiave shard? Normalmente è molto doloroso modificare la chiave shard:poiché la chiave shard è immutabile, devi eseguire l'equivalente di una migrazione completa dei dati per inserirla in una raccolta con un'altra chiave shard. Tuttavia, nel tuo caso la raccolta è ancora tutta su uno shard, quindi dovrebbe essere relativamente facile "rimuovere lo shard" dalla raccolta e ridimensionarla nuovamente con una nuova chiave shard. Poiché il numero di job_id è relativamente piccolo, consiglierei di utilizzare un indice normale per shard su job_id, customer_code poiché probabilmente esegui una query su questo e suppongo che sia sempre impostato al momento della creazione del documento.