是否可以在 Cassandra 中使用单个更新命令设置不同列映射中每个元素的 TTL
Is it possible to set TTL of each element in map of different columns using single update command in Cassandra
假设 table 名称: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 元素设置 TTL "{'1': 'john'}" 作为 30 和 employee_id_department_map 元素 "{'1': 'tech'}" as 40 有没有办法使用单个 Cassandra 命令更新两个元素?
我试过使用下面的单个命令为地图中的单个元素设置 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,任何好的建议都对我有很大帮助..
提前致谢
不可以,您不能在一个 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;
假设 table 名称: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 元素设置 TTL "{'1': 'john'}" 作为 30 和 employee_id_department_map 元素 "{'1': 'tech'}" as 40 有没有办法使用单个 Cassandra 命令更新两个元素?
我试过使用下面的单个命令为地图中的单个元素设置 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,任何好的建议都对我有很大帮助..
提前致谢
不可以,您不能在一个 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;