【发布时间】: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