Una estrategia para subir archivos de gran tamaño se denomina subidas compuestas paralelas. En este tipo de subida, un archivo se divide en hasta 32 fragmentos, los fragmentos se suben en paralelo a objetos temporales, el objeto final se vuelve a crear con los objetos temporales y los objetos temporales se eliminan.
Las subidas compuestas paralelas pueden ser significativamente más rápidas si la velocidad de la red y del disco no son factores limitantes. Sin embargo, el objeto final almacenado en tu contenedor es un objeto compuesto, que solo tiene un hash crc32c y no un hash MD5. Por lo tanto, debes usar crcmod para realizar comprobaciones de integridad al descargar el objeto con aplicaciones Python. Solo debes realizar subidas compuestas paralelas si se cumplen las siguientes condiciones:
No es necesario que los objetos subidos tengan un hash MD5.
Cualquier usuario de Python, incluidos los usuarios de gsutil, que necesite descargar tus objetos tiene instalado google-crc32c o crcmod.
Por ejemplo, si usas Python para subir recursos de vídeo que solo se sirven con una aplicación Java, las subidas compuestas paralelas son una buena opción porque hay implementaciones de CRC32C eficientes disponibles en Java.
Cómo usan las herramientas y las APIs las subidas compuestas paralelas
En función de cómo interactúes con Cloud Storage, las subidas compuestas paralelas se pueden gestionar automáticamente en tu nombre. En esta sección se describe el comportamiento de la subida compuesta paralela de diferentes herramientas y se proporciona información sobre cómo puedes modificar el comportamiento.
Consola
La consola Google Cloud no realiza subidas compuestas paralelas.
Línea de comandos
Puedes configurar cómo y cuándo realiza gcloud storage cp
las subidas compuestas paralelas modificando las siguientes propiedades:
storage/parallel_composite_upload_enabled
: propiedad para habilitar las subidas de elementos compuestos en paralelo. Si esFalse
, inhabilita las subidas compuestas paralelas. SiTrue
oNone
, realiza subidas compuestas paralelas de los objetos que cumplan los criterios definidos en las otras propiedades. El valor predeterminado esNone
.storage/parallel_composite_upload_compatibility_check
: propiedad para activar o desactivar las comprobaciones de seguridad. Si esTrue
,gcloud storage
solo realiza cargas compuestas paralelas cuando se cumplen todas las condiciones siguientes:- La clase de almacenamiento del objeto subido es
STANDARD
. - El segmento de destino no tiene una política de retención.
- El segmento de destino no tiene habilitada la opción Retención de objetos predeterminada.
Ten en cuenta que, para comprobar estas condiciones, la CLI de gcloud recupera los metadatos del bucket de destino como parte del comando de subida.
Si
False
,gcloud storage
no realiza ninguna comprobación. El ajuste predeterminado esTrue
.- La clase de almacenamiento del objeto subido es
storage/parallel_composite_upload_threshold
: tamaño total mínimo del archivo para realizar una subida compuesta paralela. El valor predeterminado es 150 MiB.storage/parallel_composite_upload_component_size
: tamaño máximo de cada objeto temporal. La propiedad se ignora si el tamaño total del archivo es tan grande que requeriría más de 32 fragmentos con este tamaño.storage/parallel_composite_upload_component_prefix
: prefijo usado al asignar nombres a objetos temporales. Esta propiedad se puede definir como una ruta absoluta o como una ruta relativa al objeto final. Consulta la descripción de la propiedad para obtener más información. El prefijo predeterminado es la ruta absoluta/gcloud/tmp/parallel_composite_uploads/see_gcloud_storage_cp_help_for_details
.
Puedes modificar estas propiedades creando una configuración con nombre y aplicándola en cada comando con la marca --configuration
de todo el proyecto o en todos los comandos de la CLI de gcloud con el comando gcloud config set
.
No se necesita espacio adicional en el disco local cuando se usa la interfaz de línea de comandos gcloud para realizar subidas compuestas paralelas. Si una subida compuesta paralela falla antes de la composición, vuelve a ejecutar el comando de la CLI de gcloud para aprovechar las subidas reanudables de los objetos temporales que han fallado. Los objetos temporales que se hayan subido correctamente antes del fallo no se volverán a subir cuando reanudes la subida.
Los objetos temporales se denominan de la siguiente manera:
TEMPORARY_PREFIX/RANDOM_VALUE_HEX_DIGEST_COMPONENT_ID
Donde:
TEMPORARY_PREFIX
se controla mediante la propiedadstorage/parallel_composite_upload_component_prefix
.RANDOM_VALUE
es un valor numérico aleatorio.HEX_DIGEST
es un hash derivado del nombre del recurso de origen.COMPONENT_ID
es el número secuencial del componente.
Por lo general, los objetos temporales se eliminan al final de una subida compuesta paralela, pero, para evitar que queden objetos temporales, debes comprobar el estado de salida del comando de la CLI de gcloud y eliminar manualmente los objetos temporales que se hayan subido como parte de una subida cancelada.
Bibliotecas de cliente
Java
Para obtener más información, consulta la documentación de referencia de la API Java de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Puedes realizar subidas compuestas paralelas configurando AllowParallelCompositeUpload
en true
.
Por ejemplo:
Node.js
Para obtener más información, consulta la documentación de referencia de la API Node.js de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
La biblioteca de cliente de Node.js no admite subidas compuestas paralelas. En su lugar, utiliza las subidas multiparte de la API XML.
Python
Para obtener más información, consulta la documentación de referencia de la API Python de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
La biblioteca de cliente de Python no admite subidas compuestas paralelas. En su lugar, utiliza las subidas multiparte de la API XML.
APIs REST
Tanto la API JSON como la API XML permiten subir fragmentos de objetos en paralelo y volver a combinarlos en un solo objeto mediante la operación compose
.
Ten en cuenta lo siguiente al diseñar código para cargas compuestas paralelas:
Cuando se usa la operación
compose
, los objetos de origen no se ven afectados por el proceso de composición.Esto significa que, si se supone que son temporales, debes eliminarlos explícitamente una vez que hayas completado la composición correctamente. De lo contrario, los objetos de origen permanecerán en tu contenedor y se te facturarán en consecuencia.
Para protegerse frente a los cambios en los objetos de origen entre las solicitudes de subida y de composición, debe proporcionar un número de generación esperado para cada origen.