我目前难以理解如何在Cassandra中建模。
我想要的是这样的:
create table counts(
user varchar,
last_event timestamp,
event_count counter,
primary key ((user))
);
这里的目标是以给定用户可以有效检索的方式存储这两个数据(event_count和last_event)。
此外,可能有多个线程同时写入此数据,因此处理该情况的计数器类型非常有用。
但是,我知道在同一个表中组合计数器和时间戳是不可能的。还有其他一些替代方法可以对这些可行的数据进行建模吗?
我意识到我可以将所有事件存储为自己的行,但我们需要能够快速有效地检索给定用户的last_event和event_count。
为清晰起见编辑:我有一个与用户关联的时间戳流。我希望存储每个用户的时间戳总数和最新时间戳,我想优化快速查找特定用户。
答案 0 :(得分:2)
只需制作主键(user,timestamp)
即可。这将为每个用户创建一个单独的分区,分区中的每个计数器将按最后一个事件的时间戳排序。
create table counts(
user varchar,
last_event timestamp,
event_count counter,
primary key (user, last_event) );
您的分区看起来像
[username -> [time1, counter] , [time2, counter] .... ]
编辑:
更新后的问题有几种解决方案。我认为最简单的方法是使用两个表。
create table lastEvent (
user varchar,
event timeuuid, // Time uuid to avoid collosions
event_data, // Anything else you want to retreive with the last event
PRIMARY KEY (user,event)
)
此表负责按时间顺序跟踪事件。通过降序时间戳排序时从此表中选择将允许我们检索最近的事件。我们将这与我们保存在下表中的状态信息分开
create table eventsPerUser (
user varchar,
eventcount counter,
PRIMARY KE (user)
)
此事件只是用户之间的查找以及所述用户发生了多少事件。
您可以在应用程序中同时更新这两个表。