Кассандра поддерживает вставку и обновляет метку времени - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть таблица, которая содержит данные для продуктов.Я обновляю эту таблицу после выполнения вызова API каждые несколько минут.

Скажем, у меня есть эта таблица.

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

Поэтому я выполняю вызов API во время 00:00:00, и яполучить список продуктов

[  
 {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  

Теперь во втором вызове API через 10 минут пользователь удалил Product1, но создал Product3, поэтому я получаювывод вызова API как

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

Я опишу это в своей таблице cassandra (так как я не хочу проверять, существует ли запись, прежде чем решить, вставлять или обновлять), но я хочу сохранить созданныйвремя product2 в моем расстроенном запросе, чтобы я знал, когда продукт был создан и каков был срок его жизни.

Могу ли я сохранить созданную временную метку, установив ее сейчас () без указания еев запросе, а затем я продолжаю обновлять значение времени обновления?

Моя таблица должна выглядеть следующим образом

 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

1 Ответ

0 голосов
/ 28 сентября 2018

TL; DR; Да.

Вы должны будете знать, какие столбцы вызывать во время 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
...