【问题标题】:Apache Cassandra ordering bv clustering keys?Apache Cassandra 订购 bv 集群键?
【发布时间】:2021-09-02 04:02:00
【问题描述】:

我有一张这样设置的桌子:

...
    PRIMARY KEY (id, "requestId", "createdAt")
) WITH CLUSTERING ORDER BY ("requestId" ASC, "createdAt" DESC)

所以当我像这样运行 CQL 时:

SELECT * from "Table" WHERE "requestId"='someId'

我应该得到按 createdAt DESC 排序的结果吗?这正是我所期望的,但我是 Cassandra 的新手,不确定它是如何工作的。

我想要实现的是检索属于某个 requestId 的所有记录,按创建日期 DESC 排序。

我该怎么做?

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

    在 Cassandra 中,数据仅在分区内排序,而不是全局排序。如果你做SELECT * from "Table" WHERE id = .... AND "requestId"='someId',那么你将通过createdAt按降序获取数据

    您的原始查询无法立即使用,因为您没有提供分区键。如果你把“ALLOW FILTERING”(坏主意),那么你会得到数据回来,但在每个分区内分别由createdAt排序。

    【讨论】:

    • 感谢您回复我。我不明白: SELECT * from "Table" WHERE id = .... AND "requestId"='someId' 会以正确的顺序返回内容。但这只是一个记录,对吧?我的意思是每个 id 都是唯一的。那么如何提供分区键呢?
    • @user2297996 那么听起来应该使用requestId 作为分区键来重建表。当然假设每个requestId 没有太多createdAts。 100% 唯一的分区键分布良好,但不允许您利用 Cassandra 的宽行。
    • Aaron 是正确的——在 Cassandra 中,表是围绕查询建模的。我建议阅读这本免费书籍的第一章,以了解如何为 Cassandra 建模数据:datastax.com/resources/ebook/oreilly-cassandra-definitive-guide
    猜你喜欢
    • 2013-09-09
    • 2015-08-09
    • 2019-09-07
    • 2016-06-14
    • 2017-11-07
    • 2016-03-01
    • 2021-11-01
    • 2018-12-03
    • 2018-12-13
    相关资源
    最近更新 更多