En la mayoría de las circunstancias, debe dejar que el sistema automático El balanceador migra rangos entre fragmentos. Sin embargo, es posible que desee migrar rangos manualmente en algunos casos:
Al predividir una colección vacía, migre los rangos manualmente para distribuirlos uniformemente entre los fragmentos. Use la predivisión en casos limitados para facilitar la ingesta masiva de datos.
Si el equilibrador de un clúster activo no puede distribuir rangos dentro de la ventana de equilibrio, tendrá que migrar los rangos manualmente.
Para migrar rangos manualmente, utilice el moveChunk moveRange Comando o.
Para obtener más información sobre cómo el balanceador automático mueve rangos entre fragmentos, consulte Aspectos internos del balanceador y migración de rangos.
Ejemplo
Migrar un solo rango
El siguiente ejemplo asume que el campo username es la clave de fragmento de una colección llamada users en la myapp base de datos y que el valor smith existe dentro del rango que se va a migrar. Migre el rango con el siguiente comando mongosh en.
db.adminCommand( { moveChunk : "myapp.users", find : {username : "smith"}, to : "mongodb-shard3.example.net" } )
Este comando mueve el rango que incluye el valor de clave de fragmento "smith" al mongodb-shard3.example.netfragmento. El comando se bloqueará hasta que se complete la migración.
Tip
Para devolver una lista de fragmentos, utilice el listShards comando.
Ejemplo
Migrar uniformemente los rangos
Para migrar uniformemente los rangos de la colección myapp.users, coloque cada rango de prefijo en el siguiente fragmento del otro y ejecute los siguientes comandos en el shell de mongo:
var shServer = [ "sh0.example.net", "sh1.example.net", "sh2.example.net", "sh3.example.net", "sh4.example.net" ]; for ( var x=97; x<97+26; x++ ){ for( var y=97; y<97+26; y+=6 ) { var prefix = String.fromCharCode(x) + String.fromCharCode(y); db.adminCommand({moveChunk : "myapp.users", find : {email : prefix}, to : shServer[(y-97)/6]}) } }
Consulte Crear rangos en un clúster fragmentado para obtener una introducción a la división previa.
Utilice el
moveRangecomando con los campos_secondaryThrottlewriteConcerny para determinar cuándo el balanceador procede con el siguiente documento en el rango de migración.Utilice el
moveRangecomando con los campossecondaryThrottlewriteConcerny para determinar cuándo el balanceador procede con el siguiente documento en el rango de migración.
moveRange moveRange Consulte y para obtener más detalles.
Change Streams y documentos huérfanos
A partir de MongoDB 5.3, durante la migración de rango, los eventos de flujo de cambios no se generan para las actualizaciones de documentos huérfanos.