Cassandra Modello di dati con esempio di database semplice

Sebbene il Cassandra il linguaggio di query assomiglia a SQL linguaggio, i loro metodi di modellazione dei dati sono totalmente diversi.

In Cassandra, un modello dati errato puรฒ ridurre le prestazioni, soprattutto quando gli utenti tentano di implementare i concetti RDBMS su Cassandra. รˆ meglio tenere a mente alcune regole dettagliate di seguito.

Cassandra Regole del modello di dati

In Cassandra, le scritture non sono costose. Cassandra non supporta join, raggruppamenti per, clausole OR, aggregazioni, ecc. Quindi devi archiviare i tuoi dati in modo tale che siano completamente recuperabili. Pertanto รจ necessario tenere presenti queste regole durante la modellazione dei dati Cassandra.

Massimizza il numero di scritture

In Cassandra, le scritture sono molto economiche. Cassandra รจ ottimizzato per prestazioni di scrittura elevate. Quindi prova a massimizzare le tue scritture per migliorare le prestazioni di lettura e la disponibilitร  dei dati. Esiste un compromesso tra scrittura e lettura dei dati. Pertanto, ottimizza le prestazioni di lettura dei dati massimizzando il numero di scritture di dati.

Massimizza la duplicazione dei dati

La denormalizzazione e la duplicazione dei dati sono di fatto Cassandra. Lo spazio su disco non รจ piรน costoso della memoria, dell'elaborazione della CPU e del funzionamento degli I/O. COME Cassandra รจ un database distribuito, quindi la duplicazione dei dati fornisce disponibilitร  immediata dei dati e nessun singolo punto di errore.

Cassandra Obiettivi della modellazione dei dati

Dovresti avere i seguenti obiettivi durante la modellazione dei dati in Cassandra:

Diffondere i dati in modo uniforme intorno al Cluster

Desideri una quantitร  uguale di dati su ciascun nodo di Cassandra Cluster. I dati vengono distribuiti su diversi nodi in base alle chiavi di partizione che rappresentano la prima parte della chiave primaria. Quindi, prova a scegliere i numeri interi come chiave primaria per distribuire i dati in modo uniforme nel cluster.

Ridurre al minimo il numero di partizioni lette durante l'esecuzione di query sui dati

La partizione รจ un gruppo di record con la stessa chiave di partizione. Quando viene emessa la query di lettura, raccoglie dati da diversi nodi da diverse partizioni.

Se saranno presenti molte partizioni, sarร  necessario visitarle tutte per raccogliere i dati della query.

Ciรฒ non significa che non si debbano creare partizioni. Se i tuoi dati sono molto grandi, non puoi conservare un'enorme quantitร  di dati su un'unica partizione. La singola partizione verrร  rallentata.

Quindi prova a scegliere un numero equilibrato di partizioni.

Buona chiave primaria Cassandra

Facciamo un esempio e scopriamo quale chiave primaria รจ buona.

Ecco la tabella MusicPlaylist.

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

Nell'esempio sopra, tabella MusicPlaylist,

  • Songid รจ la chiave di partizione e
  • SongName รจ la colonna di clustering
  • I dati verranno raggruppati in base a SongName. Verrร  creata solo una partizione con SongId. Non ci sarร  nessun'altra partizione nella tabella MusicPlaylist.

Il recupero dei dati sarร  lento da parte di questo modello dati a causa della chiave primaria errata.

Ecco un'altra tabella MusicPlaylist.

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

Nell'esempio sopra, tabella MusicPlaylist,

  • Songid e Year sono la chiave di partizione e
  • SongName รจ la colonna di clustering.
  • I dati verranno raggruppati in base a SongName. In questa tabella, ogni anno, verrร  creata una nuova partizione. Tutte le canzoni dell'anno saranno sullo stesso nodo. Questa chiave primaria sarร  molto utile per i dati.

Il nostro recupero dei dati sarร  rapido grazie a questo modello di dati.

Modella i tuoi dati in Cassandra

Quando si modellano le query, รจ opportuno tenere a mente i seguenti aspetti:

Determina quali query vuoi supportare

Prima di tutto, determina quali query desideri.

Ad esempio, hai bisogno?

  • Entra a far parte
  • Raggruppa per
  • Filtraggio su quale colonna, ecc.

Crea una tabella in base alle tue domande

Crea una tabella in base alle tue domande. Crea una tabella che soddisfi le tue domande. Prova a creare una tabella in modo tale da dover leggere un numero minimo di partizioni.

Gestire la relazione uno a uno in Cassandra

La relazione uno a uno significa che due tabelle hanno una corrispondenza uno a uno. Ad esempio, lo studente puรฒ iscriversi a un solo corso e io voglio cercare su uno studente a quale corso รจ iscritto un determinato studente.

In questo caso, lo schema della tabella dovrebbe comprendere tutti i dettagli dello studente corrispondenti a quel particolare corso, come il nome del corso, il numero di matricola dello studente, il nome dello studente, ecc.

Rapporto uno a uno in Cassandra
Rapporto uno a uno in Cassandra

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

Gestire la relazione uno a molti in Cassandra

Relazioni uno a molti significa avere corrispondenza uno a molti tra due tabelle.

Ad esempio, un corso puรฒ essere seguito da molti studenti. Voglio cercare tutti gli studenti che stanno studiando un corso particolare.

Quindi, interrogando il nome del corso, avrรฒ molti nomi di studenti che studieranno un corso particolare.

Relazione uno a molti in Cassandra
Relazione uno a molti in Cassandra

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

Posso recuperare tutti gli studenti di un corso specifico tramite la seguente query.

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

Gestire la relazione molti a molti in Cassandra

Relazioni molti a molti significa avere una corrispondenza molti a molti tra due tabelle.

Ad esempio, un corso puรฒ essere studiato da molti studenti e uno studente puรฒ anche studiare molti corsi.

Relazione molti a molti in Cassandra
Relazione molti a molti in Cassandra

Voglio cercare tutti gli studenti che stanno studiando un corso particolare. Inoltre, voglio cercare tutto il corso che sta studiando un determinato studente.

Quindi in questo caso avrรฒ due tabelle, ovvero dividerรฒ il problema in due casi.

Per prima cosa creerรฒ una tabella in cui potrai trovare i corsi di un particolare studente.

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

Posso trovare tutti i corsi tenuti da uno studente specifico tramite la seguente query.

Select * from Student_Course where student_rollno=rollno;

In secondo luogo, creerรฒ una tabella in base alla quale potrai scoprire quanti studenti stanno studiando un particolare corso.

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

Posso trovare uno studente in un corso specifico tramite la seguente query.

Select * from Course_Student where Course_name=CourseName;

Differenza tra RDBMS e Cassandra Modellazione dei dati

RDBMS Cassandra
Memorizza i dati in forma normalizzata Memorizza i dati in forma denormalizzata
DBm legacy; dati strutturati Negozio ad ampia fila, dinamico; dati strutturati e non strutturati

Sintesi

  • Modellazione dei dati in Cassandra รจ diverso dagli altri Banche dati RDBMS.
  • Cassandra la modellazione dei dati ha alcune regole. Queste regole devono essere seguite per una buona modellazione dei dati. Oltre a queste regole, abbiamo visto tre diversi casi di modellazione dei dati e come gestirli.
  • La relazione uno a uno significa che due tabelle hanno una corrispondenza uno a uno.
  • Relazioni uno a molti significa avere corrispondenza uno a molti tra due tabelle.
  • Relazioni molti a molti significa avere una corrispondenza molti a molti tra due tabelle.

Riassumi questo post con: