cassandra的问题很少。基本上我的数据有一个状态(INITIALIZED,PERFORMED,ENDED ...),我有不同的计划任务,将根据状态查询这些数据" IN"条款。因此,一个调度程序将使用INITIALIZED数据,一个使用PERFORMED,一些使用两者,等等......
一旦检索到数据,就会对其进行处理并相应地更改状态(INITIALIZED - > PERFORMED - > ENDED)。
问题:为了能够使用IN子句,状态必须在我的表的主键中。但是当我更新状态时......它会在我的表格中创建一条新记录,因为UPSERT没有找到任何带有主键的数据...
我该如何解决?
答案 0 :(得分:0)
您可以在列上创建secondary index,而不是在主键列中包含状态列。但是,辅助索引列(尚未)支持IN
子句。但是,由于您查找的值非常有限,您可以在WHERE
子句中使用相等条件,然后将结果合并到客户端?
请注意使用二级索引需要付出代价。查看“when not to use an index”。在您的情况下,这些要点可能适用:
- 在经常更新或删除的列上。请参阅使用问题 下面经常更新或删除的列的索引。
- 寻找一个 除非经过狭义查询,否则请在大分区中排请参阅使用问题 除非是狭义的,否则将在大型分区中查找行的索引 在下面查询。