麻烦建模卡桑德拉 table
trouble modeling cassandra table
我想用cassandra保存日志,以后再看
这是我到目前为止所做的:
CREATE TABLE logs
(
id uuid,
type int,
start_date timestamp,
end_date timestamp,
ip text,
log_event text,
user_id text,
user_agent text,
PRIMARY KEY (id, type, start_date, user_id)
) WITH CLUSTERING ORDER BY (type ASC, start_date DESC, profil_token ASC);
我需要的总是这种查询:
SELECT * FROM logs WHERE type = 1 AND user_id = 'test' AND start_date = '2017-03-08';
我需要不带id的查询,但是我不能,因为id是我真正的主键
我不知道如何在没有允许过滤的情况下实现这种查询
这取决于您是否需要快速查询。如果您不这样做并且可以忍受扫描所有行,那么 ALLOW FILTERING
就是您的解决方法。
如果您需要更快的查询,您可以重组 table 以便查询前缀,或者您可以创建一个新的 table,对数据进行非规范化以加快查询速度.
我对您的用例了解不多,但将 user_id
作为集群密钥的一部分可能对您有用:
PRIMARY KEY (user_id, start_date, type, id)
但这意味着您无法在不知道 user_id
(和其他字段)的情况下通过 id
进行查找。不过,您可以为此添加一个二级索引。
What I need is always this kind of query :
SELECT * FROM logs WHERE type = 1 AND user_id = 'test' AND start_date = '2017-03-08';
如果 always 真的意味着 always 这个 table 模型有点不正确。您的模型应该 始终 是 查询驱动的 ,因此我将其建模如下:
CREATE TABLE logs
(
id uuid,
type int,
start_date timestamp,
end_date timestamp,
event_time timestamp,
ip text,
log_event text,
user_id text,
user_agent text,
PRIMARY KEY ((type, user_id, start_date), event_time)
) WITH CLUSTERING ORDER BY (event_time ASC);
当查询此 table 时,您显然需要指定 type
、user_id
、start_date
和 (可选)字段 event_time
来过滤结果。
如果您对原始 table 进行建模以满足另一个查询,那么只需像以前的那样添加一个新的 table 并远离 ALLOW FILTERING
。
它将完美无缺地工作。
我想用cassandra保存日志,以后再看
这是我到目前为止所做的:
CREATE TABLE logs
(
id uuid,
type int,
start_date timestamp,
end_date timestamp,
ip text,
log_event text,
user_id text,
user_agent text,
PRIMARY KEY (id, type, start_date, user_id)
) WITH CLUSTERING ORDER BY (type ASC, start_date DESC, profil_token ASC);
我需要的总是这种查询:
SELECT * FROM logs WHERE type = 1 AND user_id = 'test' AND start_date = '2017-03-08';
我需要不带id的查询,但是我不能,因为id是我真正的主键
我不知道如何在没有允许过滤的情况下实现这种查询
这取决于您是否需要快速查询。如果您不这样做并且可以忍受扫描所有行,那么 ALLOW FILTERING
就是您的解决方法。
如果您需要更快的查询,您可以重组 table 以便查询前缀,或者您可以创建一个新的 table,对数据进行非规范化以加快查询速度.
我对您的用例了解不多,但将 user_id
作为集群密钥的一部分可能对您有用:
PRIMARY KEY (user_id, start_date, type, id)
但这意味着您无法在不知道 user_id
(和其他字段)的情况下通过 id
进行查找。不过,您可以为此添加一个二级索引。
What I need is always this kind of query :
SELECT * FROM logs WHERE type = 1 AND user_id = 'test' AND start_date = '2017-03-08';
如果 always 真的意味着 always 这个 table 模型有点不正确。您的模型应该 始终 是 查询驱动的 ,因此我将其建模如下:
CREATE TABLE logs
(
id uuid,
type int,
start_date timestamp,
end_date timestamp,
event_time timestamp,
ip text,
log_event text,
user_id text,
user_agent text,
PRIMARY KEY ((type, user_id, start_date), event_time)
) WITH CLUSTERING ORDER BY (event_time ASC);
当查询此 table 时,您显然需要指定 type
、user_id
、start_date
和 (可选)字段 event_time
来过滤结果。
如果您对原始 table 进行建模以满足另一个查询,那么只需像以前的那样添加一个新的 table 并远离 ALLOW FILTERING
。
它将完美无缺地工作。