我使用Elasticsearch已经有一段时间了,使用Cassandra的经验很少。
现在,我有一个项目,我们想使用spark来处理数据,但我需要决定我们是否应该使用Cassandra或Elasticsearch作为数据存储来加载我的数据。
在连接器方面,Cassandra和Elasticsearch现在都有一个很好的连接器来加载数据,所以这将不再是决定因素。
决定胜负的因素将是我在Spark中加载数据的速度有多快。我的数据差不多有20tb。
我知道我可以使用JMeter运行一些测试并查看自己的结果,但我想询问熟悉这两个系统的任何人。
谢谢
简短准确的答案是"视情况而定",主要取决于集群大小=)
我不会选择Elastisearch作为数据的主要来源,因为它擅长搜索。搜索是一项非常具体的任务,它需要一种非常具体的方法,在本例中使用倒排索引来存储实际数据。每个字段基本上都被放入单独的索引中,因此索引非常紧凑。虽然可以存储到索引完整的对象中,但是这样的索引很难从压缩中获得任何好处。这需要更多的磁盘空间来存储索引和更多的cpu时钟,旋转磁盘来处理它们。
另一方面,Cassandra非常擅长存储和检索数据。
没有更多或更少的特定要求,我想说Cassandra擅长做主存储(并提供相当简单的搜索场景),ES擅长搜索。
我将反驳Evgenii关于ES只擅长搜索的回答。是的,它超越了文本搜索,但这并不意味着它不能做数据。
你实际上可以把它当作"Mongo"风格的文档,并对其运行"过滤器"查询以快速获取结果。然而现在的问题是:你需要多快的读/写速度,你需要发行版吗?ES缺乏的是分布。是的,ES可以进行分片,但它在多区域分布和数据复制的可靠性方面存在问题。
如果你需要数据的灵活性/可靠性,我会选择Cassanda。此外,由于您正在处理TB - Cassandra也可能是一个赢家,因为它适合极端容量。
如果你需要一个更容易的时间来运行搜索(不限于文本搜索,例如:geo space你也可以这样做),那么ES可能是一个更好的选择。(注意,对于您正在做的剪切量,您将需要进行切分以分配负载)。