¿Cuál es el punto de las familias de columnas?

9

He visto que los sistemas de bases de datos NoSQL como RocksDB ofrecen una característica llamada familias de columnas . Creo que entiendo a qué se refiere el concepto, pero ¿cuáles son los beneficios reales (prácticos) de usarlos? ¿Supongo que pueden mejorar el rendimiento de búsqueda en algunos casos, o la localidad espacial de entrantes de valor clave, como mínimo? Sin embargo, no parece afectar la semántica real del acceso a la base de datos, por lo que yo entiendo. ¿Es esto correcto? ¿Se me escapa algo?

Noldorin
fuente

Respuestas:

3

Acabo de descubrir información interesante de las preguntas frecuentes de RocksDB . (RocksDB es una tienda KV).

Aquí hay algunos extractos relevantes.

P: ¿Para qué se usan las familias de columnas?

R: Las razones más comunes para usar familias de columnas: (1) usar diferentes configuraciones de compactación, comparadores, tipos de compresión, operadores de fusión o filtros de compactación en diferentes partes de datos; (2) descartar una familia de columnas para eliminar sus datos; (3) una familia de columnas para almacenar metadatos y otra para almacenar los datos.

P: ¿Cuál es la diferencia entre almacenar datos en una familia de múltiples columnas y en una base de datos de múltiples rocas?

R: Las principales diferencias serán la copia de seguridad, las escrituras atómicas y el rendimiento de las escrituras. La ventaja de usar múltiples bases de datos: la base de datos es la unidad de respaldo o punto de control. Es más fácil copiar una base de datos a otro host que una familia de columnas. Ventajas de usar familias de columnas múltiples: (1) los lotes de escritura son atómicos en familias de columnas múltiples en una base de datos. No puede lograr esto usando múltiples bases de datos RocksDB. (2) Si emite escrituras de sincronización a WAL, demasiadas bases de datos pueden dañar el rendimiento.

P: Tengo diferentes espacios clave. ¿Debo separarlos por prefijos o usar diferentes familias de columnas?

R: Si cada espacio clave es razonablemente grande, es una buena idea colocarlos en diferentes familias de columnas. Si puede ser pequeño, entonces debería considerar empaquetar múltiples espacios clave en una familia de columnas, para evitar la molestia de mantener demasiadas familias de columnas.

Noldorin
fuente
2

Sé que no está buscando un paralelo con SQL, pero este artículo explica el plan simplemente el propósito y el beneficio práctico de Column Families.

Desde la comprensión del modelo de datos de Cassandra desde una perspectiva SQL en RubyScale:

¿Para qué es una familia de columnas? ¿Solo un prefijo de mesa? Una familia de columnas tiene una serie de configuraciones que modifican su comportamiento. Hay configuraciones de caché para las claves (los UUID en este ejemplo), configuraciones de caché para las filas completas (la tabla completa en este ejemplo) y, lo más importante, la clasificación. En Cassandra no hay OFFSET, solo LIMIT y el equivalente de ENTRE . En este ejemplo, los nombres de columna son solo cadenas, pero también pueden ser enteros o marcas de tiempo y siempre se almacenan en orden de clasificación. Una familia de columnas puede tener datos ordenados por marca de tiempo donde se consultan las cosas por segmento de tiempo y otra puede ser datos de la libreta de direcciones donde se consultan las cosas en orden alfabético. La única clasificación que puede hacer después del hecho es invertir un segmento en particular.

Nelz
fuente
Interesante. Como usted dice, no responde completamente la pregunta, pero proporciona una pista. Gracias.
Noldorin