Definición
splitDivide una Unfragmento de un clúster fragmentado se divide en dos fragmentos. Los fragmentos gestionan y dividen los fragmentos según las estadísticas de tamaño que mantienen.
En circunstancias excepcionales, el comando permite a los
splitadministradores crear divisiones manualmente. Consulte "Particiones en un clúster fragmentado" para obtener información sobre estas circunstancias y sobre los comandos del shell de MongoDB quesplitencapsulan.El comando debe ejecutarse en
splitlaadminbase de datos.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 utilizar la opción |
| arreglo |
No puedes utilizar la opción |
| Documento | El documento que se utilizará como punto de división para crear dos fragmentos. requiere una de las |
Considerations
Al usar find la opción bounds o, el split comando divide el fragmento según la mediana. Por lo tanto, no puede usar find la bounds opción ni para dividir un fragmento vacío, ya que no tiene 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 comandos
Para crear una división de fragmentos, conéctese a una instancia y emita el siguiente comando a mongos la admin base de datos:
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 para una colección que utiliza una clave de fragmento con hash, utilice el bounds parámetro.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.
Dividir un trozo por la mitad
db.adminCommand( { split : "test.people", find : { _id : 99 } } )
El comando identifica el fragmento en split la people colección de la test base de datos que contiene los documentos que coinciden {
_id : 99 } con. no requiere que exista una coincidencia para identificarsplit el fragmento apropiado. Luego, el comando lo divide en dos fragmentos de igual tamaño.
Nota
split crea dos fragmentos iguales por rango en lugar de 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, utilice el siguiente formato:
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 utilizando valores de una clave de fragmento 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 64el tipo NumberLong de bits para representar el valor hash.
Utilice para ver los límites existentes de las claves de sh.status() fragmento.
Metadata Lock Error
Si otro proceso, como un proceso balanceador, cambia los metadatos mientras se ejecuta, es posible que split vea metadata lock error un.
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.