cassandra - Cassandra 用户定义函数的优缺点

标签 cassandra cassandra-3.0

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

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

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

最佳答案

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

如果你在一个分区中聚合 100 行,那可能没问题;如果你聚合 10000 行,如果这种情况非常罕见,那么可能也不是世界末日。如果你每秒调用一次,那就有问题了。如果你的聚合超过 1000,我会非常小心。

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

关于cassandra - Cassandra 用户定义函数的优缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40978349/

相关文章:

hadoop - Pig 集成Cassandra : simple distributed query takes a few minutes to complete. 这正常吗?

cassandra-3.0 - 首次启动 Cassandra 时出错

cassandra - 是否可以在 Cassandra INSERT 命令中指定 WRITETIME?

nosql - Cassandra:制作数据模型/模式

cassandra - 运行 Spring boot cassandra 项目时出现异常

cassandra - Cassandra 是面向列的数据库还是列式数据库

cassandra - 如何在Cassandra中实现触发器?

cassandra - Apache Cassandra 3.0.0 物化 View : can the view's partition key change due to changes to the underlying table?

Cassandra CLUSTERING ORDER BY 不起作用并显示正确的结果

Python -> Py4j -> Spark -> Cassandra