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. |