【问题标题】:Row uniqueness in Cassandra table with PRIMARY KEY (hash, created)带有 PRIMARY KEY 的 Cassandra 表中的行唯一性(哈希,已创建)
【发布时间】:2022-08-16 15:25:29
【问题描述】:

我正在尝试创建一个包含 2 列的表,其中一个是唯一的哈希,另一个是创建行时的时间戳。

CREATE TABLE IF NOT EXISTS keyspace.table (
    account varchar,
    hash varchar,
    lt bigint,
    created timestamp,
    PRIMARY KEY (hash, created)
)  WITH CLUSTERING ORDER BY (created DESC);

我希望表格按created 字段排序,但仅在hash 字段上是唯一的。 我相信唯一性目前被检查为两个字段的联合;如果新行的两个字段具有相同的值,则仅将其视为重复行。

  • 那么你的问题是什么?
  • @ErickRamirez 我将如何做我所描述的?它目前正在检查两个字段的重复项,但我希望仅在 hash 字段上检查它。

标签: cassandra cql


【解决方案1】:

你所追求的是不可能的。

给您一些背景知识,每个hash(分区键)唯一标识表中的每个分区。由于您的架构具有复合主键(分区键 + 集群键),因此表中的每个分区都有一行或多行 created)。因此,整个主键标识分区中的每个唯一行。

仅分区键 hash 根本不可能成为行的唯一标识符。如果这是您想要的,您需要使用以下方式对数据进行不同的建模:

CREATE TABLE accounts_by_hash (
    ...
    PRIMARY KEY (hash)
)

最终,您需要回到 Cassandra 中数据建模的主要原则,即您需要根据应用程序查询设计表。干杯!

【讨论】:

    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 2011-02-15
    相关资源
    最近更新 更多