Las cadenas de texto constituyen aproximadamente el 50% de los datos almacenados en sistemas modernos, lo que obliga a las bases de datos a priorizar la eficiencia en su manejo, según un análisis reciente de Cedardb. Esta ubicuidad se debe a la flexibilidad de las cadenas, aunque a menudo se utilicen para almacenar datos que tendrían representaciones más eficientes, como valores enumerados o identificadores únicos universales (UUIDs).
Snowflake, en sus análisis de cargas de trabajo analíticas, confirmó que las columnas de texto no solo son las más comunes, sino también las más utilizadas en operaciones de filtrado. Esto establece un doble imperativo: almacenar eficientemente para reducir costes operativos y asegurar que la recuperación de datos sea rápida, satisfaciendo las expectativas de los usuarios finales.
La compresión en sistemas de bases de datos se enfoca primariamente en mejorar el rendimiento de las consultas, no solo en la reducción del tamaño físico, como señaló el profesor Thomas Neumann. Al disminuir la huella de memoria de los datos, estos pueden residir en las cachés de la CPU en lugar de solo en la RAM, logrando reducciones de tiempo de acceso superiores a diez veces.
Cedardb históricamente ha empleado esquemas como no comprimido y compresión por diccionario para columnas de texto. La compresión por diccionario sustituye los valores únicos por claves enteras de tamaño fijo que actúan como desplazamientos dentro de un índice. Este índice se ordena lexicográficamente para facilitar búsquedas eficientes.
Para permitir el acceso aleatorio rápido, Cedardb almacena los desplazamientos directos a las cadenas dentro del diccionario, evitando el escaneo secuencial. Además, el ordenamiento lexicográfico del diccionario permite que el orden de las claves comprimidas refleje el orden de las cadenas originales, una propiedad útil para la evaluación de consultas.
La evaluación de filtros se realiza directamente sobre la representación comprimida siempre que sea posible, minimizando la descompresión, que consume ciclos de CPU. Por ejemplo, una búsqueda de igualdad puede resolverse mediante una búsqueda binaria en el diccionario ordenado para encontrar la clave correspondiente, seguida de comparaciones eficientes basadas en enteros.
El uso de claves enteras pequeñas y fijas permite aprovechar instrucciones vectoriales modernas como SIMD para realizar múltiples comparaciones simultáneamente. Solo después de identificar las tuplas que satisfacen el predicado, se realiza la descompresión selectiva de los valores necesarios para la salida de la consulta.
Aunque la compresión por diccionario es potente, presenta limitaciones cuando el número de valores distintos es muy grande, ya que obliga a almacenar cada cadena única completamente. El siguiente paso en la optimización, según el análisis de Cedardb, implica explotar patrones comunes y la baja entropía inherente en muchos conjuntos de datos de cadenas para esquemas de compresión más avanzados.