Cassandra Modelo de datos con ejemplo de base de datos simple

Aunque Cassandra El lenguaje de consulta se parece a SQL lenguaje, sus métodos de modelado de datos son totalmente diferentes.

In Cassandra, un modelo de datos incorrecto puede degradar el rendimiento, especialmente cuando los usuarios intentan implementar los conceptos de RDBMS en Cassandra. Lo mejor es tener en cuenta algunas reglas que se detallan a continuación.

Cassandra Reglas del modelo de datos

In Cassandra, las escrituras no son caras. Cassandra no admite uniones, grupos por, cláusulas OR, agregaciones, etc. Por lo tanto, debe almacenar sus datos de tal manera que sean completamente recuperables. Por lo tanto, estas reglas deben tenerse en cuenta al modelar datos en Cassandra.

Maximizar el número de escrituras

In Cassandra, las escrituras son muy baratas. Cassandra está optimizado para un alto rendimiento de escritura. Intente maximizar sus escrituras para obtener un mejor rendimiento de lectura y disponibilidad de datos. Existe una compensación entre la escritura de datos y la lectura de datos. Por lo tanto, optimice el rendimiento de lectura de datos maximizando la cantidad de escrituras de datos.

Maximice la duplicación de datos

La desnormalización y duplicación de datos son de facto Cassandra. El espacio en disco no es más caro que la memoria, el procesamiento de la CPU y la operación de IO. Como Cassandra Es una base de datos distribuida, por lo que la duplicación de datos proporciona disponibilidad instantánea de datos y ningún punto único de falla.

Cassandra Objetivos del modelado de datos

Debes tener los siguientes objetivos al modelar datos en Cassandra:

Distribuya los datos de manera uniforme en todo el Cluster

Quiere una cantidad igual de datos en cada nodo de Cassandra ClusterLos datos se distribuyen entre distintos nodos según las claves de partición, que son la primera parte de la clave principal. Por lo tanto, intente elegir números enteros como clave principal para distribuir los datos de manera uniforme en todo el clúster.

Minimizar el número de particiones leídas al consultar datos

La partición es un grupo de registros con la misma clave de partición. Cuando se emite la consulta de lectura, recopila datos de diferentes nodos de diferentes particiones.

Si habrá muchas particiones, entonces es necesario visitar todas ellas para recopilar los datos de la consulta.

No significa que no se deban crear particiones. Si sus datos son muy grandes, no puede mantener esa enorme cantidad de datos en una única partición. La partición única se ralentizará.

Intente elegir un número equilibrado de particiones.

Buena clave primaria en Cassandra

Tomemos un ejemplo y encontremos qué clave principal es buena.

Aquí está la tabla MusicPlaylist.

Create table MusicPlaylist
    (
        SongId int,
        SongName text,
        Year int,
        Singer text,
        Primary key(SongId, SongName)
    );

En el ejemplo anterior, tabla MusicPlaylist,

  • Songid es la clave de partición y
  • SongName es la columna de agrupamiento
  • Los datos se agruparán en función del nombre de la canción. Solo se creará una partición con el ID de la canción. No habrá ninguna otra partición en la tabla MusicPlaylist.

La recuperación de datos será lenta con este modelo de datos debido a una clave primaria incorrecta.

Aquí hay otra tabla MusicPlaylist.

Create table MusicPlaylist
    (
        SongId int,
        SongName text,
        Year int,
        Singer text,
        Primary key((SongId, Year), SongName)
    );

En el ejemplo anterior, tabla MusicPlaylist,

  • Songid y Year son la clave de partición, y
  • SongName es la columna de agrupamiento.
  • Los datos se agruparán en función del nombre de la canción. En esta tabla, cada año, se creará una nueva partición. Todas las canciones del año estarán en el mismo nodo. Esta clave principal será muy útil para los datos.

Nuestra recuperación de datos será rápida con este modelo de datos.

Modele sus datos en Cassandra

A la hora de modelar tus consultas debes tener en cuenta lo siguiente:

Determine qué consultas desea respaldar

En primer lugar, determine qué consultas desea.

Por ejemplo, ¿lo necesitas?

  • Une
  • Agrupar por
  • Filtrar en qué columna, etc.

Crea una tabla según tus consultas.

Crea una tabla según tus consultas. Cree una tabla que satisfaga sus consultas. Intente crear una tabla de tal manera que sea necesario leer un número mínimo de particiones.

Manejo de relaciones uno a uno en Cassandra

La relación uno a uno significa que dos tablas tienen correspondencia uno a uno. Por ejemplo, el estudiante puede registrarse solo en un curso y quiero buscar en un estudiante en qué curso está registrado un estudiante en particular.

Entonces, en este caso, el esquema de su tabla debe abarcar todos los detalles del estudiante correspondiente a ese curso en particular, como el nombre del curso, el número de registro del estudiante, el nombre del estudiante, etc.

Relación uno a uno en Cassandra
Relación uno a uno en Cassandra

Create table Student_Course
    (
        Student rollno int primary key,
        Student_name text,
        Course_name text,
    );

Manejo de relaciones de uno a muchos en Cassandra

Relaciones de uno a muchos significa tener correspondencia de uno a muchos entre dos tablas.

Por ejemplo, muchos estudiantes pueden estudiar un curso. Quiero buscar a todos los estudiantes que están estudiando un curso en particular.

Entonces, al consultar el nombre del curso, tendré muchos nombres de estudiantes que estudiarán un curso en particular.

Relación de uno a muchos en Cassandra
Relación de uno a muchos en Cassandra

Create table Student_Course
    (
        Student_rollno int,
        Student_name text,
        Course_name text,
    );

Puedo recuperar todos los estudiantes de un curso en particular mediante la siguiente consulta.

Select * from Student_Course where Course_name='Course Name';

Manejo de relaciones de muchos a muchos en Cassandra

Relaciones de muchos a muchos significa tener correspondencia de muchos a muchos entre dos tablas.

Por ejemplo, muchos estudiantes pueden estudiar un curso y un estudiante también puede estudiar muchos cursos.

Relación de muchos a muchos en Cassandra
Relación de muchos a muchos en Cassandra

Quiero buscar a todos los estudiantes que están estudiando un curso en particular. Además, quiero buscar todo el curso que está estudiando un estudiante en particular.

Entonces, en este caso, tendré dos tablas, es decir, dividiré el problema en dos casos.

Primero, crearé una tabla mediante la cual podrá encontrar cursos de un estudiante en particular.

Create table Student_Course
    (
        Student_rollno int primary key,
        Student_name text,
        Course_name text,
    );

Puedo encontrar todos los cursos de un estudiante en particular mediante la siguiente consulta.

Select * from Student_Course where student_rollno=rollno;

En segundo lugar, crearé una tabla mediante la cual podrás encontrar cuántos estudiantes están estudiando un curso en particular.

Create table Course_Student
    (
        Course_name text primary key,
        Student_name text,
        student_rollno int
    );

Puedo encontrar un estudiante en un curso particular mediante la siguiente consulta.

Select * from Course_Student where Course_name=CourseName;

Diferencia entre RDBMS y Cassandra Modelado de datos

RDBMS Cassandra
Almacena datos en forma normalizada. Almacena datos en forma desnormalizada.
DBM heredados; datos estructurados Tienda de fila amplia, dinámica; datos estructurados y no estructurados

Resum

  • Modelado de datos en Cassandra es diferente a otros bases de datos RDBMS.
  • Cassandra El modelado de datos tiene algunas reglas. Estas reglas deben seguirse para un buen modelado de datos. Además de estas reglas, vimos tres casos diferentes de modelado de datos y cómo abordarlos.
  • La relación uno a uno significa que dos tablas tienen correspondencia uno a uno.
  • Relaciones de uno a muchos significa tener correspondencia de uno a muchos entre dos tablas.
  • Relaciones de muchos a muchos significa tener correspondencia de muchos a muchos entre dos tablas.