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

Shard MongoDB e carichi di aggregazione sbilanciati

Il framework di aggregazione è un ingranaggio vitale nell'infrastruttura MongoDB. Ti aiuta ad analizzare, riassumere e aggregare i dati archiviati in MongoDB. Fare riferimento a questo post del blog per ulteriori dettagli sul framework di aggregazione in MongoDB 2.6.

Nella versione 2.6, MongoDB ha apportato un cambiamento sottile ma significativo nel modo in cui le pipeline di aggregazione sottostanti vengono eseguite in un ambiente partizionato. Quando si lavora con raccolte partizionate, MongoDB divide la pipeline in due fasi. La prima fase o la fase "$match" viene eseguita su ogni shard e seleziona i documenti pertinenti. Se il pianificatore di query determina che uno shard non è rilevante in base alle chiavi shard, questa fase non viene eseguita su quello shard.

Le fasi successive vengono eseguite solo sullo shard "primario" per la raccolta. Questo shard unisce i dati degli altri shard ed esegue il resto della pipeline. Ciò si traduce in un carico notevolmente maggiore sullo shard principale della raccolta che viene aggregato. Ecco un esempio di uno dei nostri clienti che esegue tre shard e utilizza principalmente query di aggregazione:

Come vedi, il carico sul primo shard è costantemente 3-4 volte l'altro motivo. Questo è un esempio estremo poiché questo nel caso in cui il secondo e il terzo shard siano stati aggiunti in un secondo momento, quindi lo shard principale per tutte le raccolte è il primo shard. Quindi, in sostanza, le fasi successive di tutti i nostri processi di aggregazione vengono eseguiti solo su Shard1. Se esamini i log sullo shard principale, vedrai una serie di comandi di "unione" che recuperano i dati dagli altri shard.

Prima della versione 2.6, le fasi successive della pipeline di aggregazione venivano eseguite sui server MongoDB e non sullo shard principale.

Allora, come gestisci questa distribuzione irregolare del carico? Hai un paio di opzioni:

  1. Se esegui aggregazioni su più raccolte, assicurati che gli "shard primari" delle raccolte siano distribuiti uniformemente tra gli shard.
  2. Se hai un carico di aggregazione elevato su una sola raccolta, potresti dover utilizzare macchine leggermente più grandi per lo shard principale.

Come sempre, se hai domande o commenti, inviaci un'e-mail a [email protected].