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?
fonte
Respostas:
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
fonte
Cassandra + Lucene é uma ótima opção. Existem diferentes iniciativas para este assunto, por exemplo:
fonte
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.
fonte
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
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.
fonte
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.
fonte
fonte
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á:
fonte