我正在构建一个应用程序并使用Cassandra作为我的数据存储区。在应用程序中,我需要跟踪每个用户,每个事件源的事件计数,并需要查询不同时间窗口的计数。例如,一些可能的查询可能是:
低延迟读取是我最关心的问题。根据我的研究,我认为实现这一点的最佳方式是针对源,用户和预定义时间的每个排列的不同计数器表。例如,创建一个count_by_source_and_user表,其中分区键是源和用户ID的组合,然后为用户计数创建count_by_user表。
这看起来很乱。什么是最好的方法,或者你能指出一些在Cassandra中模拟这些类型问题的好例子吗?
答案 0 :(得分:3)
你是对的。如果延迟是您主要关注的问题,那么如果您已经选择了Cassandra,则需要为每个查询创建一个表。这是使用Cassandra的推荐方法:优化读取并且不用担心冗余存储。并且由于在每个表中数据都是根据索引顺序存储的,因此您不能以多种方式索引表(就像使用关系数据库一样)。我希望这有帮助。寻找通常在“Cassandra Day”事件中给出的“数据建模”演示。你可以在“Planet Cassandra”或John Haddad的博客上找到它。