【问题标题】:Cassandra: Getting last 10 users visitedCassandra:让最后 10 个用户访问
【发布时间】:2012-02-17 08:59:00
【问题描述】:

我们正在尝试通过将会话 ID 和 URL 存储在 Cassandra 中来跟踪点击我们网站的链接。我们希望在页面上显示最后 10 位访问者(会话 ID),并按时间顺序列出他们在我们页面中的旅程。

“模式”如下:

会话 ID 是行键 每行包含以时间戳为名称和 url 为值的列(我们这样做是因为可以多次单击 url,因此键本身不会是唯一的)

我们有另一个列族,其中包含行键“lastseen”。列名是时间戳,值是 sessionId。我们这样做是因为我们需要会话 id 出现在我们网站上的时间顺序。

因此,当用户单击链接时,我们会将时间戳/会话 ID 键值对存储在 lastseen 行中。在用户会话 id 的行中还有另一个带有时间戳/url 的条目。

我们的想法是,我们现在查询 lastseen 行中的最后 10 个条目,然后在相应的 session id 行中查找该 session id 点击的 url。但是,我们在最后看到的行中有重复的值,即同一用户完成最后 10 次点击会使相同的会话 id 返回 10 次。

我们尝试了一个不同的架构,其中会话 id 行有一个上次看到的列名,在其上放置一个索引并执行一个小于当前时间的索引表达式,但是 cassandra 目前似乎不支持这一点。

关于如何有效解决这个问题的任何想法?我们可以检查插入和类似事物的重复项,但这看起来很难看,并且不确定它在高负载下的表现如何。如果存在重复,我们可以检索 100 行并手动过滤,但这也很难看。

我们是否遗漏了一些明显的东西?

汤姆

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    我认为最直接的解决方案是您已经想到的——拥有一个“最近的活动”CF,其列名是活动时间,值是会话 ID,然后向后扫描,直到得到 10独特的价值。

    如果您希望 Cassandra 进行唯一化,那么您必须改为在客户端进行排序,这对于大量用户而言无法扩展。

    【讨论】:

    • 感谢您的回复。我很担心:/如果想报告过去 24 小时内看到的用户数量(固定时间范围,我在插入时知道)和运行时间定义的参数(即管理员定义的时间范围),这是否相同。
    猜你喜欢
    • 2020-11-18
    • 2011-02-24
    • 2014-10-01
    • 1970-01-01
    • 2012-11-21
    • 2014-04-17
    • 2022-12-11
    • 2022-07-06
    • 1970-01-01
    相关资源
    最近更新 更多