cassandra维护插入和更新时间戳

3z6pesqy  于 2021-06-15  发布在  Cassandra
关注(0)|答案(1)|浏览(350)

我有一个表来维护产品的数据。每隔几分钟进行一次api调用后,我就更新这个表。
假设我有这张table。

create table products(  
  id int,  
  name text,  
  created timestamp,  
  updated timestamp,  
  primary_key(id)
);

所以我在00:00:00的时候做了一个api调用,得到了产品列表

[  
 {id:1, name:'product1'},  
 {id:2, name:'product2'}  
]

我把它放在我的Cassandra桌上

id |   name   |      created     |      updated  
1  | Product1 | 1/1/2018 00:00:00| 1/1/2018 00:00:00  
2  | Product2 | 1/1/2018 00:00:00| 1/1/2018 00:00:00

现在,在10分钟后的第二个api调用中,用户删除了product1,但创建了product3,因此我得到了如下api调用输出

[  
 {id:2, name:'product2'},   
 {id:3, name:'product3'}   
]

我将在我的cassandra表中upsert这个(因为我不想在决定是否插入或更新之前检查记录是否存在),但是我想在我的uperquery中维护product2的创建时间,以便我知道产品是何时创建的,以及产品的生存期是什么。
我是否可以通过设置它now()来维护创建的时间戳,而不在查询中指定它,然后继续更新updatetime值?
我的table应该是这个样子

id |   name   |      created      |      updated
  1 | Product1 | 1/1/2018 00:00:00 | 1/1/2018 00:00:00  
  2 | Product2 | 1/1/2018 00:00:00 | 1/1/2018 00:00:10  
  3 | Product3 | 1/1/2018 00:00:10 | 1/1/2018 00:00:10
suzh9iv8

suzh9iv81#

热释光;博士;对。
您必须知道在upsert期间要调用哪些列,这将是推送到应用程序端的唯一逻辑,但是数据模型可以完全按照您的预期工作。

CREATE TABLE KS.products (
    id int PRIMARY KEY,
    created timestamp,
    name text,
    updated timestamp
)

INSERT INTO products (id, name, created, updated) 
  VALUES (1, 'TTzV2', toTimeStamp(now()), toTimeStamp(now()));
INSERT INTO products (id, name, created, updated) 
  VALUES (2, 'smLL301', toTimeStamp(now()), toTimeStamp(now()));

SELECT * FROM KS.products;

 id | created                         | name    | updated
----+---------------------------------+---------+---------------------------------
  1 | 2018-09-28 17:22:38.502000+0000 |   TTzV2 | 2018-09-28 17:22:38.502000+0000
  2 | 2018-09-28 17:22:39.180000+0000 | smLL301 | 2018-09-28 17:22:39.180000+0000

现在,在产品更新之后,您需要专门化api以调用其他内容,但是使用以下cql,您可以得到您期望的结果:

INSERT INTO products (id, updated) VALUES (2, toTimeStamp(now()));
INSERT INTO products (id, name, created, updated) 
  VALUES (3, 'Gt3X', toTimeStamp(now()), toTimeStamp(now()));

SELECT * FROM KS.products;

 id | created                         | name    | updated
----+---------------------------------+---------+---------------------------------
  1 | 2018-09-28 17:22:38.502000+0000 |   TTzV2 | 2018-09-28 17:22:38.502000+0000
  2 | 2018-09-28 17:22:39.180000+0000 | smLL301 | 2018-09-28 17:25:38.208000+0000
  3 | 2018-09-28 17:25:38.774000+0000 |    Gt3X | 2018-09-28 17:25:38.774000+0000

相关问题