【发布时间】:2021-03-14 06:34:01
【问题描述】:
我有一个结构如下的表:
CREATE TABLE kaefko.se_vi_f55dfeebae00d2b3 (
value text PRIMARY KEY,
id text,
popularity bigint);
使用如下所示的数据:
value | id | popularity
--------+------------------+------------
rally | 4eff16cb91f96cd6 | 2
reddit | 11aa39686ed66ba5 | 3
red | 552d7e95af481415 | 1
really | 756bfa499965863c | 1
right | c5850c6b08f7966b | 1
redis | 7f1d251f399442d7 | 1
我已经创建了一个物化视图,该视图应该按照从最大到最小的受欢迎程度对这些值进行排序:
CREATE MATERIALIZED VIEW kaefko.se_vi_f55dfeebae00d2b3_by_popularity AS
SELECT *
FROM kaefko.se_vi_f55dfeebae00d2b3
WHERE popularity IS NOT null
PRIMARY KEY (value, popularity)
WITH CLUSTERING ORDER BY (popularity DESC);
但是物化视图中的数据是这样的:
value | popularity | id
--------+------------+------------------
rally | 2 | 4eff16cb91f96cd6
reddit | 3 | 11aa39686ed66ba5
really | 1 | 756bfa499965863c
right | 1 | c5850c6b08f7966b
redis | 1 | 7f1d251f399442d7
如您所见,有两个主要问题:
- 数据未按照具体化视图中的定义进行排序
- 物化视图中只有一部分数据
我在 Cassandra 方面的经验不是很丰富,而且我已经花了几个小时试图找出导致这种情况发生的原因,但无济于事。有人可以帮我吗?谢谢
__
我使用的是 ScyllaDB 4.1.9-0,cqlsh 显示如下:
[cqlsh 5.0.1 | Cassandra 3.0.8 | CQL spec 3.3.1 | Native protocol v4]
【问题讨论】:
-
在 Cassandra 中,数据仅在分区内排序,而不是全局排序
-
@AlexOtt 这是什么意思?那么如何创建有序表呢?
-
这就是 Cassandra 的工作方式——没有全局排序。如果你需要全局排序,你需要使用 Spark,或者类似的东西......或者其他数据库
-
我尝试设置 Spark,但老实说我没有成功。对于像我这样的前端人员来说,这太复杂了。
-
如果您需要在整个数据集上按 artitrary 列进行排序,那么我建议您查看其他数据库,或者类似 Elasticserarch 的数据库
标签: cassandra cassandra-3.0 scylla