如果值存在,请更新Cassandra表中的列值



我有一个Cassandra表,如下

CREATE TABLE inventory(
prodid varchar,
loc varchar,
qty float,
PRIMARY KEY (prodid)
) ;

要求:

对于提供的主键,如果表中不存在记录,我们需要直接插入。但是,当主键的记录存在时,我们需要通过将表中的现有值与接收到的新值相加来更新qty列。

根据我的理解,我需要首先查询表中提供的主键,获得数量列的值,并添加从请求中收到的新值,然后用轻量级事务执行更新查询。

例如:表中prodid=1的数量为10,如果我从用户那里收到新的数量为2(这是增量(,那么我需要将prodi=1的数量更新为12。

这种逻辑正确吗?或者有什么更好的方法来设计表或处理用例?这种方法会在加载过程中引入延迟问题吗?因为我们需要先进行选择查询,如果数据存在,则用新值更新列值?请帮忙。

您可以将数量列更改为静态。这样,您就不必更新表,而是插入。更新是资源密集型的,所以cassandra将UPDATE语句视为插入语句。因此,您的表定义应该是-

CREATE TABLE inventory( 
prodid varchar, 
loc varchar, 
qty float static, 
PRIMARY KEY (prodid) ) ;

因此,您可以使用业务逻辑来计算QTY列的新值,并使用INSERT语句,该语句将对同一列进行内部更新。

另一种方法是使用计数器列-

CREATE TABLE inventory( 
prodid varchar, 
loc varchar, 
qty counter, 
PRIMARY KEY (prodid, loc ) ) ;

在这个设计中,你可以只使用下面这样的更新查询-

update inventory set qty = qty + <calculated Quantity> where prodid = 1;

请注意,在第二个表设计中,所有其他列都必须是主键的一部分。就你的情况而言,它既简单又方便。

最新更新