Cassandra - Modelo de Dados

O modelo de dados do Cassandra é significativamente diferente do que normalmente vemos em um RDBMS. Este capítulo fornece uma visão geral de como o Cassandra armazena seus dados.

Grupo

O banco de dados Cassandra é distribuído em várias máquinas que operam juntas. O contêiner mais externo é conhecido como Cluster. Para tratamento de falhas, cada nó contém uma réplica e, em caso de falha, a réplica assume o controle. O Cassandra organiza os nós em um cluster, em formato de anel, e atribui dados a eles.

Keyspace

Keyspace é o contêiner mais externo para dados no Cassandra. Os atributos básicos de um Keyspace no Cassandra são -

  • Replication factor - É o número de máquinas do cluster que receberão cópias dos mesmos dados.

  • Replica placement strategy- Nada mais é do que a estratégia de colocar réplicas no ringue. Temos estratégias comosimple strategy (estratégia baseada em rack), old network topology strategy (estratégia de rack), e network topology strategy (estratégia compartilhada de datacenter).

  • Column families- Keyspace é um contêiner para uma lista de uma ou mais famílias de colunas. Uma família de colunas, por sua vez, é um contêiner de uma coleção de linhas. Cada linha contém colunas ordenadas. Famílias de colunas representam a estrutura de seus dados. Cada keyspace tem pelo menos uma e muitas vezes famílias de colunas.

A sintaxe de criação de um Keyspace é a seguinte -

CREATE KEYSPACE Keyspace name
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};

A ilustração a seguir mostra uma visão esquemática de um Keyspace.

Família de coluna

Uma família de colunas é um contêiner para uma coleção ordenada de linhas. Cada linha, por sua vez, é uma coleção ordenada de colunas. A tabela a seguir lista os pontos que diferenciam um grupo de colunas de uma tabela de bancos de dados relacionais.

Tabela Relacional Família da coluna Cassandra
Um esquema em um modelo relacional é corrigido. Uma vez que definimos certas colunas para uma tabela, ao inserir dados, em cada linha todas as colunas devem ser preenchidas pelo menos com um valor nulo. No Cassandra, embora as famílias de colunas sejam definidas, as colunas não são. Você pode adicionar livremente qualquer coluna a qualquer família de colunas a qualquer momento.
As tabelas relacionais definem apenas colunas e o usuário preenche a tabela com valores. No Cassandra, uma tabela contém colunas ou pode ser definida como uma família de supercolunas.

Uma família de colunas Cassandra tem os seguintes atributos -

  • keys_cached - Representa o número de locais a serem mantidos em cache por SSTable.

  • rows_cached - Representa o número de linhas cujo conteúdo inteiro será armazenado em cache na memória.

  • preload_row_cache - Especifica se você deseja preencher previamente o cache de linha.

Note − Ao contrário das tabelas relacionais em que o esquema de uma família de colunas não é fixo, o Cassandra não força as linhas individuais a ter todas as colunas.

A figura a seguir mostra um exemplo de uma família de colunas Cassandra.

Coluna

Uma coluna é a estrutura de dados básica do Cassandra com três valores, a saber, chave ou nome da coluna, valor e um registro de data e hora. A seguir está a estrutura de uma coluna.

SuperColumn

Uma supercoluna é uma coluna especial, portanto, também é um par de valores-chave. Mas uma supercoluna armazena um mapa de subcolunas.

Geralmente as famílias de colunas são armazenadas no disco em arquivos individuais. Portanto, para otimizar o desempenho, é importante manter as colunas que você provavelmente consultará juntas na mesma família de colunas, e uma supercoluna pode ser útil aqui. A estrutura de uma supercoluna é fornecida abaixo.

Modelos de dados de Cassandra e RDBMS

A tabela a seguir lista os pontos que diferenciam o modelo de dados do Cassandra daquele de um RDBMS.

RDBMS Cassandra
RDBMS lida com dados estruturados. Cassandra lida com dados não estruturados.
Ele tem um esquema fixo. Cassandra tem um esquema flexível.
No RDBMS, uma tabela é um array de arrays. (ROW x COLUMN) No Cassandra, uma tabela é uma lista de “pares de valores-chave aninhados”. (Tecla ROW x COLUMN x valor COLUMN)
O banco de dados é o contêiner externo que contém os dados correspondentes a um aplicativo. Keyspace é o contêiner mais externo que contém dados correspondentes a um aplicativo.
As tabelas são as entidades de um banco de dados. As tabelas ou famílias de colunas são a entidade de um keyspace.
A linha é um registro individual no RDBMS. Row é uma unidade de replicação em Cassandra.
A coluna representa os atributos de uma relação. A coluna é uma unidade de armazenamento em Cassandra.
RDBMS suporta os conceitos de chaves estrangeiras, junções. Os relacionamentos são representados por meio de coleções.