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.
Author: Luke, 2010-04-14

18 answers

Não há nada como uma bala de prata, tudo é construído para resolver problemas específicos e tem os seus prós e contras. Cabe-lhe a si, qual é a declaração de problemas que tem e qual é a melhor solução adequada para esse problema. Vou tentar responder às suas perguntas, uma a uma, na mesma ordem que as fez. Uma vez que Cassandra é baseada na família de bancos de dados NoSQL, é importante que você entenda por que usar uma base de dados NoSQL antes de eu responder suas perguntas.

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.
 176
Author: Ajay Tiwari, 2018-03-27 22:19:34

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 .
 53
Author: Nathan Hurst, 2016-03-01 09:45:09
Cassandra é a resposta para um problema em particular: o que você faz quando você tem tantos dados que não se encaixam em um servidor ? Como você armazena todos os seus dados em muitos servidores e não quebra sua conta bancária e não deixa seus desenvolvedores loucos ? Facebook recebe 4 Terabyte de novos dados comprimidos todos os dias. E este número provavelmente crescerá mais do que duas vezes dentro de um ano.

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.
 31
Author: Vagif Verdi, 2013-06-22 01:25:28

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.
 28
Author: Tom Clarkson, 2010-04-14 22:22:11

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.

 14
Author: Nadav Har'El, 2017-11-07 09:51:11
Falar com alguém a meio da implantação da Cassandra, não lida com o poço de muitos para muitos. Estão a fazer um trabalho para fazer os testes iniciais. Falei com um consultor da Cassandra sobre isto e ele disse que não o recomendaria Se tivesses este problema definido.
 10
Author: Warren, 2010-06-06 22:21:04
Vou concentrar - me em alguns dos aspectos importantes que podem ajudar-te a decidir se precisas mesmo da Cassandra. A lista não é exaustiva, apenas alguns dos pontos que tenho no topo da minha mente -
  • 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.

 7
Author: rai.skumar, 2019-08-30 14:07:54

Você deve fazer a si mesmo as seguintes perguntas:

  1. (Volume, Velocidade) você estará escrevendo e lendo toneladas de informação, tanta informação que nenhum computador poderia lidar com as escritas.
  2. (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?
  3. (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?
  4. (Escala-ability) você precisa desta base de dados para ser capaz de continuar a crescer facilmente e escala linearmente
  5. (consistência) Você precisa de consistência sintonizável onde algumas escritas podem acontecer assíncronamente onde como outras precisam ser certificadas?
  6. (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?
Se para alguma destas perguntas pensaste "talvez" ou "não", devias usar outra coisa. Se tiveste "claro que sim" como resposta a todos eles, então devias usar a Cassandra.

Use RDBMS quando puder fazer tudo numa caixa. É provavelmente mais fácil do que a maioria e qualquer um pode trabalhar com ele.

 5
Author: Rahul Singh, 2019-03-15 13:44:49

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.
 4
Author: sinelaw, 2013-04-09 14:36:09
Vamos ler alguns casos do mundo real.

Http://planetcassandra.org/apache-cassandra-use-cases/

Neste artigo: http://planetcassandra.org/blog/post/agentis-energy-stores-over-15-billion-records-of-time-series-usage-data-in-apache-cassandra

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.

 4
Author: CodeFarmer, 2019-02-11 06:18:07

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.

 3
Author: ronaldmathies, 2010-04-28 04:31:41
Cassandra é uma boa escolha se:
  1. Não precisa das propriedades ácidas do seu cadáver.

  2. Haveria um número enorme e enorme de escritos no DB.

  3. Há um requisito para integrar com grandes dados, Hadoop, colmeia e faísca.

  4. Há uma necessidade de análise de dados em tempo real e relatar gerações.

  5. Há uma exigência de um mecanismo impressionante tolerante a falhas.

  6. Existe uma exigência de um sistema homogéneo.

  7. Há uma exigência de muita personalização para afinação.

 2
Author: KayV, 2018-03-21 16:53:52
Certo. Faz sentido usar Cassandra quando você tem uma quantidade enorme de dados, um grande número de consultas, mas muito pouca variedade de consultas. Cassandra basicamente trabalha dividindo e replicando. Se todas as suas consultas serão baseadas na mesma chave de partição, Cassandra é a sua melhor aposta. Se você obter uma consulta sobre um atributo que não é a chave de partição, Cassandra permite que você replicar os dados inteiros com uma nova chave de partição. Então agora você tem 2 réplicas dos mesmos dados com 2 chaves de partição diferentes. O que me leva à tua próxima pergunta. Quando não usar a Cassandra. Como mencionei, Cassandra scales replicando a base de dados completa para cada nova chave de particionamento. Mas não podes continuar a fazer cópias novas uma e outra vez. Assim, quando você tem uma grande variedade em consultas, ou seja, cada consulta tem uma coluna diferente na cláusula onde, Cassandra não é uma boa opção. Passo agora à terceira pergunta. O objetivo de usar RDBMS é quando você quer o Propriedades do ácido. Se você está construindo algo como um serviço de pagamento e quer que cada transação seja isolada, cada transação para completar ou não acontecer de todo, as alterações para ser persistente, apesar da falha do sistema, e o dinheiro para ser consistente em todas as contas bancárias antes e depois da transação completa, um RDBMS é a única opção que irá ajudá-lo a alcançar isso. Este artigo explica tudo, especialmente quando usar Cassandra ou não. outra opção NoSQL) parte da pergunta - > escolher a melhor base de Dados . Verifica.

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.

 2
Author: Deeksha Kaul, 2020-12-15 08:45:12
Se precisar de uma base de dados totalmente consistente com a semântica de SQL, a Cassandra não é a solução para si. A Cassandra suporta pesquisas de valor-chave. Não suporta consultas SQL. Data in Cassandra é "eventualmente consistente". Pesquisas simultâneas de dados podem ser inconsistentes, mas eventualmente as pesquisas são consistentes.

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.

 1
Author: , 2017-03-09 04:23:29
O Apache cassandra é um banco de dados distribuído para gerir grandes quantidades de dados estruturados em muitos servidores de commodities, ao mesmo tempo que fornece serviços altamente disponíveis e nenhum ponto de falha.

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.

 1
Author: Remario, 2017-12-07 23:48:46
O Mongodb tem funções agregadas muito poderosas e uma estrutura agregada expressiva. Ele tem muitas das características que os desenvolvedores estão acostumados a usar a partir do mundo do banco de dados relacional. Sua estrutura de dados de documentos / Armazenamento Permite modelos de dados mais complexos do que Cassandra, por exemplo. Tudo isto vem com compromissos, claro. Assim, quando você seleciona sua base de dados (NoSQL, NewSQL, ou RDBMS), olhe para o problema que você está tentando resolver e para as suas necessidades de escalabilidade. Ninguém. a base de dados faz tudo.
 0
Author: Sam Taha, 2013-04-09 14:06:23

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)

 0
Author: Mike, 2017-05-05 14:50:56
  • 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.
 0
Author: Deepak Panneerselvam, 2017-10-16 10:56:51