Carga de objetos mediante una carga de varias partes
La carga de varias partes permite cargar un objeto único como un grupo de partes por separado. Cada parte es una parte de datos de objeto consecutivos. Puede cargar partes de objeto en cualquier secuencia o cargarlas de forma independiente. Una pieza se puede recargar después de un fallo de carga, sin afectar a otras piezas. Una vez cargadas todas las piezas, OBS fusiona estas piezas para crear el objeto. Generalmente, si el tamaño de un objeto alcanza los 100 MB, se recomienda cargar varias partes. Por ejemplo, si desea cargar un objeto de 500 MB en un bucket de OBS, puede usar OBS Browser+ para cargar el objeto mediante una carga de varias partes. OBS Browser+ divide el objeto en partes pequeñas y luego carga las partes. Alternativamente, puede invocar a la API de carga de varias partes, lo que mejora la eficiencia de la carga y reduce los fallos.
La carga de varias partes proporciona las siguientes ventajas:
- Mejorar el rendimiento: puede cargar piezas en paralelo para mejorar el rendimiento.
- Recuperación rápida de cualquier fallo de red: Las piezas de tamaño pequeño pueden minimizar el impacto de la carga fallida causada por errores de red.
- Cómoda suspensión y reanudación de la carga de objetos: Puede cargar piezas en cualquier momento. Una carga de varias partes no tiene un período de validez. Debe completar o cancelar explicitamente la carga de varias partes.
- Iniciar la carga antes de conocer el tamaño de un objeto: Puede cargar un objeto mientras lo crea.
La API de carga de varias partes permite cargar un objeto grande en varias partes. Puede cargar un nuevo objeto grande o crear una copia de un objeto existente mediante esta API.
El procedimiento para cargar varias secciones es el siguiente: iniciar la carga (inicializar la tarea de carga), cargar partes y completar la carga (unir las partes cargadas). Al recibir una solicitud de fusión de piezas, OBS fusiona las piezas cargadas para crear un nuevo objeto. Se puede acceder al objeto como otros objetos.
Puede enumerar todas las tareas de carga de varias partes en curso u obtener la lista de partes cargadas sobre una tarea especificada de carga de varias partes. A continuación se describen las operaciones detalladas.
Inicio de una carga de varias partes
Cuando envía una solicitud para iniciar la carga de varias partes, OBS devuelve una respuesta con el ID de carga, que es el identificador único de la carga de varias partes. Este ID debe incluirse en la solicitud para cargar piezas, enumerar las piezas cargadas, completar una carga de varias piezas o cancelar una carga de varias partes.
Carga de una parte
Al cargar piezas, debe especificar el ID de carga y los números de pieza. Puede seleccionar cualquier número de pieza entre 1 y 10,000. Un número de pieza identifica de forma exclusiva una pieza y su ubicación en el objeto que está cargando. Si el número de una parte cargada se utiliza para cargar una nueva parte, la parte cargada se sobrescribirá. Cada vez que suba una parte, OBS devuelve el encabezado ETag en la respuesta. Para cada tarea de carga de piezas, debe registrar los números de pieza y los valores de ETag. Estos números de parte y valores de ETag son necesarios en operaciones posteriores de completar la tarea de carga de varias partes.
Una vez inicializada la tarea de carga de varias partes y cargadas una o más partes, debe combinar las partes o cancelar la tarea de carga de varias partes. De lo contrario, tienes que pagar la tarifa de almacenamiento de las piezas cargadas. OBS libera el almacenamiento y deja de cobrar la tarifa de almacenamiento solo después de que se fusionen las partes cargadas o se cancele la tarea de carga de varias partes.
Cuando se realizan varias operaciones de carga simultánea para la misma parte de un objeto, el servidor cumple con la política Last Write Win, pero el tiempo al que se hace referencia en Last Write es el tiempo en que se crean los metadatos de la parte. Para garantizar la precisión de los datos, el cliente debe estar bloqueado durante la carga simultánea para la misma parte de un objeto. La carga simultánea para diferentes partes de un objeto no requiere que el cliente esté bloqueado.
Copia de una parte
Después de crear un trabajo de carga de varias partes, puede especificar ID de carga y cargar partes para la tarea de carga especificada. También puede invocar a la API para copiar piezas para agregar piezas. Una parte de un objeto o todo el objeto se puede copiar como una parte.
No se puede determinar si una solicitud se realiza correctamente solo en función del status_code en el encabezado de HTTP devuelto. Si se devuelve 200 para status_code, el servidor ha recibido la solicitud y ha comenzado a procesarla. La copia solo tiene éxito cuando el cuerpo de la respuesta contiene ETag.
Si copia el objeto de origen como una parte llamada part1 y otra part1 ya existe antes de la operación de copia, la part1 original será sobrescrita por la nueva después de la operación de copia. Una vez que la copia se realiza correctamente, solo se muestra la nueva part1. Los datos de la part1 anterior se eliminarán. Por lo tanto, asegúrese de que la pieza de destino no existe o no tiene valor al copiar una pieza. De lo contrario, los datos pueden ser eliminados por error. El objeto de origen no cambia durante la copia.
Fusión de piezas y cancelación de una tarea de carga de varias piezas
Al fusionar piezas, OBS crea un objeto estandarizando varias piezas en orden ascendente. Si se proporciona algún metadato de objeto en la inicialización de una tarea de carga de artículos, OBS asocia los metadatos con el objeto. Una vez completada la carga de varias piezas, las piezas dejarán de existir. Una solicitud de fusión de piezas debe contener el ID de carga, los números de pieza y una lista de valores de ETag correspondientes. Las respuestas OBS incluyen la ETag que identifica de forma única datos de objetos compuestos. La ETag no es el valor hash MD5 de los datos del objeto. Puede cancelar una tarea de carga de varias partes. Después de cancelar una tarea de carga de varias partes, el ID de carga no se puede utilizar para cargar ninguna parte. Luego, OBS libera el almacenamiento de todas las partes cargadas. Si detienes una carga de varias parte en curso, la carga seguirá completa (el resultado puede ser exitoso o fallado). Para liberar la capacidad de almacenamiento ocupada por todas las partes cargadas, cancele la carga de varias partes una vez completada toda la tarea.
Si se cargan 10 piezas pero solo se seleccionan nueve piezas para combinar, las piezas que no se fusionan se eliminarán automáticamente por el sistema. Las piezas que no se fusionan no se pueden restaurar después de eliminarlas. Antes de fusionar las piezas, adopta la API utilizada para enumerar las piezas que se han cargado para comprobar todas las piezas para asegurarse de que no se pierda ninguna pieza.
Enumeración de piezas cargadas
Puede enumerar las partes de una tarea de carga de varias partes especificadas o las partes de todas las tareas de carga de varias partes en curso. La información sobre las piezas cargadas en una carga de varias piezas específica se devolverá para una solicitud de lista de las piezas cargadas. Para cada solicitud de listar las piezas cargadas, OBS devuelve información sobre las piezas cargadas en la carga multiparte específica. Se puede devolver información sobre un máximo de 1000 piezas. Si se cargan más de 1000 piezas en una carga de varias piezas, debe enviar varias solicitudes para listar todas las piezas cargadas. La lista de piezas cargadas no incluye las piezas combinadas.
Una lista devuelta solo se puede utilizar para la verificación. Una vez completada la carga de varias partes, el resultado de la lista ya no es válido. Sin embargo, cuando se cargan los números de pieza y los valores ETag devueltos por OBS, se reservará la lista de números de pieza especificados por el usuario.
Listado de cargas de varias partes
Puede obtener la lista de tareas de carga de varias partes inicializadas enumerando las tareas de carga multiparte en el bucket. Las tareas de carga de varias partes inicializadas se refieren a las tareas de carga de varias partes que no se fusionan o cancelan después de la inicialización. Se puede devolver un máximo de 1000 tareas de carga de varias partes para cada solicitud. Si el número de tareas de carga multiparte en curso es superior a 1000, debe enviar más solicitudes para consultar las tareas restantes.
Tabla 1 enumera las restricciones en la lista de cargas de varias partes.
Concepto |
Restricción |
---|---|
Tamaño del objeto |
Hasta 48.8 TB |
Número máximo de piezas para cada tarea de carga |
10,000 |
Número de pieza |
1–10,000 (incluido) |
Tamaño de la pieza |
El tamaño de la pieza está entre 5 MB y 5 GB. El tamaño de la última parte está entre 0 bytes y 5 GB. |
Número máximo de piezas cargadas devueltas en respuesta a la solicitud de enumeración de piezas cargadas. |
1000 |
Número máximo de tareas de carga multiparte inicializadas devueltas en respuesta a la solicitud de enumeración de tareas multiparte inicializadas. |
1000 |
Operaciones y permisos de carga de varias partes
Puede realizar la carga de varias partes solo después de que se le haya concedido el permiso. Puede usar ACL, políticas de bucket o políticas de usuario para conceder a los usuarios el permiso. En la siguiente tabla se enumeran las operaciones de carga de varias partes y los permisos necesarios que pueden conceder las ACL, las políticas de bucket o las políticas de usuario.
Operación |
Permisos requeridos |
---|---|
Inicio de una carga de varias partes |
Para realizar esta operación, necesita tener el permiso de PutObject. El propietario de un bucket puede permitir a los administradores realizar la operación de PutObject. |
Carga de piezas |
Para realizar esta operación, necesita tener el permiso de PutObject. Solo el iniciador de una carga de varias partes puede cargar partes. El propietario del bucket debe conceder al iniciador de carga de varias partes el permiso de PutObject para que el iniciador pueda cargar partes del objeto. |
Copia de partes |
Para realizar esta operación, necesita tener el permiso de PutObject así como el permiso de GetObject sobre el objeto que se va a copiar. Solo el iniciador de una carga de varias partes puede copiar partes. El propietario del bucket debe conceder al iniciador de carga de varias partes el permiso de PutObject para que el iniciador pueda cargar partes del objeto. |
Montaje de partes |
Para realizar esta operación, necesita tener el permiso de PutObject. Solo el iniciador de una carga de varias partes puede ensamblar piezas. El propietario del bucket debe conceder al iniciador de carga multiparte el permiso PutObject para que el iniciador pueda completar la carga de varias partes. |
Cancelación de una carga de varias partes |
Para realizar esta operación, necesita tener el permiso de AbortMultipartUpload. De forma predeterminada, solo el propietario del bucket y el iniciador de carga de varias partes tienen este permiso. Además de la configuración predeterminada, el propietario del bucket puede permitir que los administradores realicen esta operación. El propietario del cubo también puede negar a los administradores que realicen esta operación. |
Enumeración de piezas cargadas |
Para realizar esta operación, necesita tener el permiso de ListMultipartUploadParts. De forma predeterminada, el propietario del bucket puede enumerar las partes cargadas de cualquier carga de varias partes al bucket. El iniciador de carga multiparte puede enumerar las partes cargadas de una carga específica de varias partes. Además de la configuración predeterminada, el propietario del bucket puede permitir que los administradores realicen esta operación. El propietario del cubo también puede negar a los administradores que realicen esta operación. |
Listado de cargas de varias partes |
Para enumerar las tareas de carga de varias partes en el bucket, necesita tener el permiso de ListBucketMultipartUploads. Además de la configuración predeterminada, el propietario del bucket puede permitir que los administradores realicen esta operación. |
Las API de REST aplicables a la carga de varias partes
Las siguientes secciones de la Referencia de la API de servicio de almacenamiento de objetos describen las API de REST relevantes para la carga de varias partes.
- Listado de cargas de varias partes iniciadas en un bucket
- Inicio de una carga de varias partes
- Carga de varias partes
- Carga de una parte de objecto - Copia
- Listado de partes cargadas de un objeto
- Completo de una carga de varias partes
- Cancelación de tareas de carga de varias partes