Cassandra Modelo de datos con ejemplo de base de datos simple

โšก Resumen inteligente

Cassandra Las reglas del modelo de datos invierten los hรกbitos del diseรฑo relacional: las tablas se construyen para consultas en lugar de para entidades. Esta pรกgina abarca las reglas bรกsicas, la selecciรณn de claves de particiรณn y los esquemas de trabajo para relaciones uno a uno, uno a muchos y muchos a muchos.

  • โœ๏ธ Los escritores son baratos: Cassandra Estรก optimizado para el rendimiento de escritura, por lo que duplicar datos en diferentes tablas es la forma aceptada de acelerar las lecturas.
  • ๐Ÿ“‹ Consulta primero: Enumera las consultas que la aplicaciรณn debe responder y, a continuaciรณn, crea una tabla por cada consulta en lugar de una tabla por cada entidad.
  • ๐Ÿ”‘ Clave de particiรณn: El primer elemento de la clave primaria decide quรฉ nodo almacena la fila y, por lo tanto, con quรฉ uniformidad se distribuyen los datos.
  • ๐Ÿงฉ ClusterColumnas: Los elementos restantes de la clave primaria ordenan las filas dentro de una particiรณn y permiten realizar consultas de rango.
  • ๐Ÿ“ Tamaรฑo de la particiรณn: Un nรบmero insuficiente de particiones crea puntos crรญticos y filas de gran tamaรฑo; un nรบmero excesivo obliga a una lectura a visitar muchos nodos.
  • ๐Ÿ”— Relaciones: La relaciรณn uno a uno requiere una sola tabla, la relaciรณn uno a muchos requiere una clave compuesta y la relaciรณn muchos a muchos requiere una tabla por cada direcciรณn de consulta.

Cassandra Ejemplo de modelo de datos

Aunque Cassandra El lenguaje de consulta se asemeja 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. Por lo tanto, intente maximizar sus escrituras para obtener un mejor rendimiento de lectura y disponibilidad de datos. Existe una compensaciรณn entre la escritura y la lectura de datos. Asรญ que optimice su rendimiento de lectura de datos maximizando el nรบmero de escrituras.

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 los distintos nodos segรบn las claves de particiรณn, que constituyen la primera parte de la clave primaria. Por lo tanto, conviene elegir una columna de alta cardinalidad como clave de particiรณn para distribuir los datos de manera uniforme en 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.

Esto no significa que no se deban crear particiones. Si sus datos son muy grandes, no puede almacenar esa enorme 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 en Cassandra

Ambos objetivos se reducen a una sola decisiรณn, por lo que los dos esquemas que aparecen a continuaciรณn muestran la misma tabla con una clave deficiente y, posteriormente, con una clave correcta.

Veamos un ejemplo y descubramos quรฉ clave primaria es la mรกs adecuada.

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 segรบn el nombre de la canciรณn. Solo se crearรก una particiรณn por cada SongId, y dado que cada canciรณn tiene un identificador รบnico, cada particiรณn contendrรก una sola fila.

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.

Las tres secciones que siguen aplican ese principio a los tres tipos de relaciones que se encuentran en casi todos los esquemas.

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

El diagrama anterior muestra una รบnica tabla que atiende la consulta, ya que cada estudiante estรก asociado a un รบnico curso.

CREATE TABLE Student_Course (
    Student_rollno int PRIMARY KEY,
    Student_name text,
    Course_name text
);

Dado que Student_rollno es la clave de particiรณn, una bรบsqueda por nรบmero de matrรญcula lee exactamente una particiรณn.

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

En este caso, el nombre del curso se convierte en la clave de particiรณn, de modo que cada estudiante de un curso se ubica en la misma particiรณn, y el nรบmero de matrรญcula se convierte en la columna de agrupaciรณn, de modo que cada estudiante permanece en una fila distinta.

CREATE TABLE Student_Course (
    Course_name text,
    Student_rollno int,
    Student_name text,
    PRIMARY KEY (Course_name, Student_rollno)
);

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.

En este caso, tendrรฉ dos tablas, es decir, dividirรฉ el problema en dos casos. Esta es la ilustraciรณn mรกs clara de la regla de duplicaciรณn: los mismos datos se escriben dos veces para que cada consulta lea una particiรณn.

Primero, crearรฉ una tabla mediante la cual podrรก encontrar cursos de un estudiante en particular.

CREATE TABLE Student_Course (
    Student_rollno int,
    Course_name text,
    Student_name text,
    PRIMARY KEY (Student_rollno, Course_name)
);

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

SELECT * FROM Student_Course WHERE Student_rollno = 101;

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,
    Student_rollno int,
    Student_name text,
    PRIMARY KEY (Course_name, Student_rollno)
);

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

SELECT * FROM Course_Student WHERE Course_name = 'Cassandra';

Ambas tablas deben actualizarse cada vez que un estudiante se inscribe en un curso, normalmente dentro de un รบnico lote registrado para que las dos copias se mantengan sincronizadas.

Preguntas frecuentes sobre bancarrota Cassandra Errores en el modelado de datos

La mayorรญa de los esquemas deficientes repiten el mismo puรฑado de errores, y cada uno traces volver a un hรกbito heredado del diseรฑo relacional.

  • Particiones ilimitadas: Al elegir una clave de particiรณn, como el nombre de un paรญs, se agrupan millones de filas en una sola particiรณn. Aรฑada un intervalo de tiempo, por ejemplo (paรญs, mes), para mantener las particiones dentro de un tamaรฑo razonable.
  • Claves de cardinalidad muy baja: Una clave de particiรณn con solo unos pocos valores posibles, como un indicador de estado, concentra todo el trรกfico en unos pocos nodos y deja el resto inactivo.
  • Utilizar ALLOW FILTERING para que una consulta funcione: Analiza cada particiรณn y oculta un problema de modelado. Si una consulta lo requiere, el esquema necesita otra tabla.
  • Modelado de entidades en lugar de consultas: Crear una tabla de estudiantes y una tabla de cursos, para luego intentar combinarlas en la aplicaciรณn, contradice el propรณsito del diseรฑo.
  • Eliminaciones y sobrescrituras frecuentes: Cada eliminaciรณn escribe una marca de eliminaciรณn que debe leerse y omitirse hasta que la compactaciรณn la elimine, lo que ralentiza las lecturas en particiones de uso frecuente.

Evitar estos elementos mantiene el esquema alineado con las reglas indicadas en la parte superior de esta pรกgina y con los contrastes relacionales resumidos a continuaciรณn.

Diferencia entre RDBMS y Cassandra Modelado de datos

RDBMS Cassandra
Almacena datos en forma normalizada. Almacena datos en forma desnormalizada.
DBM heredados; datos estructurados Almacenamiento de filas anchas, dinรกmico; datos estructurados y no estructurados
El esquema estรก diseรฑado en torno a las entidades y sus relaciones. El esquema estรก diseรฑado en funciรณn de las consultas que ejecutarรก la aplicaciรณn.
Se admiten las clรกusulas JOIN, GROUP BY y WHERE arbitrarias. No se permiten uniones ni filtrado arbitrario; las consultas deben coincidir con la clave primaria.
Una tabla suele servir para muchas consultas diferentes. Normalmente, una tabla sirve para una sola consulta, por lo que los datos se duplican en varias tablas.
Integridad referencial garantizada por claves forรกneas No se permiten claves forรกneas; la coherencia entre tablas duplicadas es responsabilidad de la aplicaciรณn.

Estas decisiones de esquema se aplican en la prรกctica en el Cassandra mesa y espacio de teclas Tutoriales.

Preguntas Frecuentes

Procure que cada particiรณn tenga menos de 100 MB y aproximadamente 100 000 filas. Las particiones mรกs grandes ralentizan la lectura, aumentan el tiempo de reparaciรณn y elevan la presiรณn sobre la memoria durante la compactaciรณn.

La clave de particiรณn decide quรฉ nodo almacena la fila. ClusterLas columnas determinan el orden de clasificaciรณn de las filas dentro de esa particiรณn y permiten consultas de rango, como un intervalo de fechas.

Las vistas materializadas automatizan la duplicaciรณn, pero siguen siendo una caracterรญstica experimental con casos lรญmite de consistencia conocidos. La mayorรญa de los esquemas de producciรณn aรบn conservan la segunda tabla de la aplicaciรณn.

La IA puede traducir entidades en tablas candidatas, pero una Cassandra El esquema sigue las consultas en lugar de las entidades. Primero, proporcione la lista de consultas y, a continuaciรณn, trate las tablas generadas como borradores para validarlas segรบn el tamaรฑo de la particiรณn.

Dada la cardinalidad de las columnas y el nรบmero de filas previsto, la IA puede identificar las claves que probablemente generen puntos crรญticos o particiones sin lรญmite. Confirme la advertencia con `nodetool tablehistograms` una vez que se hayan cargado los datos reales.

Resumir este post con: