1

我是 scylladb 和 cassandra 的新手,我在从表中查询数据时遇到了一些问题,以下是我创建的架构:

CREATE TABLE usercontacts (
  userID bigint,                        -- userID 
  contactID bigint,                     -- Contact ID lynkApp userID  
  contactDeviceToken text,              -- Device Token    
  modifyDate timestamp static ,     
  PRIMARY KEY  (contactID,userID)
);



CREATE MATERIALIZED VIEW usercontacts_by_contactid 
AS SELECT userID, contactID, contactDeviceToken,
FROM usercontacts 
contactID IS NOT NULL AND userID IS NOT NULL AND modifyDate IS NOT NULL 
-- Need to not null as these are the primary keys in main
-- table same structure as the main table
PRIMARY KEY(userID,contactID);



CREATE MATERIALIZED VIEW usercontacts_by_modifyDate 
AS SELECT userID,contactID,contactDeviceToken,modifyDate
FROM usercontacts WHERE
contactID IS NOT NULL AND userID IS NOT NULL AND modifyDate IS NOT NULL
-- Need to not null as these are the primary keys in main
-- table same structure as the main table
PRIMARY KEY (modifyDate,contactID);

我想为联系表创建物化视图,usercontacts_by_userid并且usercontacts_by_modifydate

如果我将 modifydate (timestamp) 设置为静态,我需要以下查询:

update usercontacts set modifydate="newdate" where contactid="contactid"
select * from usercontacts_by_modifydate where modifydate="modifydate"
delete from usercontacts where contactid="contactid"
4

1 回答 1

6

目前无法创建包含静态列的物化视图,无论是作为主键的一部分还是作为常规列。

包含静态行需要在usercontacts更改静态列时读取整个基表 ( ),以便可以重新计算视图行。这会带来显着的性能损失。

将静态行作为视图的分区键意味着视图中只有一个条目用于分区的所有行。但是,二级索引在这种情况下确实有效,您可以使用它来代替。

目前这对 Scylla 和 Cassandra 都有效。

于 2017-10-27T22:39:05.537 回答