Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
particionado

split (comando de base de datos)

split

Divide 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 split permite 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 envuelven split.

El comando split debe ejecutarse en la base de datos admin.

Tip

En mongosh, este comando también se puede ejecutar a través de los métodos asistentes sh.splitAt() y sh.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.

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.

El comando tiene la siguiente sintaxis:

db.adminCommand(
{
split: <database>.<collection>, <find|middle|bounds>
}
)

El comando toma los siguientes campos:

Campo
Tipo
Descripción

split

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.

find

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: find, bounds o middle.

No puedes usar la opción find en una colección vacía.

bounds

arreglo

bounds se aplica a los fragmentos en colecciones particionadas mediante una clave de partición con hash. El arreglo de parámetros debe consistir en dos documentos que especifiquen los valores de la clave de partición inferior y superior del fragmento. Los valores deben coincidir con los valores mínimo y máximo de un fragmento existente. Especifique solo uno de los siguientes: find, bounds, o middle.

No puedes usar la opción bounds en una colección vacía.

middle

Documento

El documento que se utilizará como punto de división para crear dos fragmentos. requiere una de lassplit siguientesfind opciones:, bounds middleo.

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.

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.

Las siguientes secciones proporcionan ejemplos del split comando.

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.

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.

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.

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.

Volver

shardingState

En esta página