我现在正在学习 Cassandra,所以我得到了一个没有主键的表。但它有一些索引。
这就是我的疑问,我能否创建一个没有主键的表?
CREATE TABLE subscription (subscriberid varchar,productid varchar,panaccessproductid varchar,operatorproductid varchar,price float,fallback varchar,paymenttype varchar,operatorid varchar,subscriptiontype varchar,expiry timestamp,subscriptionstatus varchar,created timestamp);
没有主键,但subscriberid、productid、operatorid和subscriptiontype都是索引。这种情况可行吗?
根据文档:
主键: 主键用于标识数据存储位置和顺序。主键在表创建时定义,不能更改。 如果必须更改主键,则创建一个新的表模式并将数据写入新表。Cassandra是一种分区行存储,并且主键的组成部分之一, 分区键,标识哪个节点将拥有特定的表行。最低限度,主键必须由分区键组成。复合分区键可以将数据集拆分为 存储在不同分区上的相关数据。复合主键包括分片列,这些列对分区中的数据排序。 在Cassandra中,表的主键定义非常重要。在选择哪些列定义主键之前,仔细地建模表中的数据将如何插入和检索。 分区大小、分区内数据的顺序、分区在群集节点间的分布——所有这些考虑因素决定了选择表的最佳主键。