Risposte:
Se si utilizza lo sharding, il "bilanciamento del carico" è il processo mongos - in realtà è più simile a un router - mantiene una copia in memoria del database di configurazione e può prendere decisioni in base alla chiave di shard.
Se intendi il bilanciamento del carico tra set di repliche identiche o tra i membri del set, allora c'è una richiesta di funzionalità per fare in modo che anche i mongos gestiscano quello scenario ( https://jira.mongodb.org/browse/SERVER-1594 ), comunque dato come funzionano i driver non è davvero necessario (renderebbe i driver meno complessi però).
In un singolo set di repliche, non è possibile distribuire le scritture, tutte devono andare sul primario. Puoi già distribuire le letture ai secondari, tramite le Preferenze di lettura che ritieni appropriate. Il conducente tiene traccia di ciò che è primario e di ciò che è secondario e instrada le query in modo appropriato.
Il "bilanciamento del carico" si ottiene tramite lo sharding. Con lo sharding distribuisci effettivamente scritture / aggiornamenti su singoli frammenti. Non esiste un algoritmo specifico che lo faccia in quanto mongo ti consentirà di partizionare i dati in base alla combinazione di chiavi desiderata. I migliori algoritmi di partizione sono quelli che hanno un composto di voci sequenziali più uno casuale.
Ad esempio un id utente può essere partizionato come segue
xx-sha1(user email)
xx = time sequence
Tenere presente che per implementare lo sharding è necessario disporre di tre server di configurazione e nodi di dati. I nodi di dati possono essere raggruppati in set di repliche per ridondanza e possono essere utilizzati (solo se è possibile) per leggere dati da secondari. Dico solo se è possibile leggere i dati perché la replica viene eseguita in modo asincrono, quindi non è garantito che i nuovi dati saranno disponibili al momento della query sui secondari.
Tieni presente che l'algoritmo di partizione dipende totalmente da te e dovrebbe soddisfare le tue esigenze applicative. Inoltre, dovresti considerare se vuoi solo scrivere i dati e solo su letture occasionali o devi leggerli subito dopo averli scritti.