Cassandra用户定义函数的优缺点

Cassandra用户定义函数的优缺点,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,我使用ApacheCassandra来存储大部分时间序列数据。我正在对数据进行分组,并根据某些条件对其进行聚合/计数。目前,我正在Java 8应用程序中执行此操作,但随着Cassandra 3.0的发布和用户定义函数的发布,我一直在问自己,将分组和聚合/计数逻辑提取到Cassandra是否是一个好主意。据我所知,这种功能类似于SQL中的存储过程 我关心的是,这是否会影响计算性能和数据库的整体性能。我也不确定它是否还有其他问题,以及这个新特性是否类似于Cassandra中的二级索引——你可以这样做

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

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


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

您可以将它与使用
count()
avg()
类型的聚合进行比较。通过让协调器只发送结果,它们可以为您节省大量的网络流量和对象创建/GC,但这很容易让协调器忘乎所以并做很多工作。这些额外的工作会减少正常的C*职责,并且可能会增加地面军事系统,也可能减少地面军事系统

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

如果您确实需要这样做并且经常需要大量数据,那么您可能需要创建专用的代理协调器(-Djoin_ring=false),以承受负载的冲击,而不影响正常的C*读/写。在这一点上,为它或其他东西创建专用的工作负载DC同样容易(您的键空间为RF=0,并使用dcawarerroundrobinpolicy将应用程序设置为该DC的一部分)。这也是使用Spark可能是正确的做法