Qual é a diferença entre o Cassandra e o MongoDB?

O Apache Cassandra e o MongoDB são dois bancos de dados NoSQL que armazenam dados em formato não tabular. O Cassandra é um dos primeiros bancos de dados NoSQL com um design híbrido entre um armazenamento tabular e um armazenamento de chaves-valores. Ele foi projetado para armazenar dados para aplicações que exigem performance rápida de leitura e gravação. Em contraste, o MongoDB é um banco de dados de documentos criado para uso geral. Ele tem um modelo de dados flexível que permite armazenar dados não estruturados em um formato JSON otimizado, chamado de JSON binário, ou BSON. O banco de dados MongoDB fornece suporte completo de indexação e replicação com APIs avançadas e intuitivas.

Leia sobre o Apache Cassandra »

Leia sobre o MongoDB »

Quais são as semelhanças entre o Cassandra e o MongoDB?

O Apache Cassandra e o MongoDB pertencem ao grupo de banco de dados NoSQL. Bancos de dados NoSQL podem armazenar dados estruturados, não estruturados e semiestruturados sem um esquema de banco de dados.

O armazenamento de dados em bancos de dados NoSQL não é limitado pelo formato tabular e pelos relacionamentos entre tabelas, ao contrário de um sistema tradicional de gerenciamento de banco de dados relacional. Você pode particionar e replicar dados livremente entre vários nós para escalar com eficiência. 

Além disso, o Cassandra e as primeiras versões do MongoDB são de código aberto. Isso significa que você pode baixar o código-fonte desses bancos de dados NoSQL e configurá-los como quiser.

O Facebook desenvolveu o Cassandra e depois o lançou como um projeto de código aberto com o Apache. O MongoDB foi desenvolvido por um pequeno grupo de desenvolvedores da MongoDB, Inc. Todas as versões do MongoDB lançadas antes de 16 de outubro de 2018 estão disponíveis sob a Licença pública geral Affero GNU.

Leia sobre o NoSQL »

Leia sobre código aberto »

Diferenças dos modelos de dados: Cassandra vs. MongoDB

Embora o MongoDB e o Apache Cassandra sejam bancos de dados NoSQL, eles armazenam e gerenciam dados de maneiras diferentes.

Cassandra

O Cassandra armazena dados como repositórios de chave-valor. Ele permite que você defina tabelas com linhas e colunas, mas a estrutura tabular não é usada no armazenamento propriamente dito. Em vez disso, ele usa o modelo de banco de dados orientado por colunas amplas, para que cada linha na tabela possa ter um conjunto diferente de colunas.

Você pode agrupar colunas em famílias de colunas com base no tipo de dados ou no uso. Cada linha tem uma chave primária que você pode usar para ler rapidamente os dados do Cassandra.

A estrutura de tabelas do Apache Cassandra pode ser visualizada no exemplo a seguir.

ID do cliente 1

Coluna - Nome

Coluna - País

 
 

Valor - John Doe

Valor - Estados Unidos

 
ID do cliente 2

Coluna - Nome 

Coluna - Idade

Coluna - E-mail

 

Valor - Jane Doe

Valor - 35

Valor - jane_doe@example.com

MongoDB

Em contraste, o MongoDB armazena dados sem um esquema, usando um formato JSON binário (BSON) otimizado. Ele é capaz de armazenar vários tipos de dados em um único documento, semelhante a objetos JSON, e depois serializá-los com BSON.

O MongoDB organiza documentos em coleções que podem conter dados com estruturas diferentes. Seu modelo de dados é flexível e pode lidar com grandes volumes de dados não estruturados.

Veja a seguir um exemplo dos dados do cliente no MongoDB.

customers:[

{

  customer_id: "1",

  name: “John Doe”,

  country: "United States"

},

{

  customer_id: "2",

  age: “35”

  email: "jane_doe@example.com"

}]

Diferenças de arquitetura: Cassandra vs. MongoDB

Devido às diferenças em seus modelos de dados, o Cassandra e o MongoDB implementam vários recursos de banco de dados de maneiras diferentes.

Unidade básica de armazenamento

No Cassandra, tabelas de string ordenadas (SStables) são a unidade básica de armazenamento usada para manter dados no disco. Uma SStable é um arquivo que contém um conjunto ordenado de pares de chave-valor para uma determinada família de colunas (tabela) e partições. SStables são imutáveis, o que significa que, uma vez gravadas, não podem ser modificadas. 

No MongoDB, a unidade básica de armazenamento é um documento. Um documento é um conjunto de pares de chave-valor em que as chaves são strings e os valores podem ser de vários tipos. Por exemplo, os valores podem ser outros documentos, matrizes, strings, números, datas e valores booleanos. Os documentos são armazenados em coleções.

Linguagem de consulta

Uma linguagem de consulta são as instruções que você usa para inserir e recuperar dados do banco de dados.

O Cassandra Query Language (CQL) é a linguagem de consulta que você usa no Cassandra. Embora tenha uma sintaxe e estrutura semelhantes às do SQL, o Apache desenvolveu o CQL para funcionar com o modelo de dados de família de colunas.

Por outro lado, o MongoDB usa o MongoDB Query Language (MQL), que tem comandos semelhantes aos do Node.js. O MQL oferece suporte a operações de criação, leitura, atualização e exclusão (CRUD). Você pode escrever comandos MQL no Shell do MongoDB.

Indexação

Indexação é uma técnica usada em bancos de dados para melhorar a velocidade e a eficiência das operações de recuperação de dados. Ela envolve a criação de uma estrutura de dados que mapeia os valores de uma ou mais colunas em uma tabela de banco de dados para a localização física dos dados correspondentes no disco.

O Cassandra oferece suporte a dois tipos de índices:

  • Índices secundários em colunas individuais
  • Índices secundários anexados a SSTables (SASI) em várias colunas

Os índices SASI armazenam dados de índice diretamente nas SStables. Eles oferecem suporte a consultas complexas, como intervalo, prefixo e pesquisa de texto completo em colunas com um grande número de valores exclusivos.

Em contraste, o MongoDB oferece suporte para indexação no nível da coleção e no nível do campo. Ele fornece vários tipos de índices, como campo único, composto e chave múltipla. Também oferece estes índices:

  • índice geoespacial especializado para dados distribuídos geograficamente
  • um índice de pesquisa de texto para grandes volumes de dados de texto
  • índices em hash e agrupados para dados numéricos

Simultaneidade

Em bancos de dados, a simultaneidade se refere a quando vários usuários ou processos podem acessar e realizar transações de banco de dados simultaneamente sem interferir uns com os outros. 

O Cassandra alcança simultaneidade por meio de consistência giratória e atomicidade em nível de linha. Somente um usuário pode operar em uma única linha por vez.

Na consistência giratória, cada nó de réplica mantém um relógio vetorial, que é uma estrutura de dados que rastreia o histórico de versões dos dados associados. Quando uma operação de gravação é realizada, o relógio vetorial é atualizado para refletir a nova versão. Quando uma operação de leitura é executada, o Cassandra retorna a versão com o carimbo de data/hora mais alto em todas as réplicas, o que garante que a versão mais recente dos dados seja sempre retornada.

Em contraste, o MongoDB oferece suporte a mecanismos para controle de simultaneidade de várias versões (MVCC). O MVCC permite que várias versões do mesmo documento de dados existam simultaneamente. Cada documento tem um ID de revisão exclusivo, que é incrementado em cada atualização. O bloqueio em nível de documento e o MVCC fornecem uma estratégia de simultaneidade mais robusta.

Disponibilidade

Disponibilidade significa que você garante que não haja tempo de inatividade dos dados, mesmo durante a paralisação do servidor. Tanto o Cassandra quanto o MongoDB garantem a disponibilidade replicando dados em vários nós de servidor.

No Apache Cassandra, cada nó no cluster contém réplicas de dados para outros nós. Cada coordenada do nó é lida no nó correto para gravar ou extrair dados. Simultaneamente, ele também repara dados que ficaram fora de consistência entre os nós. Isso pode afetar a performance em grande escala.

Em contraste, o MongoDB usa replicação de nó primário único para oferecer alta disponibilidade de dados. O MongoDB replica dados em conjuntos de réplicas. Somente um nó primário recebe as gravações, e os outros nós simplesmente replicam os dados do nó primário. No entanto, o nó primário cria um único ponto de falha.

Escalabilidade

Tanto o Cassandra quanto o MongoDB permitem fragmentação: uma técnica para particionar dados horizontalmente em vários nós em um cluster. Por exemplo, se você tem milhares de clientes, particiona os dados de forma que cada nó tenha apenas as informações de algumas centenas de clientes. Dessa forma, é possível escalar seu banco de dados sem causar gargalos.

O Cassandra usa um algoritmo de hash distribuído chamado hashing consistente para determinar qual nó é responsável por um determinado valor de dados. O Cassandra também oferece suporte a nós virtuais (vnodes), que permitem que um único nó físico tenha vários intervalos de dados.

Em contraste, o MongoDB usa chaves de fragmentação para identificar onde o valor dos dados pode ir. Administradores de bancos de dados podem definir chaves de fragmentação para particionar os dados. Você pode dividir os dados com base em fatores como localização geográfica, ordem alfabética ou qualquer outro sistema que seja mais eficiente para o seu conjunto de dados.

Quando usar o Cassandra vs. MongoDB

O alto tempo de atividade e a arquitetura distribuída do Cassandra o tornam uma boa opção para requisitos de alta disponibilidade. A capacidade do MongoDB de lidar com dados não estruturados com uma abordagem orientada a documentos o torna útil para sistemas em que os dados sofrem mudanças constantes. 

Aqui estão alguns fatores a serem considerados ao escolher entre os dois.

Formato dos dados

O Apache Cassandra tem um sistema de armazenamento de dados mais estruturado do que o MongoDB. Quando os dados com os quais você está trabalhando estão em um formato fixo, o Cassandra é mais adequado.

Quando os dados são mais dinâmicos e não têm uma estrutura consistente, o MongoDB funciona melhor.

Disponibilidade 

O MongoDB tem um nó primário e depois uma série de réplicas. Se o nó primário cair, o MongoDB gasta alguns minutos escolhendo um nó de réplica para substituir. Isso pode causar uma pequena quantidade de tempo de inatividade.

O Cassandra usa um sistema de nós distribuídos com muitos nós principais, o que permite 100% de disponibilidade de tempo de atividade. 

Escalabilidade

O MongoDB oferece mais controle à medida que você escala. Você pode decidir como particionar dados entre nós com base nos seus requisitos e gerenciar bancos de dados distribuídos massivamente em grande escala.

A performance do Cassandra pode cair um pouco em grande escala, dependendo dos valores dos dados.

Linguagem de consulta

Tanto o Cassandra Query Language (CQL) quanto o MongoDB Query Language (MQL) são linguagens de consulta altamente eficientes. No entanto, o CQL é muito mais semelhante ao SQL, o que permite que você o use facilmente caso já seja proficiente em SQL.

O MQL tem implementações e sintaxe diferentes e pode ter uma curva de aprendizado mais acentuada.

Suporte para linguagens de programação

O MongoDB oferece suporte a doze linguagens de programação: C, C++, C#, Go, Java, Node.js, PHP, Python, Ruby, Rust, Scala e Swift.

O Cassandra oferece suporte a menos linguagens, como Java, JavaScript, Perl, Ruby, Scala, C#, Erlang, PHP, Python etc.

Resumo das diferenças: Cassandra vs. MongoDB

 

Apache Cassandra

MongoDB

Modelo de dados

O Cassandra usa um modelo de dados de colunas largas mais relacionado a bancos de dados relacionais. 

O MongoDB se afasta completamente do modelo relacional ao armazenar dados como documentos.

Unidade básica de armazenamento

Tabelas de strings ordenadas.

Documentos JSON serializados.

Indexação

O Cassandra oferece suporte a índices secundários e SASI para indexar por coluna ou colunas.

O MongoDB indexa em nível de coleção e de campo e oferece várias opções de indexação.

Linguagem de consulta

O Cassandra usa CQL.

O MongoDB usa MQL.

Simultaneidade

O Cassandra alcança simultaneidade com atomicidade em nível de linha e consistência giratória. 

O MongoDB usa o MVCC e o bloqueio em nível de documento para garantir a simultaneidade. 

Disponibilidade

O Cassandra tem vários nós principais, particionamento de nós e replicação de chaves para oferecer alta disponibilidade.

O MongoDB usa um único nó primário e vários nós de réplica. Combinado com a fragmentação, o MongoDB fornece alta disponibilidade e escalabilidade. 

Particionamento

Algoritmo de hash consistente, menos controle para os usuários.

Os usuários definem as chaves de fragmentação e têm mais controle sobre o particionamento.

Como a AWS pode dar suporte aos seus requisitos para Cassandra e MongoDB?

A Amazon Web Services (AWS) oferece dois serviços que dão suporte aos requisitos comuns do Apache Cassandra e do MongoDB.

O Amazon Keyspaces (para Apache Cassandra) é um banco de dados gerenciado altamente disponível que permite mover suas workloads do Cassandra para a nuvem. O Amazon Keyspaces é um produto sem servidor. Você paga apenas pelos recursos que usa, e o serviço aumenta e reduz a escala das tabelas automaticamente de acordo com o tráfego do aplicativo. Você pode criar aplicações que atendem a milhares de solicitações por segundo com throughput e armazenamento praticamente ilimitados.

O Amazon DocumentDB (compativel com MongoDB) é um banco de dados de documentos JSON nativo totalmente gerenciado. Ele torna fácil e econômico operar workloads de documentos essenciais em praticamente qualquer escala sem precisar gerenciar a infraestrutura. O Amazon DocumentDB simplifica sua arquitetura, fornecendo práticas recomendadas de segurança integradas, backups contínuos e integrações nativas com outros serviços da AWS.

Comece a usar os serviços gerenciados de banco de dados Apache Cassandra e MongoDB na AWS criando uma conta da AWS hoje mesmo.