我有以下数据结构:
{
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唯一标识任何一行,所以我应该在第一个结束符")"之后放置任何内容吗?
您的示例模式将完全符合您的要求,并且运行良好。不需要向主键添加任何其他内容。
(如果在主键中添加更多列,它们将作为集群列,控制单个分区磁盘上行的顺序。)