3

我使用 Apache Cassandra 主要存储时间序列数据。我正在对数据进行分组并根据某些条件对其进行汇总/计数。目前我在 Java 8 应用程序中执行此操作,但随着 Cassandra 3.0 和用户定义函数的发布,我一直在问自己,将分组和聚合/计数逻辑提取到 Cassandra 是否是个好主意。据我了解,此功能类似于 SQL 中的存储过程。

我担心这是否会影响计算性能和数据库的整体性能。我也不确定它是否还有其他问题,以及这个新功能是否类似于 Cassandra 中的二级索引 - 你可以这样做,但根本不推荐。

你在 Cassandra 中使用过用户定义的函数吗?你对表现有什么看法吗?这个新功能的优点和缺点是什么?它适用于我的用例吗?

4

1 回答 1

5

您可以将其与使用count()avg()类型的聚合进行比较。他们可以通过让协调器只发送结果来为您节省大量的网络流量和对象创建/GC,但它很容易被忘却并让协调器做很多工作。这种额外的工作消除了正常的 C* 职责,并且可能增加 GC 和减少它们。

如果您在一个分区中聚合 100 行,它可能很好,如果您聚合 10000,如果它非常罕见,它可能不是世界末日。如果您每秒调用一次,尽管它是一个问题。如果您的聚合超过 1000,我会非常小心。

如果您绝对需要这样做并且经常需要处理大量数据,您可能需要创建专用的代理协调器 (-Djoin_ring=false) 以在不影响正常 C* 读/写的情况下首当其冲。那时,为它或其他东西创建专用的工作负载 DC 一样容易(对于您的密钥空间,RF=0,并使用 DCAwareRoundRobinPolicy 将应用程序设置为该 DC 的一部分)。这也是使用 Spark 可能是正确的做法的地方。

于 2016-12-06T15:27:28.697 回答