Una estrategia para cargar archivos grandes se denomina carga compuesta paralela. En esta carga, se divide un archivo en hasta 32 fragmentos, los fragmentos se suben en paralelo a objetos temporales, el objeto final se vuelve a crear mediante los objetos temporales y, luego, se borran los objetos temporales.
Las cargas compuestas paralelas pueden ser mucho más rápidas si la velocidad de la red y el disco no son factores limitantes. Sin embargo, el objeto final almacenado en el bucket es un objeto compuesto, que solo tiene un hash crc32c y no un hash MD5. Como resultado, debes usar crcmod para realizar verificaciones de integridad cuando descargas el objeto con aplicaciones de Python. Solo debes realizar cargas compuestas paralelas si se aplica lo siguiente:
No necesitas que los objetos subidos tengan un hash MD5.
Cualquier usuario de Python, incluidos los usuarios de gsutil, que necesite descargar los objetos tiene instalado google-crc32c o crcmod.
Por ejemplo, si usas Python para subir elementos de video que solo entrega una aplicación de Java, las cargas compuestas paralelas son una buena opción porque hay implementaciones eficientes de CRC32C disponibles en Java.
Cómo las herramientas y las API usan las cargas compuestas paralelas
Según cómo interactúes con Cloud Storage, las cargas compuestas paralelas pueden administrarse de forma automática en tu nombre. En esta sección, se describe el comportamiento de carga compuesto en paralelo para diferentes herramientas y se proporciona información sobre cómo puedes modificar el comportamiento.
Console
La consola de Google Cloud no realiza cargas compuestas paralelas.
Línea de comandos
Puedes configurar cómo y cuándo gcloud storage cp
realiza cargas compuestas paralelas si modificas las siguientes propiedades:
storage/parallel_composite_upload_enabled
: propiedad para habilitar las cargas compuestas paralelas. Si esFalse
, inhabilita las cargas compuestas paralelas. Si esTrue
oNone
, realiza cargas compuestas paralelas para los objetos que cumplen con los criterios definidos en las otras propiedades. La configuración predeterminada esNone
.storage/parallel_composite_upload_compatibility_check
: propiedad para activar o desactivar las verificaciones de seguridad Si esTrue
,gcloud storage
solo realiza cargas compuestas paralelas cuando se cumplen todas las condiciones siguientes:- La clase de almacenamiento para el objeto subido es
STANDARD
. - El bucket de destino no tiene una política de retención.
- El bucket de destino no tiene habilitadas las conservaciones de objetos predeterminadas.
Ten en cuenta que, para verificar estas condiciones, la gcloud CLI recupera los metadatos del bucket de destino como parte del comando de carga.
Si es
False
,gcloud storage
no realiza ninguna verificación. La configuración predeterminada esTrue
.- La clase de almacenamiento para el objeto subido es
storage/parallel_composite_upload_threshold
: Es el tamaño total mínimo del archivo para realizar una carga compuesta paralela. La configuración predeterminada es de 150 MiB.storage/parallel_composite_upload_component_size
: Es el 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 en este tamañostorage/parallel_composite_upload_component_prefix
: Es el prefijo que se usa para nombrar objetos temporales. Esta propiedad se puede establecer como una ruta de acceso absoluta o como una ruta de acceso relativa al objeto final. Consulta la descripción de la propiedad para obtener más información. El prefijo predeterminado es la ruta de acceso absoluta/gcloud/tmp/parallel_composite_uploads/see_gcloud_storage_cp_help_for_details
.
Puedes modificar estas propiedades si creas una configuración con nombre y aplicas la configuración por comando usando la marca --configuration
de todo el proyecto o para todos los comandos de gcloud CLI con el comando gcloud config set
.
No se requiere espacio en el disco local adicional cuando se usa gcloud CLI para realizar cargas compuestas paralelas. Si una carga compuesta paralela falla antes de la composición, ejecuta el comando de gcloud CLI de nuevo para aprovechar las cargas reanudables de los objetos temporales que fallaron. Cualquier objeto temporal que se haya subido de forma correcta antes de la falla, no volverá a subirse cuando reanudes la carga.
Los objetos temporales reciben un nombre de la siguiente manera:
TEMPORARY_PREFIX/RANDOM_VALUE_HEX_DIGEST_COMPONENT_ID
Aquí:
- La propiedad
storage/parallel_composite_upload_component_prefix
controlaTEMPORARY_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 borran al final de una carga compuesta paralela. Sin embargo, para evitar que queden objetos temporales, debes verificar el estado de salida del comando de gcloud CLI y borrar de forma manual los objetos temporales que se subieron como parte de cualquier carga anulada.
Bibliotecas cliente
Java
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Java.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Puedes realizar cargas compuestas paralelas si configuras AllowParallelCompositeUpload
como true
.
Por ejemplo:
Node.js
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Node.js.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
La biblioteca cliente de Node.js no admite cargas compuestas paralelas. En cambio, usa Cargas multiparte de la API de XML.
Python
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Python.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
La biblioteca cliente de Python no admite cargas compuestas paralelas. En su lugar, usa cargas multiparte de la API de XML.
API de REST
La API de JSON y la API de XML admiten que subas fragmentos de objetos en paralelo y los vuelvas a combinar en un solo objeto usando la operación compose
.
Ten en cuenta lo siguiente cuando diseñes 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 están destinados a ser temporales, debes borrarlos de forma explícita una vez que hayas completado con éxito la composición. Si no lo haces, los objetos de origen permanecerán en el bucket y se facturarán en consecuencia.
Para estar protegidos de los cambios a los objetos de origen entre las solicitudes de carga y de composición, debes proporcionar un número de generación esperado para cada origen.