Elasticsearch vs Cassandra vs Elasticsearch com Cassandra

110

Estou aprendendo NoSQL e procurando diferentes opções para um dos requisitos do meu cliente. Eu passei por vários recursos antes de colocar esta questão (uma pessoa com pouco conhecimento em NoSQL)

  • Eu preciso armazenar dados em uma taxa mais rápida e ler os dados.
  • Totalmente à prova de falhas e facilmente escalonável.
  • Capaz de pesquisar dados para Analytics.

Acabei com uma pequena lista de: Cassandra and Elasticsearch

O que eu entendo é que Cassandra é uma solução de armazenamento NoSQL perfeita para mim, já que posso escrever e ler dados usando índices. Onde ele falha ou pode falhar é no Analytics. No futuro, se eu quiser obter dados from_date to to_date, ou mais maneiras de obter dados para análise, se eu não projetar o modelo de dados corretamente ou manter uma visão de longo prazo, o que pode ser muito difícil em um mundo em constante mudança.

O While Elastic Searché melhor em indexação (apoiado pelo Lucene) e pode pesquisar os dados aleatoriamente lançando algum texto aleatório. Mas funciona da mesma forma, mesmo se eu quiser recuperar dados from_date to to_date(espero que seja). Mas a verdadeira questão é: é um mecanismo de pesquisa ou armazenamento de dados NoSQL perfeito como o Cassandra? Se sim, por que ainda precisamos de Cassandra?

Se ambos estiverem em um mundo diferente, explique isso! Como podemos combiná-los para obter uma solução mais eficaz?

Reddy
fonte
2
Você deve considerar também DSE Search = Cassandra + solr integrado = o melhor dos dois mundos: um banco de dados escalável para o armazenamento impulsionado pelo poder de pesquisa do Solr.
Bereng
1
@Bereng, acho que o DSE é comercial e não estamos procurando softwares comerciais.
Reddy
3
Se você for uma startup com receita líquida <$ 2 milhões (EUA), eles permitirão que você use o DSE gratuitamente (por pelo menos um ou dois anos).
Aaron de

Respostas:

150

Um de nossos aplicativos usa dados armazenados no Cassandra e no ElasticSearch. Usamos Cassandra para acessar esses registros sempre que podemos e temos os dados duplicados em tabelas de consulta projetadas para aderir a solicitações específicas do lado do aplicativo. Para uma pesquisa mais liberal do que nossas tabelas de consulta podem permitir, ElasticSearch executa essa funcionalidade muito bem.

Fizemos a mesma pergunta (a nós mesmos) ... "Por que não pegamos tudo do ElastsicSearch?"

A resposta é que ElasticSearch foi projetado para ser um mecanismo de busca, e não um armazenamento de dados persistente. Às vezes, ElasticSearch perde gravações. Mudanças de esquema são difíceis de fazer no ElasticSearch sem explodir tudo e recarregar. Para esse propósito, escrevi trabalhos projetados para manter ElasticSearch sincronizado com nosso cluster Cassandra. Houve também uma discussão bastante recente no Quora sobre este tópico , que rendeu pontos semelhantes.

Dito isso, o ElasticSearch funciona muito bem como um mecanismo de pesquisa. E o Cassandra funciona muito bem como um armazenamento de dados escalonável e de alto desempenho. Mas consultar dados é diferente de pesquisar dados. Há momentos em que precisamos de um ou de outro, e uma combinação dos dois funciona bem para nosso aplicativo. Pode (ou não) funcionar bem para o seu.

Quanto à análise, tive algum sucesso ao usar o conector Cassandra Spark para atender a consultas OLAP mais complexas. Espero que ajude.

Editar 20200421

Escrevi uma resposta mais recente para uma pergunta semelhante:

ElasticSearch x ElasticSearch + Cassandra

Aaron
fonte
24
Alguém pode explicar a diferença entre consultar e pesquisar os dados?
Dror
21
@dror por exemplo, se você sabe o (s) id (s) dos seus dados, você apenas pede por eles (cassandra) e se você não sabe o (s) id (s) dos seus dados, então você procura por eles (pesquisa elástica).
arsenik de
2
@Gladwell, tudo depende do tamanho de seus dados e da complexidade de suas consultas. Em teoria, o Elastic pode fazer tudo. No entanto, eu confiaria que o Cassandra faria um trabalho melhor de dimensionamento para oferecer suporte a um grande conjunto de dados (para consultas) do que o Elastic, especialmente se você estiver oferecendo suporte a várias regiões / DC.
Aaron
1
@Aaron ... escalar para suportar um grande conjunto de dados é o que esses dois motores fazem bem. Nossa organização usa a pesquisa elástica como banco de dados primário, mecanismo de alerta, ferramenta analítica e agora que o xpack oferece suporte ao aprendizado de máquina; ele também fornece estatísticas de negócios em torno de nossa IOT de ponta.
AnthonyJClink
1
@Dror Fazendo a pergunta real!
Mike Ezzati,
32

Cassandra + Lucene é uma ótima opção. Existem diferentes iniciativas para este assunto, por exemplo:

Alvaro Agea
fonte
Uma coisa para se manter em mente, na versão 2.1 você pode agora "inserir" um indexador personalizado ... então, por exemplo, você pode imitar o que o Statio está fazendo com seu fork do C *, mas fora da linha principal C *. Não estou ciente de quaisquer esforços generalizados para fazer isso, mas pretendo reduzir os índices Lucene para C * desta forma. Para mais informações: Issues.apache.org/jira/browse/CASSANDRA-8717
evanv
8

Depois de trabalhar nesse problema sozinho, percebi que os bancos de dados NoSQL, como o casandra, são bons quando você deseja ter certeza de que está preservando seu esquema de dados com operação de gravação confiável e não deseja tirar proveito das operações de indexação que o elasticsearch oferece. Caso você queira preservar alguns dados de índices, o elasticsearch é bom caso você confie em seu esquema e só faça mais leituras do que gravações.

Meu caso foi análise de dados. Então, eu preservei muitos dos meus Latices na pesquisa elástica, pois mais tarde eu quis percorrer muito os dados para ver qual deveria ser meu próximo passo. Eu teria usado o casandra se quisesse ter muitas mudanças no esquema dos dados em minhas pilelines analíticas.

Além disso, existem muitas ferramentas de representação legais, como o kibana, que você pode usar para apresentar seus dados com bons gráficos. Talvez eu seja preguiçoso, mas eles são muito bonitos e me ajudaram.

M.Rez
fonte
4

Armazenar dados em uma combinação de Cassandra e ElasticSearch oferece a você mais funcionalidade. Ele permite que você pesquise tabelas de valores-chave e também pesquise dados em índices.

A combinação oferece muita flexibilidade, ideal para sua aplicação.


fonte
4

Elassandra é a solução combinada de Cassandra + Elastic search, usa Elastic search para indexar os dados e Cassandra como armazenamento de dados, não tenho certeza sobre o desempenho, mas de acordo com este artigo , seu desempenho é bom.
Se seu aplicativo precisa do recurso de pesquisa, Elassandra é a melhor opção de código aberto. A pesquisa DSE está disponível, mas é cara.

anavaras lamurep
fonte
1

Nós desenvolvemos um aplicativo onde usamos Elasticsearch e Cassandra. Dados semelhantes foram armazenados no Cassandra e indexados no Elasticsearch.

A IU do nosso aplicativo tinha recursos como pesquisas, agregações, exportação de dados, etc. Os microsserviços de back-end obtinham continuamente dados enormes (sobre tópicos do Kafka) e os armazenavam no Cassandra. Depois que os dados são armazenados no Cassandra, os serviços garantem que os dados sejam indexados no Elasticsearch.

Cassandra estava agindo como "Fonte da verdade" para Elasticsearch. Nos casos em que a reindexação do índice ES foi necessária, consultamos o Cassandra e reindexamos os dados no ES.

Essa solução nos ajudou, pois era muito fácil de escalar e as buscas e agregações eram muito mais rápidas.

Sumit A
fonte
0
  • Como elasticsearch é construído no índice Lucene e se você deseja armazenar indexação em elasticsearch, ele tem melhor desempenho em comparação com a indexação no próprio Cassandra para recuperar os dados.
  • Se seus requisitos não estão relacionados à recuperação em tempo real, você também pode usar elasticsearch como banco de dados NoSQL, há pensamentos de que ElasticSearch perde gravações e mudanças de esquema são difíceis, mas se seu volume de dados não for muito grande. Você pode facilmente obter o elasticsearch como um mecanismo de pesquisa com a melhor indexação, juntamente com o elasticsearch como um banco de dados NoSQL. Existem várias maneiras de evitá-lo. Eu trabalhei nas mudanças de esquema em elasticsearch, se sua estrutura de dados for consistente, ele criará quaisquer problemas.
  • Apoiar ElasticSearch ou SOlr. Eu trabalhei em ambos os motores de busca e percebi que ambos podem ser usados ​​fluentemente se você configurá-los corretamente.
  • Só os contras que eu posso pensar sobre isso, se você está direcionando o resultado em tempo real e não pode comprosie milissegundos de atraso em sua resposta. Então, é melhor ter ajuda de outros bancos de dados NoSQL, como cassandra ou couchbase.
  • Cassandra com solr, funciona melhor do que Cassandra com elasticSearch.
Vishal Yadav
fonte
0

Cassandra é excelente em recuperar dados por ID . Não sei muito sobre o desempenho do índice secundário, mas duvido que seja tão rápido quanto o Elasticsearch. Certamente Elasticsearch ganha quando se trata de funcionalidade de pesquisa de texto completo ( análise de texto , pontuação de relevância , etc.).

Cassandra também ganha no desempenho de atualização . Elasticsearch oferece suporte a atualizações, mas uma atualização é realmente uma reindexação + exclusão suave em uma operação atômica.

O Cassandra tem um modelo de replicação muito bom (se você precisar ser extra-fail-safe). Elasticsearch também está OK, não estou no campo que diz que o ES não é particularmente confiável (ele tem problemas às vezes, como todo software).

Elasticsearch também possui agregações para análises em tempo real. E como as pesquisas são muito rápidas, a análise de um subconjunto de dados também será rápida .

Se seus requisitos forem satisfeitos o suficiente por um deles (como aqui, parece que o ES funcionaria bem), eu usaria apenas um. Se você tiver requisitos de ambos os mundos, poderá:

  • use um deles e contorne as desvantagens. Por exemplo, você pode ser capaz de lidar com muitas atualizações com Elasticsearch, mas com mais fragmentos e mais hardware
  • use ambos e verifique se eles estão sincronizados
Radu Gheorghe
fonte