主键:主键也作为分区键,有两种类型的主键

单个主键:单个主键由以下语法指定。语法:

1
主键(ColumnName)

在单个主键中,只有一个列。该列也称为分区键。数据根据该列进行分区。数据根据分区键分布在不同的节点上。

复合主键:复合分区键由以下语法指定。语法:

1
主键((ColumnName1,ColumnName2),ColumnName3 ...))

在上面的语法中,ColumnName1和ColumnName2是复合分区键。数据将基于ColumnName1和ColumnName2列进行分区,数据将基于ColumnName3进行群集。如果单个分区上的数据太多。然后,使用复合分区密钥。复合分区键用于为数据创建多个分区。

Cassandra的CQL其实跟MySQL的SQL语法其实是相似的,都是常规的SELECT`UPDATE\INSERT\DELETE\WHERE`等,主要我们要看看特性问题:

  1. 查询 :WHERE 条件查询的需要使用索引或者主键,如果使用主键是多字段组成,查询时需要将对应字段一起加进去
  2. 删除:删除数据的WHERE条件只能是主键,索引也是不生效的。

疑问:

分区键使用逻辑?

分区键决定了key将会落在一致性哈希环里面的哪个node里。

为什么不能删除主键数据?

因为数据的存储使用主键数据映射,所以对主键数据进行删除、更新,在某个意义上就是新创建数据的过程,所以Cassandra需要先删除该行记录再进行添加。

静态列可不可以作为条件删除/查询?

不行的,静态列如果没有添加索引是没有办法作为条件查询的,在上面有交代,删除只能对主键进行删除,所以即使静态列添加了索引也不能作为条件删除;但是可以使用原子操作去删除,例如使用if,当然仅可以删除静态列。




X