我正在学习NoSQL,并为我的客户的一个需求寻找不同的选择。在提出这个问题之前,我已经浏览了各种资源(一个对NoSQL知之甚少的人)
- 我需要以更快的速度存储数据和读取数据。
- 完全故障安全且易于扩展。
- 能够搜索数据以进行分析。
我最终列出了一个简短的名单:from_date to to_date
我知道的是Cassandra对我来说是一个完美的NoSQL存储解决方案,因为我可以使用索引写入数据和读取数据。它失败或可能失败的地方是在分析上。在未来,如果我想从from_date to to_date
获取数据,或更多的方式来获取数据进行分析,如果我没有正确设计数据模型或保持长远的眼光,这可能是相当困难的,在不断变化的世界。
虽然Elastic Search
最擅长索引(由Lucene支持),并且可以通过抛出一些随机文本来随机搜索数据。但即使我想检索数据from_date to to_date
,它也能同样工作吗(我希望它可能是)。但真正的问题是,它是一个搜索引擎,还是像Cassandra一样完美的NoSQL数据存储?如果是,为什么我们还需要Cassandra?
如果这两个是在不同的世界,请解释一下!我们如何结合他们,以获得一个更有效的解决方案?
8条答案
按热度按时间krcsximq1#
我们的一个应用程序使用了同时存储在Cassandra和ElasticSearch中的数据。我们使用Cassandra在任何可能的时候访问这些记录,并将数据复制到查询表中,以满足特定应用程序端的请求。对于比我们的查询表所能允许的更自由的搜索,ElasticSearch很好地执行了该功能。
我们也问过同样的问题......“为什么我们不直接从ElastsicSearch获取所有信息呢?”
答案是,ElasticSearch被设计成一个搜索引擎,而不是一个持久的数据存储。有时ElasticSearch会丢失写操作。在ElasticSearch中进行模式更改时,很难不删除所有内容并重新加载。为此,我编写了一些作业,旨在使ElasticSearch与Cassandra集群保持同步。还有一个fairly recent discussion on Quora about this topic,也得到了类似的结果。
也就是说,ElasticSearch作为搜索引擎非常出色。Cassandra作为可伸缩的高性能数据存储也非常出色。但是,查询数据和搜索数据是不同的。有时候我们需要两者之一,而两者的结合对我们的应用程序来说很好。它可能(也可能不)对你的应用程序来说很好。
至于分析,我已经在使用Cassandra Spark连接器方面取得了一些成功,以服务于更复杂的OLAP查询。希望这能有所帮助。
编辑20200421
对于类似的问题,我写了一个更新的答案:
ElasticSearch vs. ElasticSearch+Cassandra
a8jjtwal2#
Cassandra + Lucene是一个很好的选择。对于这个问题有不同的倡议,例如:
5lhxktic3#
在解决了这个问题之后,我意识到当你想确保你的数据模式保持可靠的写操作,而不想利用elasticsearch提供的索引操作时,像casandra这样的NoSQL数据库是很好的。如果你想保留一些索引数据,那么elasticsearch是很好的,如果你信任你的模式,只想做更多的读操作而不是写操作。
我的案例是数据分析。所以我在ElasticSearch中保留了很多Latices,因为后来我想遍历很多数据,看看我的下一步应该是什么。如果我想在我的分析管线中的数据模式中有很多变化,我会使用casandra。
也有很多很好的表示工具,如kibana,你可以用它来表示你的数据与一些良好的图形。也许我是懒惰的,但他们是非常好看,他们帮助了我。
eoigrqb64#
将数据存储在Cassandra和ElasticSearch的组合中可以提供最多的功能。它允许您查找键-值表,还允许您在索引中搜索数据。
这种组合为您提供了很大的灵活性,非常适合您的应用。
x8diyxa75#
Elassandra是Cassandra +ElasticSearch的组合解决方案,它使用ElasticSearch来索引数据,并使用Cassandra作为数据存储,我不确定性能如何,但根据这个article,它的性能很好。
如果你的应用程序需要搜索功能,那么Elassandra是最好的开源选择。DSE搜索是可用的,但它很昂贵。
htrmnn0y6#
我们开发了一个应用程序,使用了Elasticsearch和Cassandra,类似的数据被存储在Cassandra中,并被编入Elasticsearch的索引中。
我们的应用程序的用户界面具有搜索、聚合、数据导出等功能。后端微服务不断获取大量数据(关于Kafka主题)并将其存储到Cassandra中。一旦数据存储到Cassandra中,服务将确保数据被索引到Elasticsearch中。
Cassandra是Elasticsearch的“真理之源”。在需要重新索引ES索引的情况下,我们查询Cassandra,并将数据重新索引到ES中。
这个解决方案帮助了我们,因为它非常容易扩展,搜索和聚合速度也快得多。
rnmwe5a27#
Cassandra非常擅长按ID检索数据。我对二级索引的性能了解不多,但我怀疑它是否能像Elasticsearch一样快。当然,Elasticsearch在全文搜索功能方面胜出(text analysis、relevancy scoring等)。
Cassandra在更新性能方面也是如此。Elasticsearch支持更新,但更新实际上是原子操作中的重索引+软删除。
Cassandra有一个非常好的复制模型(如果你需要额外的故障安全)。Elasticsearch也不错,我不认为ES特别不可靠(它有时会有问题,就像所有的软件一样)。
Elasticsearch还提供聚合功能,用于实时分析。由于搜索速度非常快,对数据子集的分析也会非常快。
如果其中一个能够很好地满足您的需求(就像这里ES看起来会很好地工作),我就只使用其中一个。如果您同时有两个世界的需求,那么您可以选择:
epggiuax8#