Elasticsearch vs Cassandra vs Elasticsearch avec Cassandra

110

J'apprends NoSQL et je regarde différentes options pour l'une des exigences de mon client. J'ai parcouru diverses ressources avant de poser cette question (une personne ayant peu de connaissances en NoSQL)

  • J'ai besoin de stocker des données plus rapidement et de lire des données.
  • Entièrement sûr et facilement évolutif.
  • Capable de rechercher dans les données pour Analytics.

J'ai fini avec une courte liste de: Cassandra and Elasticsearch

Ce que je comprends, c'est que Cassandra est une solution de stockage NoSQL parfaite pour moi, car je peux écrire des données et lire des données à l'aide d'index. Là où il échoue ou pourrait échouer, c'est sur Analytics. À l'avenir, si je veux obtenir des données from_date to to_dateou plus de moyens d'obtenir des données à des fins d'analyse, si je ne conçois pas le modèle de données correctement ou si je ne garde pas une vue à long terme, ce qui pourrait être assez difficile dans un monde en constante évolution.

While Elastic Searchest le meilleur pour l'indexation (soutenu par Lucene), et peut rechercher les données au hasard en lançant du texte aléatoire. Mais cela fonctionne-t-il de la même manière même si je veux récupérer des données from_date to to_date(je suppose que cela pourrait l'être). Mais la vraie question est: s'agit-il d'un moteur de recherche ou d'un stockage de données NoSQL parfait comme Cassandra? Si oui, pourquoi avons-nous encore besoin de Cassandra?

Si les deux sont dans un monde différent, veuillez l'expliquer! Comment les combiner pour obtenir une solution plus efficace?

Reddy
la source
2
Vous devriez également considérer DSE Search = Cassandra + solr integrated = best of two worlds: une base de données évolutive pour le stockage piloté par la puissance de recherche de Solr.
Bereng
1
@Bereng, je suppose que DSE est commercial et que nous ne cherchons pas de logiciels commerciaux.
Reddy
3
Si vous êtes une startup avec des revenus nets <2 millions de dollars (US), ils vous permettront d'utiliser DSE gratuitement (pendant au moins un an ou deux).
Aaron

Réponses:

150

L'une de nos applications utilise des données stockées à la fois dans Cassandra et ElasticSearch. Nous utilisons Cassandra pour accéder à ces enregistrements chaque fois que nous le pouvons et avons des données dupliquées dans des tables de requêtes conçues pour adhérer à des demandes spécifiques côté application. Pour une recherche plus libérale que nos tables de requêtes ne le permettent, ElasticSearch exécute bien cette fonctionnalité.

Nous avons posé la même question (à nous-mêmes) ... "Pourquoi ne pas tout obtenir d'ElastsicSearch?"

La réponse est qu'ElasticSearch a été conçu pour être un moteur de recherche et non un magasin de données persistant. Parfois, ElasticSearch perd des écritures. Les changements de schéma sont difficiles à faire dans ElasticSearch sans tout faire sauter et recharger. À cette fin, j'ai écrit des travaux conçus pour maintenir ElasticSearch synchronisé avec notre cluster Cassandra. Il y a eu également une discussion assez récente sur Quora à ce sujet , qui a abouti à des points similaires.

Cela étant dit, ElasticSearch fonctionne très bien comme moteur de recherche. Et Cassandra fonctionne très bien en tant que banque de données évolutive et hautes performances. Mais l' interrogation de données est différente de la recherche de données. Il y a des moments où nous avons besoin de l'un ou de l'autre, et une combinaison des deux fonctionne bien pour notre application. Cela peut (ou non) bien fonctionner pour le vôtre.

En ce qui concerne l'analyse, j'ai eu un certain succès en utilisant le connecteur Cassandra Spark, pour servir des requêtes OLAP plus complexes. J'espère que cela pourra aider.

Modifier 20200421

J'ai écrit une nouvelle réponse à une question similaire:

ElasticSearch contre ElasticSearch + Cassandra

Aaron
la source
24
Quelqu'un peut-il expliquer la différence entre interroger et rechercher les données?
Dror
21
@dror par exemple si vous connaissez le ou les identifiants de vos données, il vous suffit de les demander (cassandra) et si vous ne connaissez pas le ou les identifiants de vos données alors vous les recherchez (recherche élastique).
arsenik
2
@Gladwell tout dépend de la taille de vos données et de la complexité de vos requêtes. En théorie, Elastic peut tout faire. Cependant, je ferais confiance à Cassandra pour faire un meilleur travail de mise à l'échelle pour prendre en charge un grand ensemble de données (pour les requêtes) qu'Elastic, surtout si vous prenez en charge la multi-région / DC.
Aaron
1
@Aaron ... la mise à l'échelle pour prendre en charge un grand ensemble de données est ce que ces deux moteurs font bien. Notre organisation utilise la recherche élastique comme base de données principale, moteur d'alerte, outil d'analyse, et maintenant que xpack prend en charge l'apprentissage automatique; il fournit également des statistiques commerciales autour de notre IOT de pointe.
AnthonyJClink
1
@Dror Poser la vraie question!
Mike Ezzati
32

Cassandra + Lucene est une excellente option. Il existe différentes initiatives pour ce problème, par exemple:

Alvaro Agea
la source
Une chose à garder à l'esprit, dans la version 2.1, vous pouvez maintenant "insérer" un indexeur personnalisé ... ainsi, par exemple, vous pouvez imiter ce que Statio fait avec son fork de C * mais hors de la ligne principale C *. Je ne suis au courant d'aucun effort généralisé pour ce faire, mais je prévois de déposer moi-même des indices Lucene dans C *. Pour plus d'informations: issues.apache.org/jira/browse/CASSANDRA-8717
evanv
8

Après avoir travaillé moi-même sur ce problème, j'ai réalisé que les bases de données NoSQL comme casandra sont bonnes lorsque vous voulez vous assurer de préserver votre schéma de données avec une opération d'écriture fiable, et que vous ne voulez pas profiter des opérations d'indexation qu'offre elasticsearch. Si vous souhaitez conserver certaines données d'index, elasticsearch est utile au cas où vous feriez confiance à votre schéma et que vous ne feriez que beaucoup plus de lectures que d'écritures.

Mon cas était l'analyse des données. J'ai donc conservé beaucoup de mes Latices dans la recherche élastique car plus tard, je voulais beaucoup parcourir les données pour voir quelle devrait être ma prochaine étape. J'aurais utilisé casandra si je voulais avoir beaucoup de changements dans le schéma des données dans mes pilelines analytiques.

Il existe également de nombreux outils de représentation intéressants comme kibana que vous pouvez utiliser pour présenter vos données avec de bons graphiques. Peut-être que je suis paresseux mais ils sont très beaux et ils m'ont aidé.

M.Rez
la source
4

Le stockage des données dans une combinaison de Cassandra et ElasticSearch vous offre la plupart des fonctionnalités. Il vous permet de rechercher des tables clé-valeur et vous permet également de rechercher des données dans des index.

La combinaison vous offre une grande flexibilité, idéale pour votre application.


la source
4

Elassandra est la solution combinée de Cassandra + Elastic search, Il utilise la recherche Elastic pour indexer les données et Cassandra comme magasin de données, je ne suis pas sûr des performances, mais selon cet article , ses performances sont bonnes.
Si votre application nécessite une fonction de recherche, Elassandra est la meilleure option open source. La recherche DSE est disponible mais elle est chère.

anavaras lamurep
la source
1

Nous avions développé une application dans laquelle nous utilisions Elasticsearch et Cassandra. Des données similaires ont été stockées dans Cassandra et indexées dans Elasticsearch.

L'interface utilisateur de notre application avait des fonctionnalités telles que des recherches, des agrégations, l'exportation de données, etc. Les microservices back-end recevaient continuellement d'énormes données (sur des sujets Kafka) et les stockaient dans Cassandra. Une fois les données stockées dans Cassandra, les services s'assurent que les données sont indexées dans Elasticsearch.

Cassandra agissait en tant que «source de vérité» pour Elasticsearch. Dans les cas où la réindexation de l'indice ES était nécessaire, nous avons interrogé Cassandra et réindexé les données dans ES.

Cette solution nous a aidés, car elle était très facile à mettre à l'échelle et les recherches et les agrégations étaient beaucoup plus rapides.

Sumit A
la source
0
  • Comme elasticsearch est construit sur l'index Lucene et si vous souhaitez stocker l'indexation dans elasticsearch, il fonctionne mieux par rapport à l'indexation dans Cassandra lui-même pour récupérer les données.
  • Si vos exigences ne sont pas liées à la récupération en temps réel, vous pouvez également utiliser elasticsearch comme base de données NoSQL, certains pensent qu'ElasticSearch perd des écritures et que les changements de schéma sont difficiles, mais si votre volume de données n'est pas trop important. Vous pouvez facilement accéder à elasticsearch en tant que moteur de recherche avec la meilleure indexation avec elasticsearch en tant que base de données NoSQL. Il existe plusieurs moyens de l'empêcher. J'ai travaillé sur les changements de schéma dans elasticsearch, si votre structure de données est cohérente, cela créera des problèmes.
  • Être un partisan d'ElasticSearch ou de SOlr. J'ai travaillé à la fois sur les moteurs de recherche et j'ai constaté que les deux moteurs de recherche peuvent être utilisés couramment si vous les configurez correctement.
  • Seuls les inconvénients que je peux y penser, si vous ciblez le résultat en temps réel et que vous ne pouvez pas comprendre un délai de quelques millisecondes dans votre réponse. Ensuite, il est préférable de prendre l'aide d'autres bases de données NoSQL comme cassandra ou couchbase.
  • Cassandra avec Solr, fonctionne mieux que Cassandra avec ElasticSearch.
vishal yadav
la source
0

Cassandra est excellente pour récupérer des données par ID . Je ne sais pas grand-chose sur les performances des index secondaires, mais je doute que ce soit aussi rapide qu'Elasticsearch. Elasticsearch gagne certainement en termes de fonctionnalité de recherche de texte intégral ( analyse de texte , score de pertinence , etc.).

Cassandra gagne également sur les performances des mises à jour . Elasticsearch prend en charge les mises à jour, mais une mise à jour est en réalité une réindexation + suppression logicielle dans une opération atomique.

Cassandra a un très bon modèle de réplication (si vous avez besoin d'une sécurité supplémentaire). Elasticsearch est OK aussi, je ne suis pas dans le camp qui dit que ES est particulièrement peu fiable (il a parfois des problèmes, comme tous les logiciels).

Elasticsearch propose également des agrégations pour des analyses en temps réel. Et comme les recherches sont si rapides, l' analyse d'un sous-ensemble de données sera également rapide .

Si vos exigences sont suffisamment satisfaites par l'un d'entre eux (comme ici, il semble que ES fonctionnerait bien), je n'en utiliserais qu'un. Si vous avez des exigences des deux mondes, vous pouvez soit:

  • utilisez-en un et contourner les inconvénients. Par exemple, vous pourrez peut-être gérer de nombreuses mises à jour avec Elasticsearch, mais avec plus de fragments et plus de matériel
  • utilisez les deux et assurez-vous qu'ils sont synchronisés
Radu Gheorghe
la source