Definición
splitDivide un fragmento en un clúster particionado en dos fragmentos. Las particiones gestionan y dividen fragmentos basándose en las estadísticas de tamaño de fragmento que mantienen.
En circunstancias excepcionales, el comando
splitpermite a los administradores crear divisiones manualmente. Consulte División de fragmento en un clúster para obtener información sobre estas circunstancias y sobre los comandos del shell de MongoDB que envuelvensplit.El comando
splitdebe ejecutarse en la base de datosadmin.Tip
En
mongosh, este comando también se puede ejecutar a través de los métodos asistentessh.splitAt()ysh.splitFind().Los métodos asistente son convenientes para usuarios de
mongosh, pero es posible que no proporcionen el mismo nivel de información que los comandos de base de datos. En los casos en que no se necesite la conveniencia o se requieran campos de retorno adicionales, utiliza el comando de base de datos.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
El comando tiene la siguiente sintaxis:
db.adminCommand( { split: <database>.<collection>, <find|middle|bounds> } )
Campos de comandos
El comando toma los siguientes campos:
Campo | Tipo | Descripción |
|---|---|---|
| string | El nombre de la colección donde se encuentra el fragmento. Especifique el espacio de nombres completo de la colección, incluido el nombre de la base de datos. |
| Documento | Una sentencia de consulta que especifica una coincidencia de igualdad en la clave del fragmento. La coincidencia selecciona el fragmento que contiene el documento especificado. Debe especificar solo uno de los siguientes: No puedes usar la opción |
| arreglo |
No puedes usar la opción |
| Documento | El documento que se utilizará como punto de división para crear dos fragmentos. requiere una de las |
Considerations
Cuando se usa con la opción find o la bounds, el comando split divide el fragmento a lo largo de la mediana. Como tal, el comando no puede usar la find ni la opción bounds para dividir un fragmento vacío ya que un fragmento vacío no tiene una mediana.
Para crear divisiones en fragmentos vacíos, utilice la middle opción con el comando split sh.splitAt() o utilice el comando.
Formatos de comando
Para crear una división de un fragmento, conéctate a una instancia mongos y emite el siguiente comando a la base de datos admin:
db.adminCommand( { split: <database>.<collection>, find: <document> } )
O:
db.adminCommand( { split: <database>.<collection>, middle: <document> } )
O:
db.adminCommand( { split: <database>.<collection>, bounds: [ <lower>, <upper> ] } )
Para crear una división en una colección que use una clave de partición con hash, emplee el parámetro bounds. No utilice el middle parámetro para este propósito.
Advertencia
Tenga cuidado al dividir datos en una colección fragmentada para crear nuevos fragmentos. Al fragmentar una colección con datos existentes, MongoDB crea fragmentos automáticamente para distribuirlos uniformemente. Para dividir los datos eficazmente en un clúster fragmentado, debe considerar la cantidad de documentos en un fragmento y el tamaño promedio de los documentos para crear un tamaño de fragmento uniforme. Cuando los fragmentos tienen tamaños irregulares, los fragmentos pueden tener el mismo número de fragmentos, pero tamaños de datos muy diferentes. Evite crear divisiones que resulten en una colección con fragmentos de diferentes tamaños.
Ejemplos
Las siguientes secciones proporcionan ejemplos del split comando.
Divida un fragmento a la mitad
db.adminCommand( { split : "test.people", find : { _id : 99 } } )
El comando split identifica el fragmento en la colección people de la base de datos test, que contiene documentos que coinciden con {
_id : 99 }. split no requiere que exista una coincidencia para identificar el fragmento adecuado. Luego, el comando lo divide en dos fragmentos de igual tamaño.
Nota
split crea dos fragmentos iguales por rango en lugar de por tamaño, y no utiliza el punto seleccionado como límite para los nuevos fragmentos.
Definir un punto de división arbitrario
Para definir un punto de división arbitrario, utiliza el siguiente formulario:
db.adminCommand( { split : "test.people", middle : { _id : 99 } } )
El comando identifica el fragmento en split la people colección de la test base de datos que contendría los documentos que coinciden con la { _id : 99 } consulta. no requiere que exista una coincidencia para identificarsplit el fragmento apropiado. Luego, el comando lo divide en dos fragmentos, con el documento coincidente como el límite inferior de uno de los fragmentos divididos.
Este formulario se utiliza normalmente cuando se predividen datos en una colección.
Dividir un fragmento usando valores de una clave de partición con hash
Este ejemplo utiliza la clave de partición con hash userid en una people colección de una test base de datos. El siguiente comando utiliza un arreglo que contiene dos documentos de un solo campo para representar los valores mínimo y máximo de la clave de partición con hash para dividir el fragmento:
db.adminCommand( { split: "test.people", bounds : [ { userid: Long("-5838464104018346494") }, { userid: Long("-5557153028469814163") } ] } )
Nota
MongoDB utiliza el tipo NumberLong de 64bits para representar el valor encriptado.
Utilice para ver los límites existentes de las claves de sh.status() fragmento.
Metadata Lock Error
Si otro proceso, como un proceso de balanceador, cambia los metadatos mientras split se está ejecutando, puede que veas un metadata lock error.
errmsg: "The collection's metadata lock is already taken."
Este mensaje indica que la división ha fallado sin efectos secundarios. Reintente el comando split.