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_date
ou 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 Search
est 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?
Réponses:
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
la source
Cassandra + Lucene est une excellente option. Il existe différentes initiatives pour ce problème, par exemple:
la source
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é.
la source
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
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.
la source
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.
la source
la source
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:
la source