# Apache Cassandra

Apache Cassandra é um projeto de sistema de banco de dados distribuído altamente escalável de segunda geração, que reúne a arquitetura do DynamoDB, da Amazon Web Services e modelo de dados baseado no BigTable, do Google.
O Cassandra inicialmente foi criado pelo Facebook, que abriu seu código-fonte para a comunidade em 2008. Agora é mantido por desenvolvedores da fundação Apache e colaboradores de muitas empresas.

## História

Avinash Lakshman, um dos autores do DynamoDB da Amazon, e Prashant Malik desenvolveram inicialmente o Cassandra no Facebook para gerenciar o recurso de pesquisa da caixa de entrada do Facebook. O Facebook lançou o Cassandra como um projeto de código aberto no código do Google em julho de 2008. Em março de 2009, tornou-se um projeto da Incubadora Apache. Em 17 de fevereiro de 2010, ele se formou em um projeto de nível superior.
Os desenvolvedores do Facebook nomearam seu banco de dados em homenagem ao profeta mitológico Trojan Cassandra, com alusões clássicas à maldição de um oráculo.

### Problemas conhecidos

Até o Cassandra 1.0, o Cassandra não era consistente em nível de linha, o que significa que inserções e atualizações na tabela que afetam a mesma linha que são processadas aproximadamente ao mesmo tempo podem afetar as colunas não chave de maneiras inconsistentes. Uma atualização pode afetar uma coluna enquanto outra afeta a outra, resultando em conjuntos de valores na linha que nunca foram especificados ou pretendidos. O Cassandra 1.1 resolveu esse problema introduzindo o isolamento no nível da linha.

#### Lápides

Sabe-se que as lápides causam degradação do desempenho até níveis de conseqüências graves.

## Principais características
### Distribuído

    Cada nó no cluster tem a mesma função. Não há um ponto único de falha. Os dados são distribuídos pelo cluster (para que cada nó contenha dados diferentes), mas não há "ponta" principal, pois cada nó pode atender a qualquer solicitação.

### Escalabilidade

    Projetado para ter taxa de transferência de leitura e gravação, aumenta linearmente à medida que novas máquinas são adicionadas, com o objetivo de não haver tempo de inatividade ou interrupção nos aplicativos.

### Tolerante a falhas

    Os dados são replicados automaticamente para vários nós para tolerância a falhas. A replicação em vários data centers é suportada. Nós com falha podem ser substituídos sem tempo de inatividade.

### Consistência ajustável

    O Cassandra é tipicamente classificado como um sistema AP, o que significa que a disponibilidade e a tolerância da partição são geralmente consideradas mais importantes que a consistência no Cassandra, gravações e leituras oferecem um nível ajustável de consistência, desde "as gravações nunca falham" até "bloco para que todas as réplicas sejam legíveis", com o nível de quorum no meio.

### Suporte do MapReduce

    Cassandra possui integração com o Hadoop, com suporte ao MapReduce. Também há suporte para o Apache Pig e o Apache Hive.

### Linguagem de consulta

    Cassandra introduziu a Cassandra Query Language (CQL). O CQL é uma interface simples para acessar o Cassandra, como uma alternativa à tradicional SQL (Structured Query Language).

### Consistência Posterior

    Cassandra gerencia consistência posterior de leituras, upserts e exclusões através de Tombstones.

### Modelo de dados

Cassandra é um amplo armazenamento de colunas e, como tal, essencialmente um híbrido entre um valor-chave e um sistema de gerenciamento de banco de dados tabular. Seu modelo de dados é um armazenamento de linha particionado com consistência ajustável. Linhas são organizadas em tabelas; o primeiro componente da chave primária de uma tabela é a chave de partição; dentro de uma partição, as linhas são agrupadas pelas colunas restantes da chave. Outras colunas podem ser indexadas separadamente da chave primária.
As tabelas podem ser criadas, descartadas e alteradas em tempo de execução sem bloquear atualizações e consultas.
Cassandra não pode fazer junções ou subconsultas. Em vez disso, Cassandra enfatiza a desnormalização por meio de recursos como coleções.
Uma família de colunas (chamada "tabela" desde o CQL 3) se assemelha a uma tabela em um RDBMS (Sistema de Gerenciamento de Banco de Dados Relacional). As famílias de colunas contêm linhas e colunas. Cada linha é identificada exclusivamente por uma chave de linha. Cada linha possui várias colunas, cada uma com um nome, valor e um carimbo de data/hora. Ao contrário de uma tabela em um RDBMS, linhas diferentes na mesma família de colunas não precisam compartilhar o mesmo conjunto de colunas, e uma coluna pode ser adicionada a uma ou várias linhas a qualquer momento.
Cada chave no Cassandra corresponde a um valor que é um objeto. Cada chave possui valores como colunas e as colunas são agrupadas em conjuntos chamados famílias de colunas. Assim, cada chave identifica uma linha de um número variável de elementos. Essas famílias de colunas podem ser consideradas como tabelas. Uma tabela no Cassandra é um mapa multidimensional distribuído indexado por uma chave. Além disso, os aplicativos podem especificar a ordem de classificação das colunas em uma família Super Coluna ou Coluna Simples.

### Aplicações notáveis

De acordo com a DB-Motores do ranking, Cassandra é a mais popular loja de coluna larga, e em setembro 2014 tornou-se a 9ª banco de dados mais popular.
* A Apple usa 100.000 nós Cassandra, conforme revelado no Cassandra Summit San Francisco 2015 embora não tenha elaborado para quais produtos, serviços ou recursos;
* O AppScale usa o Cassandra como back-end para aplicativos do Google App Engine;
* A BlackRock usa Cassandra em sua plataforma de gerenciamento de investimentos Aladdin;
* O CERN usou o protótipo baseado em Cassandra em seu experimento ATLAS para arquivar as informações de monitoramento do sistema DAQ on-line;
* O WebEx da Cisco usa o Cassandra para armazenar feeds e atividades do usuário quase em tempo real;
* O Constant Contact usa o Cassandra em seus aplicativos de email e marketing de mídia social. Mais de 200 nós são implantados;
* O Digg, um site de notícias sociais, anunciou em 9 de setembro de 2009 que está lançando seu uso do Cassandra e confirmou isso em 8 de março de 2010. Desde então, o TechCrunch vinculou o Cassandra às críticas de confiabilidade do Digg v4. Os engenheiros líderes do Digg mais tarde repreenderam essas críticas como arenque vermelho e culparam a falta de testes de carga;
* O Discord mudou para Cassandra para armazenar bilhões de mensagens do MongoDB em novembro de 2015;
* O Formspring usa o Cassandra para contar respostas, além de armazenar dados de gráficos sociais (seguidores, seguidores, bloqueadores, bloqueios) de 26 milhões de contas com 10 milhões de respostas por dia;
* O Globo.com usa o Cassandra como um banco de dados de back-end para seus serviços de streaming;
* O Grubhub usa o Cassandra como seu principal repositório de dados persistentes para seus serviços de back-end;
* O Mahalo.com usou o Cassandra para registrar registros de atividades e tópicos do usuário em seu site de perguntas e respostas;
* A Netflix usa Cassandra como seu banco de dados de back-end para seus serviços de streaming;
* Os appliances Nutanix usam o Cassandra para armazenar metadados e estatísticas;
* Ooyala construiu um mecanismo de análise em tempo real usando Cassandra;
* O Openwave usa o Cassandra como um banco de dados distribuído e como um mecanismo de armazenamento distribuído para sua plataforma de mensagens;
* O OpenX está executando mais de 130 nós no Cassandra para o seu produto OpenX Enterprise para armazenar e replicar anúncios e dados de segmentação para entrega de anúncios;
* O Rackspace usa o Cassandra internamente;
* O Reddit mudou do memcacheDB para Cassandra em 12 de março de 2010 e teve alguns problemas em maio daquele ano devido a nós insuficientes em seu cluster;
* O RockYou usa o Cassandra para gravar todos os cliques de 50 milhões de usuários ativos mensais em tempo real para seus jogos online;
* O SoundCloud usa o Cassandra para armazenar o painel de seus usuários;
* O Uber usa o Cassandra para armazenar cerca de 10.000 recursos em seu Feature Store atualizado diariamente em toda a empresa para acesso de baixa latência durante previsões de modelos ao vivo;
* O Urban Airship usa Cassandra com o serviço móvel de hospedagem para mais de 160 milhões de instalações de aplicativos em 80 milhões de dispositivos exclusivos;