主键:查询&更新

时间:2016-02-03 17:17:59

标签: cassandra

cassandra的问题很少。基本上我的数据有一个状态(INITIALIZED,PERFORMED,ENDED ...),我有不同的计划任务,将根据状态查询这些数据" IN"条款。因此,一个调度程序将使用INITIALIZED数据,一个使用PERFORMED,一些使用两者,等等......

一旦检索到数据,就会对其进行处理并相应地更改状态(INITIALIZED - > PERFORMED - > ENDED)。

问题:为了能够使用IN子句,状态必须在我的表的主键中。但是当我更新状态时......它会在我的表格中创建一条新记录,因为UPSERT没有找到任何带有主键的数据...

我该如何解决?

1 个答案:

答案 0 :(得分:0)

您可以在列上创建secondary index,而不是在主键列中包含状态列。但是,辅助索引列(尚未)支持IN子句。但是,由于您查找的值非常有限,您可以在WHERE子句中使用相等条件,然后将结果合并到客户端?

请注意使用二级索引需要付出代价。查看“when not to use an index”。在您的情况下,这些要点可能适用:

  
      
  • 在经常更新或删除的列上。请参阅使用问题   下面经常更新或删除的列的索引。
  •   
  • 寻找一个   除非经过狭义查询,否则请在大分区中排请参阅使用问题   除非是狭义的,否则将在大型分区中查找行的索引   在下面查询。
  •