Cassandra 中分区键上的重复条目

问题描述 投票:0回答:3

我有与 Cassandra 分区相关的问题。我有一张桌子

CREATE TABLE books (
   isbn text,
   title text,
   author text,
   publisher text,
   category text,
   timestamp text,
   PRIMARY KEY (timestamp)
);

我想根据时间戳进行分区,我的时间戳是以分钟为单位的日期时间。因此,在某些情况下,这个时间戳会重复。

如果我正确理解 Cassandra,当插入相同的时间戳条目时,它将执行的操作是更新具有该时间戳的条目。

这不是我想要的。我想要时间戳作为我的分区,但我也想要重复的时间戳条目。

如果不能输入重复的条目,这是否与整个基于主键的分区相矛盾。

我是 Cassandra 新手,所以我可能是错的。

database-design cassandra nosql
3个回答
2
投票

Cassandra 中的分区键必须是全局唯一的,因为它们标识集群中唯一的分区(记录)。

在 Cassandra 中,当您插入具有相同分区键的新记录时,它会导致“upsert”,这意味着分区会被新值覆盖。

顺便说一句,为你的桌子使用人造钥匙是没有意义的。 ISBN 是普遍唯一的,因此您应该使用它来对您的

books
表进行分区。

如果您想在表中保留多个版本的书籍,我建议您对表进行相应的建模。例如:

CREATE TABLE books_by_isbn (
   isbn text,
   version timestamp,
   title text,
   author text,
   publisher text,
   category text,
   PRIMARY KEY (isbn, version)
)

在此表中,每本书都由其 ISBN 标识,每个分区内有多行可通过

version
列标识。干杯!


0
投票

当您拥有集群键和分区键时,可能会发生这种情况。

示例如下:

app_name
env
是分区键,对于以下 2 行相同,但仍然具有不同的集群键 (
log_datetime
),它允许新条目。

表结构:


0
投票
CREATE TABLE books (
   isbn text,
   title text,
   author text,
   publisher text,
   category text,
   timestamp text,
   entry_id UUID,
   PRIMARY KEY (timestamp, entry_id)
);
© www.soinside.com 2019 - 2024. All rights reserved.