Aunque el lenguaje de consulta de Cassandra se parece al lenguaje SQL, sus métodos de modelado de datos son totalmente diferentes.
En Cassandra, un modelo de datos incorrecto puede degradar el rendimiento, especialmente cuando los usuarios intentan implementar los conceptos de RDBMS en Cassandra. Es mejor tener en cuenta algunas reglas que se detallan a continuación.
En este tutorial, aprenderá:
- Reglas del modelo de datos de Cassandra
- Modele sus datos en Cassandra
- Manejo de la relación uno a uno
- Manejo de relaciones de una a muchas
- Manejo de la relación de muchos a muchos
Reglas del modelo de datos de Cassandra
En Cassandra, las escrituras no son caras. Cassandra no admite uniones, agrupaciones, 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.
- Maximice el número de escrituras
En Cassandra, las escrituras son muy baratas. Cassandra está optimizado para un alto rendimiento de escritura. Intente maximizar sus escrituras para 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 el número de escrituras de datos.
- Maximice la duplicación de datos
La desnormalización y la duplicación de datos son de facto de Cassandra. El espacio en disco no es más caro que la memoria, el procesamiento de la CPU y el funcionamiento de las E / S. Como Cassandra es una base de datos distribuida, la duplicación de datos proporciona disponibilidad instantánea de datos y ningún punto único de falla.
Objetivos de modelado de datos
Debe tener los siguientes objetivos al modelar datos en Cassandra.
- Distribuya los datos de manera uniforme por todo el clúster
Desea una cantidad igual de datos en cada nodo del clúster de Cassandra. Los datos se distribuyen a diferentes nodos según las claves de partición que es 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.
- Minimice el número de particiones leídas mientras consulta datos
Las particiones son 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 todas estas particiones deben visitarse 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 gran cantidad de datos en una sola partición. La partición única se ralentizará.
Intente elegir un número equilibrado de particiones.
Buena clave primaria
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 agrupación
- Los datos se agruparán sobre la base de SongName. Solo se creará una partición con SongId. No habrá ninguna otra partición en la tabla MusicPlaylist.
La recuperación de datos será lenta con este modelo de datos debido a la 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 agrupación.
- Los datos se agruparán sobre la base de SongName. 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 primaria será muy útil para los datos.
Nuestra recuperación de datos será rápida con este modelo de datos.
Modele sus datos en Cassandra
Se deben tener en cuenta las siguientes cosas al modelar sus consultas.
- Determine qué consultas desea respaldar
- Uniones
- Agrupar por
- Filtrar en qué columna, etc.
- Crea tabla de acuerdo a tus consultas
Crea tabla de acuerdo a tus consultas. Crea una tabla que satisfaga tus consultas. Intente crear una tabla de tal manera que se necesite leer un número mínimo de particiones.
En primer lugar, determine qué consultas desea.
Por ejemplo, ¿lo necesita?
Manejo de la relación uno a uno
La relación uno a uno significa que dos tablas tienen una correspondencia uno a uno. Por ejemplo, el estudiante solo puede inscribirse en un curso y quiero buscar en un estudiante en qué curso está inscrito un estudiante en particular.
Entonces, en este caso, el esquema de su tabla debe abarcar todos los detalles del estudiante correspondientes a ese curso en particular, como el nombre del curso, el número de lista del estudiante, el nombre del estudiante, etc.
Create table Student_Course(Student rollno int primary key,Student_name text,Course_name text,);
Manejo de relaciones de una a muchas
Relaciones de uno a muchos significa tener una 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 estarán estudiando un curso en particular.
Create table Student_Course(Student_rollno int,Student_name text,Course_name text,);
Puedo recuperar a todos los estudiantes de un curso en particular mediante la siguiente consulta.
Select * from Student_Course where Course_name='Course Name';
Manejo de la relación de muchos a muchos
Relaciones de muchos a muchos significa tener correspondencia de muchos a muchos entre dos tablas.
Por ejemplo, un curso puede ser estudiado por muchos estudiantes y un estudiante también puede estudiar muchos cursos.
Quiero buscar a todos los estudiantes que están estudiando un curso en particular. Además, quiero buscar todos los cursos 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 puede 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 alumno en particular mediante la siguiente consulta. ->
Select * from Student_Course where student_rollno=rollno;
En segundo lugar, crearé una tabla mediante la cual puede 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 en particular mediante la siguiente consulta.
Select * from Course_Student where Course_name=CourseName;
Diferencia entre RDBMS y Cassandra Data Modeling
RDBMS |
Casandra |
Almacena datos en forma normalizada |
Almacena datos en forma desnormalizada |
Dbms heredados; datos estructurados |
Tienda de fila ancha, dinámica; datos estructurados y no estructurados |
Resumen
El modelado de datos en Cassandra es diferente a otras bases de datos RDBMS. El modelado de datos de Cassandra 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 tratarlos.