卡桑德拉计数器使用

时间:2017-06-06 15:16:55

标签: cassandra counter data-modeling

我发现应用程序的数据建模存在一些困难,可能涉及使用计数器。

该应用程序基本上是一个消息应用程序。消息受限于免费用户,因此最初计划使用计数器列来跟踪总计数。

我发现批次(已记录或未记录)不能包含标准表和计数表上的操作。如果我不能批处理我正在尝试执行的操作并且计数器一起更新,我该如何确保正确性?如果列上基本没有竞争条件,是否与每个用户相关联,是否真的需要计数器类型?

我的第二个想法是使用标准的int列只在批量内部使用。这是一个可行的选择吗?

谢谢

1 个答案:

答案 0 :(得分:0)

如果您绝对可以保证每个用户每次只生成一个update,那么您可以依靠普通int来执行该作业。

但问题是您需要执行先读后读反模式。您也可以解决此问题,例如,通过缓存int并执行内存更新,然后仅写入来跳过读取部分。通过将系统与缓存服务器(例如Redis)耦合,这是可行的。

考虑到这一点,您仍然需要在某些时候读取这些计数器,因为如果免费用户可以发送的消息数量绑定到某个值,那么您需要在登录/尝试发送时执行检查一条新消息/查看仪表板/等并阻止他们的行动。

另一个选项(如果您将每个用户发送的消息存储在某处并且不希望为系统增加复杂性)可能是使用SELECT COUNT...类型查询直接计算它们,即使这可能会变为在卡桑德拉世界很快就会效率低下。