Cassandra:分区和行键的最佳用法



我有以下数据结构:

{
   ClientId: string,
   ItemId: string,
   Item : string
}

我想将这些数据存储在Cassandra集群中。我知道有些客户端比其他客户端拥有更多的项,但我希望在集群的每个节点上均匀地存储数据,因为我只有一个按ClientId和ItemId进行的查询。

就我所知,我需要指定分区密钥来均匀地分配数据,所以在CQL中,它看起来像:

CREATE TABLE IF NOT EXISTS mykeyspace.mytable
(
    ClientId text,
    ItemId text,
    Item text,
    PRIMARY KEY((ClientId, Id))
);

我需要指定任何内容作为行键吗?ClientId+ItemId唯一标识任何一行,所以我应该在第一个结束符")"之后放置任何内容吗?

一种方法是对分区键进行散列,然后将该散列用作分区键。

此外,您还可以添加最后一次购买的时间((ClientId,ItemId,lastPurchaseTime))

我需要指定任何内容作为行键吗?ClientId+ItemId唯一标识任何一行,所以我应该在第一个结束符")"之后放置任何内容吗?

您的示例模式将完全符合您的要求,并且运行良好。不需要向主键添加任何其他内容。

(如果在主键中添加更多列,它们将作为集群列,控制单个分区磁盘上行的顺序。)