小编Sha*_*aun的帖子

Cassandra:列出最近修改的10条记录

我在尝试对数据进行建模时遇到了麻烦,以至于我可以有效地查询Cassandra最近修改的最后10个(实际上是任何数量)记录.每个记录都有一个last_modified_date列,由应用程序在插入/更新记录时设置.

我已从此示例代码中排除了数据列.

主数据表(每条记录只包含一行):

CREATE TABLE record (
    record_id int,
    last_modified_by text,
    last_modified_date timestamp,
    PRIMARY KEY (record_id)
);
Run Code Online (Sandbox Code Playgroud)

解决方案1(失败)

我试图创建一个单独的表,它使用了一个聚类键顺序.

表(每条记录一行;仅插入最后修改日期):

CREATE TABLE record_by_last_modified_index (
    record_id int,
    last_modified_by text,
    last_modified_date timestamp,
    PRIMARY KEY (record_id, last_modified_date)
) WITH CLUSTERING ORDER BY (last_modified_date DESC);
Run Code Online (Sandbox Code Playgroud)

查询:

SELECT * FROM record_by_last_modified_index LIMIT 10
Run Code Online (Sandbox Code Playgroud)

此解决方案不起作用,因为群集顺序仅适用于具有相同分区键的记录的排序.由于每行具有不同的分区键(record_id),因此查询结果不包括预期记录.

解决方案2(效率低下)

我尝试的另一个解决方案是简单地查询Cassandra的所有record_id和last_modified_date值,对它们进行排序并选择我的应用程序中的前10条记录.这显然效率低下,并且不能很好地扩展.

解决方案3

我考虑的最后一个解决方案是对所有记录使用相同的分区键,并使用聚类顺序确保记录正确排序.该解决方案的问题在于,数据将无法在节点之间正确分区,因为所有记录都具有相同的分区键.这对我来说似乎不是一件好事.

cql cassandra

11
推荐指数
1
解决办法
5973
查看次数

标签 统计

cassandra ×1

cql ×1