¿Es realmente una carpeta el "/" en S3? - La verdad sobre los espacios de nombres planos y cómo funcionan los prefijos

Partiendo del hecho de que S3 no tiene concepto de carpetas y el "/" en las claves de objeto es simplemente parte de la cadena, este artículo explica cómo funcionan las búsquedas por prefijo, el truco que usa la consola para mostrar carpetas y las mejores prácticas para el diseño de claves.

S3 no tiene carpetas

El modelo de datos de S3 es un espacio de nombres plano que consiste en solo dos niveles: buckets y objetos. No existe una estructura jerárquica de directorios. La clave de objeto "images/2024/photo.jpg" no significa que existan carpetas "images" y "2024"; es simplemente una cadena de texto que contiene caracteres "/". S3 trata toda la clave como un identificador único plano, sin interpretar el "/" como separador de directorios.

El truco que usa la consola para mostrar carpetas

La pantalla de S3 en la consola de administración de AWS muestra iconos de carpeta e incluso tiene un botón "Crear carpeta". Esto es una abstracción de la interfaz de usuario que simula una estructura de directorios usando el delimitador "/" en la API ListObjectsV2. Cuando "crea una carpeta" en la consola, en realidad se crea un objeto de 0 bytes con una clave que termina en "/" (por ejemplo, "images/"). Este objeto marcador no es necesario para que funcione la navegación por prefijos; la consola puede mostrar "carpetas" basándose únicamente en los prefijos comunes de los objetos existentes. Para profundizar en el diseño de S3, los libros relacionados (Amazon) son una buena referencia.

La relación entre prefijos y rendimiento

Los prefijos de S3 afectan directamente al rendimiento. En 2018, S3 experimentó una mejora importante de rendimiento, permitiendo al menos 3.500 solicitudes PUT/COPY/POST/DELETE y 5.500 solicitudes GET/HEAD por segundo por prefijo. Esto significa que distribuir objetos entre múltiples prefijos permite escalar el rendimiento de forma prácticamente ilimitada. Para cargas de trabajo de alto rendimiento, diseñar claves con prefijos distribuidos (por ejemplo, usando hash o fecha) maximiza el paralelismo.

Mejores prácticas para el diseño de claves de objeto

El diseño de claves de objeto impacta significativamente en la eficiencia operativa de S3. Primero, establezca una convención de nomenclatura consistente que refleje la organización lógica de los datos. Use prefijos que faciliten las políticas de ciclo de vida (por ejemplo, "raw/", "processed/", "archive/"). Evite caracteres especiales que requieran codificación URL. Para datos con partición temporal, use el formato "año/mes/día/" para facilitar las consultas con Athena y las reglas de ciclo de vida.

S3 Select y aprovechamiento del espacio de nombres plano

El espacio de nombres plano de S3 puede resultar poco familiar para desarrolladores acostumbrados a conceptos tradicionales de sistemas de archivos, pero ofrece ventajas únicas. S3 Select permite ejecutar consultas SQL directamente sobre objetos individuales sin descargarlos completamente, extrayendo solo los datos necesarios. Combinado con el espacio de nombres plano y los prefijos, se pueden construir patrones de acceso a datos eficientes sin la sobrecarga de una estructura de directorios jerárquica.