我正在学习NoSQL,并根据我的客户要求查看不同的选项.在提出这个问题之前我已经经历了各种资源(一个对NoSQL知之甚少的人)
我需要以更快的速度存储数据并读取数据.
完全故障安全且易于扩展.
能够搜索Analytics的数据.
我最后得到了一份简短的清单: Cassandra and Elasticsearch
我所理解的是Cassandra对我来说是一个完美的NoSQL存储解决方案,因为我可以使用索引编写数据和读取数据.它失败或失败的地方是分析.在未来,如果我想从数据中获取数据from_date to to_date
,或者有更多方法来获取分析数据,如果我没有正确设计数据模型或保持长期视野,这在不断变化的世界中可能会非常困难.
虽然Elastic Search
最好是索引(由Lucene支持),并且可以通过抛出一些随机文本随机搜索数据.但即使我想检索数据from_date to to_date
(我希望它可能是),它的工作原理是否相同.但真正的问题是,它是一个搜索引擎,还是完美的NoSQL数据存储,如Cassandra?如果是的话,为什么我们仍然需要Cassandra?
如果这两者都在不同的世界,请解释一下!我们如何将它们结合起来以获得更有效的解决方案?
Cassandra + Lucene是个不错的选择.针对此问题有不同的举措,例如:
Stratio的Cassandra Lucene索引 - 源自Stratio Cassandra,是Apache Cassandra的插件,扩展了其索引功能.(https://github.com/Stratio/cassandra-lucene-index)
Stratio Cassandra,它与Apache Lucene本地集成,非常有趣.(https://github.com/Stratio/stratio-cassandra) - 这个项目已经被Stratio的Cassandra Lucene指数所取代
Tuplejump Calliope,就像Stratio Cassandra一样,但它不太活跃.(https://github.com/tuplejump/stargate-core)
DSE按Datastax搜索.它允许使用Cassandra和Apache Solr,但它是一个专有选项.(http://www.datastax.com/what-we-offer/products-services/datastax-enterprise)
我们的一个应用程序使用存储在Cassandra和ElasticSearch中的数据.我们使用Cassandra随时访问这些记录,并将数据复制到查询表中,以便遵循特定的应用程序端请求.对于比我们的查询表允许的更自由的搜索,ElasticSearch很好地执行该功能.
我们问了同样的问题(我们自己)......"为什么我们不从ElastsicSearch获得所有东西?"
答案是ElasticSearch被设计为搜索引擎,而不是持久数据存储.有时ElasticSearch会丢失写入内容.在ElasticSearch中很难进行模式更改,而不会将所有内容都移除并重新加载.为此,我编写了旨在使ElasticSearch与我们的Cassandra集群保持同步的作业.最近还有一个关于Quora的关于这个主题的讨论,它产生了类似的观点.
话虽如此,ElasticSearch 作为搜索引擎非常有用.和卡桑德拉工程巨大的可扩展性,高性能的数据存储.但查询数据与搜索数据不同.有时候我们需要一个或另一个,两者的组合很适合我们的应用.它可能(或可能不)适合你的.
至于分析,我在使用Cassandra Spark连接器方面取得了一些成功,可以提供更复杂的OLAP查询.希望有所帮助.
在我自己解决这个问题之后,我已经意识到当你想要确保使用可靠的写入操作保留数据模式时,像casandra这样的NoSQL数据库是好的,并且不想利用elasticsearch提供的索引操作.如果你想保留一些索引数据,那么弹性搜索是好的,以防你信任你的方案,只做更多的读取而不是写入.
我的情况是数据分析.所以我在弹性搜索中保留了很多我的Latices,因为后来我想要遍历数据,看看下一步应该是什么.如果我想在我的分析线中对数据的模式进行大量更改,我会使用casandra.
还有许多很好的代表工具,如kibana,你可以使用它来呈现你的数据和一些好的图形.也许我很懒,但他们很好看,他们帮助了我.