当前位置: 首页 > 知识库问答 >
问题:

通过非聚类键对结果进行排序

郭曾笑
2023-03-14

我们使用Cassandra的用例是显示一篇博客文章的前10名最近访问者。以下是Cassandra表定义

CREATE TABLE blogs_by_visitor (
             blogposturl text,
             visitor text,
             visited_ts timestamp,
             PRIMARY KEY (blogposturl, visitor)
           );

现在,为了显示给定博客帖子的前10名最近访问者,需要在时间戳desc上有一个明确的“order by”子句。因为visted_ts不是Cassandra中集群列的一部分,所以我们无法完成这项工作。visited_ts不是集群列的一部分的原因是为了避免记录重复(读为重复)访问者。主键的设计方式是为回头客上传最新的时间戳。

Select visitor from blog_table
where 
blogposturl = ?
and rownum <= 10
order by timestamp desc

我们有什么想法可以用不同的方式来模拟这个表吗?

实际的表有其他列,为了简单起见,这里对其进行了简化

共有1个答案

乜飞航
2023-03-14

这些类型的工作是由Apache Spark或Hadoop完成的。一个调度作业,它根据每个url的时间戳计算唯一的访问者顺序,并将结果存储到Cassandra中。

也可以在blogs_by_visitor之上创建一个物化视图。这个表将确保唯一的访问者,物化视图将根据visited_ts时间戳显示结果。

让我们创建物化视图:

CREATE MATERIALIZED VIEW unique_visitor AS
    SELECT *
    FROM blogs_by_visitor
    WHERE blogposturl IS NOT NULL AND visitor IS NOT NULL AND visited_ts IS NOT NULL
    PRIMARY KEY (blogposturl, visited_ts, visitor)
    WITH CLUSTERING ORDER BY (visited_ts DESC, visitor ASC);
SELECT * FROM unique_visitor WHERE blogposturl = ? LIMIT 10;
CREATE TABLE blogs_by_visitor (
     blogposturl text,
     year int,
     month int,
     day int,
     visitor text,
     visited_ts timestamp,
     PRIMARY KEY ((blogposturl, year, month, day), visitor)
);

现在,在单个分区中只有少量数据,因此可以在客户端根据该分区中的visited_ts对所有访问者进行排序。如果你认为一天的访问者数量可能很大,那么在分区键上也添加一个小时。

 类似资料:
  • 问题内容: 我有一个使用IN子句的存储过程。在我的ASP.NET应用程序中,我有一个多行文本框,可为存储过程提供值。我希望能够按在文本框中输入的值进行排序。我发现如何在mySQL中轻松地执行此操作(使用FIELD函数),而不是与SQL Server等效的方法。 所以我的查询看起来像: 因此,我将从应用程序中传递值,例如‘113113’,‘112112’,‘114114’(以任意顺序)。我想按该列表

  • 数据 我在ES索引中保留了对象。其中每个字段都有一个myKey和myName字符串字段(持久化为关键字字段)。不能保证同一个myKey的myName总是相同的。E、 g.以下两个条目共享相同的myKey,但具有不同的myName值: 挑战 我需要选择并返回所有不同的myKey值,查找并显示最可能的myName(myKey上下文中出现的最多),并按myName对生成的Bucket进行排序。 到目前为

  • 问题内容: 根据上述问题,我用Val给定的脚本进行的elasticsearch查询在最后一周之前都可以正常工作。我们已经升级了ES版本,但突然停止了工作。 现在突然我的ES停止使用脚本中包含“ as Integer”的代码。任何人都可以检查和帮助。 我尝试了给定的查询,现在它抛出以下异常。 我作为参数传递的查询是: 由于我的索引器在该字段中包含1、2、4、6、14个值。但是执行完此查询后,我只得到

  • 问题内容: 对于每一行,我想将每个描述的相关性与未定义数量的关键字进行比较。我知道“ THEN +1”不起作用,但是我想得出这个结果(…为每个存在的关键字增加一个数字(每行从0开始) 因此,如果描述包含“ keyword1”和“ keyword2”,则此行的relevance_description应该为2。 问题答案: 您可以使用单独的子句执行此操作,然后将它们添加在一起: 在某些数据库中,布尔

  • 问题内容: 我试图通过多个键对多维数组进行排序,但我不知道从哪里开始。我看了uasort,但不确定如何根据需要编写函数。 我需要按状态排序,然后按event_type排序,然后按日期排序。 我的数组如下所示: 问题答案: 你需要 从PHP 5.5.0开始: 就是现在:

  • 问题内容: 我在使用Elasticsearch查询时遇到问题。我希望能够对结果进行排序,但是elasticsearch忽略了排序标签。这是我的查询: 但是,当我删除查询部分并仅发送排序标签时,它就可以工作。谁能指出正确的方法? 我还尝试了以下查询,这是我所拥有的完整查询: 设定值 对应 提前致谢! 问题答案: 文档中的 “标题” 字段是一个 分析的 字符串字段,也是一个多值字段,这意味着Elast