【发布时间】:2013-09-12 17:11:54
【问题描述】:
我目前正在使用和研究 cassandra 中的数据建模实践。到目前为止,我知道您需要基于执行的查询进行数据建模。但是,多个select 要求使数据建模更加困难或不可能在一张表上处理。因此,当您无法在 1 个表上处理这些要求时,您需要插入 2-3 个表。换句话说,您需要在 1 次操作中进行多次插入。
目前,我正在处理广告系列结构的数据模型。我在 cassandra 上有一个带有以下 cql 的活动表;
CREATE TABLE campaign_users
(
created_at timeuuid,
campaign_id int,
uid bigint,
updated_at timestamp,
PRIMARY KEY (campaign_id, uid),
INDEX(campaign_id, created_at)
);
在此模型中,我需要能够仅在给定时间戳的情况下进行增量导出。在 cassandra 中,有allow filtering 模式可以启用对二级索引的select 查询。所以,我的增量导出的 cql 语句如下;
select campaign_id, uid
from campaign_users
where created_at > minTimeuuid('2013-08-14 12:26:06+0000') allow filtering;
但是,如果使用允许过滤,则会出现警告,指出该语句具有不可预测的性能。那么,依赖 allow filtering 是一个好习惯吗?还有什么其他选择?
【问题讨论】:
-
CQL 是否发生了变化,或者该语法有什么问题?我看不到
CREATE TABLE内的INDEX的位置是允许的,我也不允许单独创建索引:CREATE INDEX ON campaign_users(campaign_id, created_at);
标签: cassandra