是否将“ is_deleted”状态字段作为复合主键放在cassandra表上以进行读取是一种好习惯?

时间:2019-01-17 09:35:42

标签: java spring cassandra reactive spring-data-cassandra

我要在春季设置新的反应式Cassandra休息服务,然后在所有表上都有is_deletedis_activestoreid等“默认”字段。

由于假设在where查询中需要is_deleted。 它是作为复合PK之一创建的,因此数据搜索将更快。

问题是因为这一点,主键非常繁琐,并且由于需要提及所有默认键,因此搜索查询变得很长。

在Cassandra上使用这种脂肪复合PK是一种好习惯吗?

@PrimaryKeyColumn(name = BaseCassandraFields.STORE_ID, type = PrimaryKeyType.PARTITIONED)
  protected String storeId;

@PrimaryKeyColumn(name = BaseCassandraFields.IS_DELETED, type = 
PrimaryKeyType.PARTITIONED)
  protected Boolean isDeleted = false;

Example of table

Also here is the DDL

1 个答案:

答案 0 :(得分:0)

它不会在内部影响Cassandra,但是如果您不需要所有这些键,则会在开发部分不必要地施加压力。我个人认为在PK中包含布尔值很奇怪,但是您的用例可能证明了这一点。
您可能会争辩说,由于有更多的列,Cassandra可能会为密钥计算散列有一些额外的开销,但是我怀疑这是否有意义,因为散列函数通常具有高性能。