我们正试图通过在Cassandra中存储会话ID和网址来跟踪我们网站上点击的链接。我们希望在页面上显示最后10位访问者(会话ID)并按时间顺序列出他们在我们页面中的旅程。
“架构”如下:
会话ID是行键 每行包含时间戳为名称的列,而url为值(我们这样做是因为可以多次点击URL,因此密钥本身不是唯一的)
我们有另一个列系列,其中包含行键“lastseen”。列名称是时间戳,值是sessionId。我们这样做是因为我们需要会话ID的时间顺序,因为它们出现在我们的网站上。
因此,当用户单击链接时,我们将时间戳/ sessionid键值对存储在lastseen行中。并且用户会话ID的行中有时间戳/ url的另一个条目。
我们的想法是,我们现在查询lastseen行中的最后10个条目,然后在相应的会话ID行中查找由该会话ID单击的URL。但是,我们在上次看到的行中有重复值,即完成最后10次点击的同一用户会将相同的会话ID返回10次。
我们尝试了一个不同的模式,其中会话ID行具有最后一个看到的列名,在其上放置索引并执行少于当前时间索引表达式,但cassandra在它看来不支持这个。
有关如何有效解决这个问题的想法吗?我们可以检查插入和类似的东西上的重复,但这看起来很难看,并且不确定它在高负载下的行为。如果存在重复项,我们可以检索100行并手动过滤,但这也很难看。
我们缺少哪些明显的东西?
汤姆
答案 0 :(得分:3)
我认为最直接的解决方案就是你已经想到的 - 有一个“最近的活动”CF,其列名是活动时间,值是会话ID,然后向后扫描直到你得到10独特的价值观。
如果你想要Cassandra进行统一,那么你必须进行客户端排序,这对于大量用户来说不会扩展。