首页 > 解决方案 > 是否可以在 Cassandra 中使用单个更新命令设置不同列映射中每个元素的 TTL

问题描述

假设表名:company_employee

select * from company_employee ;
company_id  | company_name | employee_id_name_map         | employee_id_department_map
------------+--------------+------------------------------+---------------------------
123         |      abc     | {'1': 'john'} ,{'2': 'jack'} | {'1': 'tech'} ,{'2': 'hr'}

在这里,我想将employee_id_name_map元素“{'1':'john'}”的TTL 设置为30,将employee_id_department_map元素“{'1':'tech'}”的TTL 设置为40是否有任何方法可以使用单个更新两个元素卡桑德拉命令?

我尝试使用如下的单个命令为地图中的单个元素设置 ttl

UPDATE company_employee USING TTL 30 SET employee_id_name_map['1']='john' WHERE company_id='123' and company_name = 'abc';
UPDATE company_employee USING TTL 40 SET employee_id_department_map['1']='tech' WHERE company_id='123' and company_name = 'abc';

使用上面的 cassandra 命令效果很好,但我想写一个 cassandra,任何好的建议都对我有很大帮助..

提前致谢

标签: cassandraendiannessttl

解决方案


不,您不能在一个 CQL 语句中设置不同的 TTL。但是您可以使用批处理将多个命令组合到单个 Cassandra 写入中(如果您使用相同的分区键)。像这样:

BEGIN BATCH
UPDATE company_employee USING TTL 30 SET employee_id_name_map['1']='john' WHERE company_id='123' and company_name = 'abc';
UPDATE company_employee USING TTL 40 SET employee_id_department_map['1']='tech' WHERE company_id='123' and company_name = 'abc';
APPLY BATCH;

推荐阅读