我已陷入这种困境,我无法选择哪种解决方案对我更好。我有一个非常大的表(几个100GB)和几个较小的(几个GB)。为了在Spark中创建我的数据管道并使用spark ML,我需要加入这些表并执行几个GroupBy(聚合)操作。那些操作对我来说真的很慢,所以我选择了这两个中的一个:
我可以说Parquet分区的工作速度更快,可扩展性更高,而且Cassandra使用的内存开销更少。所以问题是:
如果开发人员推断并了解数据布局及其使用方式,那么使用Parquet会不会更好,因为您可以更好地控制它?我为什么要为Cassandra带来的开销付出代价呢?
答案 0 :(得分:12)
Cassandra也是分析用例的一个很好的解决方案,但另一方面。在建模键空间之前,您必须知道如何读取数据。您也可以使用where和range查询,但是以严格限制的方式。有时你会讨厌这个限制,但这些限制有理由。 Cassandra不像Mysql。在MySQL中,性能不是关键特性。它更多的是灵活性和一致性。 Cassandra是一个高性能的读/写数据库。写作比阅读更好。 Cassandra还具有线性可扩展性。
好的,关于你的用例:Parquet对你来说是更好的选择。这就是原因:
这更适合Parquet的使用案例。 Parquet是ad-hoc分析,过滤分析的解决方案。如果您需要每月运行一次或两次查询,Parquet非常好。如果营销人员想知道一件事并且响应时间不那么重要,Parquet也是一个很好的解决方案。简单而简短:
如果Realtime很重要,请使用Cassandra(我说的是最多30秒的延迟,来自客户的行动,我可以在我的信息中心看到结果)
如果Realtime无关紧要,请使用Parquet
答案 1 :(得分:3)
这取决于你的用例。 Cassandra使用(有限的)伪SQL访问您的数据变得更容易(也在Spark之外)。这使得它非常适合在其上构建在线应用程序(例如,在UI中显示数据)。
如果您必须处理更新,Cassandra也会更容易,这不仅会在您的数据管道中提取新数据(例如日志),而且您还必须关注更新(例如系统必须处理更正数据)
如果您的用例是使用Spark进行分析(并且您不关心上述主题),那么使用Parquet / HDFS应该是可行且相当便宜的 - 正如您所说的那样。使用HDFS,您还可以使用Spark实现数据本地化,如果您正在读取大量数据,则可能具有分析Spark应用程序更快的优势。