Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
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 existe el fragmento. Especifica el namespace completo de la colección, incluyendo el nombre de la base de datos.

find

Documento

Una instrucción query que especifica una coincidencia exacta en la clave de partición. La coincidencia selecciona el fragmento que contiene el documento especificado. Debes 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. split requiere una de las siguientes opciones: find, bounds o middle.

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, utiliza la opción middle con el comando split o utiliza el comando sh.splitAt().

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

Ten cuidado al dividir los datos en una colección particionada para crear nuevos fragmentos. Cuando particionas una colección que tiene datos existentes, MongoDB crea automáticamente fragmentos para distribuir equitativamente la colección. Para dividir datos de manera efectiva en un clúster de particiones, debes considerar el número 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, las particiones pueden tener el mismo número de fragmentos, pero con tamaños de datos muy diferentes. Evite crear divisiones que conduzcan a una colección con fragmentos de tamaños diferentes.

Las siguientes secciones proporcionan ejemplos del comando split.

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 split identifica el fragmento en la colección people de la base de datos test, que contendría documentos que coinciden con la query { _id : 99 }. split no requiere que exista una coincidencia para identificar el fragmento adecuado. Luego, el comando lo divide en dos fragmentos, siendo el documento coincidente el límite inferior de uno de los fragmentos de división.

Este formulario se utiliza normalmente cuando se predivide 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.

Utiliza sh.status() para ver los límites existentes de las claves de 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