Cassandra 卡桑德拉计数器用法

Cassandra 卡桑德拉计数器用法,cassandra,counter,data-modeling,Cassandra,Counter,Data Modeling,我发现在应用程序的数据建模中存在一些困难,可能涉及计数器的使用 该应用程序基本上是一个消息传递应用程序。消息为自由用户绑定,因此最初计划使用计数器列跟踪总计数 我发现批处理(无论是否记录)不能同时包含标准表和计数器表上的操作。如果无法同时批处理要执行的操作和计数器更新,如何确保正确性?如果列上基本上没有竞争条件,那么计数器类型真的需要吗 我的第二个想法是使用一个标准的int列来只在批内使用。这是一个可行的选择吗 谢谢如果您可以绝对保证每个用户每次只生成一个更新,那么您可以依靠纯ints来执行此任

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

该应用程序基本上是一个消息传递应用程序。消息为自由用户绑定,因此最初计划使用计数器列跟踪总计数

我发现批处理(无论是否记录)不能同时包含标准表和计数器表上的操作。如果无法同时批处理要执行的操作和计数器更新,如何确保正确性?如果列上基本上没有竞争条件,那么计数器类型真的需要吗

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


谢谢

如果您可以绝对保证每个用户每次只生成一个
更新
,那么您可以依靠纯
int
s来执行此任务

然而,问题是您需要执行先读后写反模式。您也可以解决这个问题,例如通过缓存
int
s跳过读取部分,然后执行内存中的更新,然后执行只写操作。通过将系统与缓存服务器(例如Redis)耦合,这是可行的

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


另一种选择(如果您将每个用户发送的消息存储在某个地方,并且不想给系统增加复杂性),可以使用
SELECT count…
类型查询直接对它们进行计数,即使这在Cassandra世界很快会变得非常低效。

谢谢,我已经阅读了这个问题。它指出需要计数器类型来避免竞争条件。在我的情况下,我不认为我会有,因为专栏是专门为每个用户。如果是这种情况,可以使用标准的int列吗?您能保证(例如)同一用户不会同时使用两个设备吗?我想我将使用缓存解决方案来解决初始计数器读取部分,然后进行一批计数更新和消息本身,以确保一致性。尽管如此,正如你所说,这一切都取决于我们设法避免计数器的竞争条件这一事实。我没有看到使用计数器类型的不同解决方案,我错了吗?非常感谢。