Quando não usar a Cassandra? [fechado]
tem havido muita conversa relacionado com a Cassandra ultimamente.
Twitter, Digg, Facebook, etc.Quando É Que Faz Sentido:
- usa a Cassandra,
- Não usar a Cassandra, e Usa um RDMS em vez da Cassandra.
18 answers
Porquê utilizar NoSQL
No caso dos RDBMS, fazer uma escolha é muito fácil porque todas as bases de dados como MySQL, Oracle, MS SQL, PostgreSQL nesta categoria oferecem quase o mesmo tipo de soluções orientadas para propriedades ácidas. Quando se trata de NoSQL, a decisão torna-se difícil porque cada banco de dados NoSQL oferece soluções diferentes e você tem que entender qual é o mais adequado para os seus requisitos app/sistema. Por exemplo, o MongoDB é adequado para casos de uso em que o seu sistema exige um loja de documentos sem esquemas. HBase pode ser adequado para motores de busca, analisando dados de log, ou qualquer lugar onde a digitalização de tabelas enormes, bidimensionais unindo-sem é um requisito. O Redis é construído para fornecer pesquisa em memória de variedades de estruturas de dados, como árvores, filas, listas ligadas, etc, e pode ser um bom ajuste para fazer tabelas de classificação em tempo real, pub-Sub tipo de Sistema. Da mesma forma, existem outras bases de dados nesta categoria (incluindo Cassandra) que são adequados para diferentes declarações de problemas. Ir passe para as perguntas originais, e responda-lhes uma a uma.Quando utilizar Cassandra
Sendo uma parte da família NoSQL, Cassandra oferece uma solução para problemas em que um de seus requisitos é ter um sistema de escrita muito pesado e você quer ter um sistema de relatórios bastante ágil em cima desses dados armazenados. Considere o caso de uso de Web analytics onde os dados de log são armazenados para cada pedido e você quer construir uma plataforma analítica em torno dele para contar acessos por hora, por navegador, por IP, etc em tempo real. Você pode se referir a Este post blog para entender mais sobre os casos de uso em que Cassandra se encaixa.Quando utilizar um RDMS em vez de Cassandra
A Cassandra baseia-se numa base de dados NoSQL e não fornece propriedades de dados ácidos e relacionais. Se você tem um forte requisito para propriedades ácidas (por exemplo dados financeiros), Cassandra não seria um ajuste nesse caso. Obviamente, você pode fazer um trabalho para que, no entanto, você vai acabar escrevendo lotes de código de aplicação para simular propriedades ácidas e vai perder no tempo para o mercado mal. Também gerir esse tipo de sistema com a Cassandra seria complexo e aborrecido para ti.Quando não usar Cassandra
Acho que não precisa de resposta se a explicação acima fizer sentido.Ao avaliar sistemas de dados distribuídos, você tem que considerar o teorema da tampa - você pode escolher dois dos seguintes: consistência, disponibilidade e tolerância de partição.
A Cassandra é um sistema disponível, tolerante a partições, que suporta a eventual consistência. Para mais informações, veja este post que eu escrevi: Guia Visual para os sistemas NoSQL .Se não tiver tantos dados ou se tiver milhões para pagar pela Enterprise Oracle / DB2 cluster instalação e especialistas necessários para configurá-lo e mantê-lo, então você está bem com o banco de dados SQL.
No entanto, o Facebook já não usa cassandra e agora usa o MySQL quase exclusivamente para mover o particionamento na pilha de aplicações para um desempenho mais rápido e melhor controle.A ideia geral de NoSQL é que você deve usar qualquer armazenamento de dados que seja o mais adequado para a sua aplicação. Se você tem uma tabela de dados financeiros, use SQL. Se você tiver objetos que necessitariam de consultas complexas/lentas para mapear um esquema relacional, use um objeto ou chave / valor store.
É claro que qualquer problema do mundo real que se encontre está algures entre esses dois extremos e nenhuma solução será perfeita. Você precisa considerar as capacidades de cada loja e as consequências de usar um sobre o outro, que será muito específico para o problema que você está tentando resolver.Além disso, as respostas dadas acima sobre quando usar e quando não usar Cassandra, se você decidir usar Cassandra, você pode querer considerar a não utilização de Cassandra em si, mas um dos seus muitos primos lá fora.
Algumas respostas acima já apontaram para vários sistemas NoSQL que compartilham muitas propriedades com Cassandra, com algumas pequenas ou grandes diferenças, e podem ser melhores do que Cassandra para suas necessidades específicas.Adicionalmente, recentemente (vários anos depois esta pergunta foi originalmente feita), Um clone de Cassandra chamado Scylla (veja https://en.wikipedia.org/wiki/Scylla_ (database) ) foi lançado. Scylla é uma re-implementação de código aberto de Cassandra em C++, que afirma ter um débito significativamente maior e latências menores do que o Java Cassandra original, enquanto sendo principalmente compatível com ele (em recursos, APIs e formatos de arquivos). Se já estás a considerar a Cassandra, talvez queiras considerar o Scylla também.
Não considere Cassandra como a primeira escolha quando você tem uma exigência estrita sobre o relacionamento (através de seu conjunto de dados).
Cassandra por padrão é o sistema AP (do CAP). Mas, ele suporta consistência sintonizável o que significa que pode ser configurado para suportar como CP também. Por isso, não o ignores só porque Leste algures que é AP e estás à procura de sistemas de CP.Cassandra é mais precisamente chamada de "tuneably consistent", o que significa que lhe permite decidir facilmente o nível de consistência que necessita, em equilíbrio com o nível de disponibilidade.
Não use Cassandra se a sua escala não é muito ou se você pode lidar com um DB não distribuído.
Pensa melhor se a tua equipa pensa que todos os teus problemas será resolvido se usares DBs distribuídos como a Cassandra. Para começar com estes DBs é muito simples, pois vem com muitos defaults, mas otimizar e dominar para resolver um problema específico exigiria uma boa (se não muito) quantidade de esforço de engenharia.
Cassandra é orientada a coluna, mas ao mesmo tempo cada linha também tem uma chave única. Então, pode ser útil pensar nisso como uma loja indexada e orientada a linhas. pode até usá-lo como loja de documentos.
A Cassandra não te obriga a definir os campos de antemão. Então, se você está em um modo de inicialização ou suas características estão evoluindo (como em ágil) - Cassandra abraça-o. Então melhor, primeiro pense em consultas e depois pense em dados para respondê-las.
Cassandra é otimizada para muito alta taxa de escrita. Se o seu caso de uso é de leitura pesada (como cache), então Cassandra pode não ser uma escolha ideal.
Você deve fazer a si mesmo as seguintes perguntas:
- (Volume, Velocidade) você estará escrevendo e lendo toneladas de informação, tanta informação que nenhum computador poderia lidar com as escritas.
- (Global) {[6] } Você vai precisar desta capacidade de escrita e leitura em todo o mundo para que as escritas em uma parte do mundo são acessíveis em outra parte do mundo?
- (fiabilidade) é necessário que esta base de dados esteja operacional e em funcionamento o tempo todo e nunca ir para baixo independentemente de que Nuvem, que país, seja VM , Container, ou metal nu?
- (Escala-ability) você precisa desta base de dados para ser capaz de continuar a crescer facilmente e escala linearmente
- (consistência) Você precisa de consistência sintonizável onde algumas escritas podem acontecer assíncronamente onde como outras precisam ser certificadas?
- (habilidade) Você está disposto a fazer o que for preciso para aprender esta tecnologia e os dados modelagem que acompanha a criação de um banco de dados globalmente distribuído que pode ser rápido para todos, em todos os lugares?
Use RDBMS quando puder fazer tudo numa caixa. É provavelmente mais fácil do que a maioria e qualquer um pode trabalhar com ele.
A carga de uma consulta individual pesada contra a consulta leve gazillion é outro ponto a considerar, além de outras respostas aqui. É inerentemente mais difícil otimizar automaticamente uma única consulta em um DB estilo NoSql. Usei o MongoDB e tive problemas de desempenho ao tentar calcular uma consulta complexa. Não usei a Cassandra, mas espero que tenha o mesmo problema.
Por outro lado, se a sua carga é esperada para ser a de muitas pequenas consultas, e você quer ser capaz para facilitar a escala, você pode aproveitar a eventual consistência que é oferecida pela maioria dos DBs NoSql. Note que a consistência eventual não é realmente uma característica de um modelo de dados não-relacional, mas é muito mais fácil de implementar e configurar em um sistema baseado em NoSql.
Para uma única e muito pesada consulta, qualquer motor RDBMS moderno pode fazer um trabalho decente em paralelo com as partes da consulta e tirar proveito de tanto CPU e memória que você jogar nele (em uma única máquina). As bases de dados NoSql não têm informações suficientes sobre a estrutura dos dados para ser capaz de fazer suposições que permitirão uma paralelização verdadeiramente inteligente de uma grande consulta. Eles permitem que você facilmente escalar mais servidores (ou núcleos), mas uma vez que a consulta atinge um nível de complexidade, você é basicamente forçado a dividi-lo manualmente em partes que o motor NoSql sabe como lidar com inteligentemente.
Na minha experiência com MongoDB, por causa da complexidade da pergunta, não havia muito que Mongo pudesse fazer. para otimizá-lo e executar partes dele em vários dados. Mongo paralisa várias consultas mas não é tão bom em otimizar um único.Http://planetcassandra.org/apache-cassandra-use-cases/
Eles elaboraram a razão pela qual não escolheram o MySql é porque a sincronização do db é muito lenta.(também devido a commit de 2 frases, FK, PK)
A Cassandra é baseada na Amazon. Papel de dínamo
Características:
Estabilidade
Alta Disponibilidade
A cópia de segurança tem um bom desempenho
Ler e escrever é melhor que HBase, (clone BigTable em java).
Wiki http://en.wikipedia.org/wiki/Apache_Cassandra
A sua conclusão é:
We looked at HBase, Dynamo, Mongo and Cassandra.
Cassandra was simply the best storage solution for the majority of our data.
A partir de 2018,
Eu recomendaria o uso de Scyladb para substituir a cassandra clássica, se precisar de suporte de costas.O 'plugin' do KV do Postgres também é rápido que a cassandra. Como nunca terá escalabilidade multi-instância.
Outra situação que torna a escolha mais fácil é quando pretender utilizar a função de agregação, como sum, min, max, etc, etc e consultas complexas (como no sistema financeiro mencionado acima), em seguida, um banco de dados relacional é provavelmente mais conveniente, em seguida, um banco de dados nosql, pois ambos não são possíveis em uma base de dados nosql, a menos que você realmente usar um monte de índices Invertidos. Quando você usa nosql você teria que fazer as funções agregadas em código ou armazená-las separadamente em sua própria família mas Isso torna tudo bastante complexo e reduz o desempenho que você ganhou usando nosql.
Não precisa das propriedades ácidas do seu cadáver.
Haveria um número enorme e enorme de escritos no DB.
Há um requisito para integrar com grandes dados, Hadoop, colmeia e faísca.
Há uma necessidade de análise de dados em tempo real e relatar gerações.
Há uma exigência de um mecanismo impressionante tolerante a falhas.
Existe uma exigência de um sistema homogéneo.
Há uma exigência de muita personalização para afinação.
EDIT : para responder à pergunta nos comentários da proximab, quando pensamos em sistemas bancários, pensamos imidivelmente que "o ácido é a melhor solução". Mas mesmo os sistemas bancários são compostos por vários subsistemas que podem nem estar lidando com dados relacionados a transações como informações pessoais do titular da conta, extratos de conta, detalhes do cartão de crédito, histórico de crédito, etc.
Todas estas informações devem ser armazenadas numa base de dados ou noutra. Agora, se você armazenar a informação relacionada à conta como saldo da conta, isso é algo que precisa ser consistente em todos os momentos. Por exemplo, se você tentar enviar dinheiro da conta A para a conta B, então o dinheiro que desaparece da conta a deve aparecer instantâneamente na conta B, e não pode estar presente em ambas as contas ao mesmo tempo. Este sistema não pode ser inconsistente em nenhum momento. Isto é ... onde o ácido é de extrema importância.Por outro lado, se você está guardando detalhes do cartão de crédito ou histórico de crédito, que não deve entrar nas mãos erradas, então você precisa de algo que permite o acesso apenas a usuários autorizados. Penso que isso é apoiado pela Cassandra. Dito isto, dados como histórico de crédito e transações de cartão de crédito, eu acho que isso é um dado cada vez maior. Além disso, há apenas tanto yo pode consultar sobre estes dados, ou seja, tem um número muito finito de consultas. Estes dois as Condições fazem da Cassandra uma solução perfeita.
Se precisar de semântica estrita e de suporte para consultas SQL, escolha outra solução como MySQL, PostGres, ou combine o uso de Cassandra com Solr.
A arquitetura é puramente baseada no teorema da cap, que é disponibilidade, e tolerância de partição, e interessante eventual consistentemente.
Não a uses, se não armazenares volumes de dados em pilhas de aglomerados., Não usar se não estiver a armazenar tempo dados das séries, Não usar se não tiver a paciência dos seus servidores, Não use se precisar de consistência forte.
De acordo com DataStax, Cassandra não é o melhor caso de Utilização quando há necessidade de
1-dispositivos de hardware topo de gama. 2-ACID compliant with no roll back (bank transaction)
- não suporta a gestão completa das transacções em todo o mundo. tabela.
- o índice secundário não é suportado.
- tens de confiar na pesquisa elástica /Solr para o índice secundário e o componente de sincronização personalizado tem de ser escrito.
- não é um sistema compatível com ácido.
- O suporte de pesquisa é limitado.