我有与 Cassandra 分区相关的问题。我有一张桌子
CREATE TABLE books (
isbn text,
title text,
author text,
publisher text,
category text,
timestamp text,
PRIMARY KEY (timestamp)
);
我想根据时间戳进行分区,我的时间戳是以分钟为单位的日期时间。因此,在某些情况下,这个时间戳会重复。
如果我正确理解 Cassandra,当插入相同的时间戳条目时,它将执行的操作是更新具有该时间戳的条目。
这不是我想要的。我想要时间戳作为我的分区,但我也想要重复的时间戳条目。
如果不能输入重复的条目,这是否与整个基于主键的分区相矛盾。
我是 Cassandra 新手,所以我可能是错的。
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
列标识。干杯!
CREATE TABLE books (
isbn text,
title text,
author text,
publisher text,
category text,
timestamp text,
entry_id UUID,
PRIMARY KEY (timestamp, entry_id)
);