我是Cassandra的SASI索引的新手,我不清楚当索引的“where”谓词中包含多个列时它们如何编制索引。
以下是我正在考虑的一个选项:
选项1:
CREATE TABLE IF NOT EXISTS my_timeseries_data (
id text,
event_time timestamp,
value text,
year int,
month int,
PRIMARY KEY (id, event_time)
) WITH CLUSTERING ORDER BY (event_time DESC);
CREATE CUSTOM INDEX year_idx ON my_timeseries_data (year)
USING 'org.apache.cassandra.index.sasi.SASIIndex'
WITH OPTIONS = { 'mode': 'SPARSE' };
CREATE CUSTOM INDEX month_idx ON my_timeseries_data (month)
USING 'org.apache.cassandra.index.sasi.SASIIndex'
WITH OPTIONS = { 'mode': 'SPARSE' };
我希望有时会这样查询:
select * from my_timeseries_data
where year = 2016 and month = 1 ALLOW FILTERING;
'月'列上的SASI索引是否有助于我的表现?
选项2:
将下面的连接列(如“year_and_month”)编入索引会更好吗?
CREATE TABLE IF NOT EXISTS my_timeseries_data (
id text,
event_time timestamp,
value text,
year_and_month text,
PRIMARY KEY (id, event_time)
) WITH CLUSTERING ORDER BY (event_time DESC);
CREATE CUSTOM INDEX year_idx ON my_timeseries_data (year_and_month)
USING 'org.apache.cassandra.index.sasi.SASIIndex';
然后在单个SASI索引上查询:
select * from my_timeseries_data
where year_and_month = '2016_1';
选项3:
不需要额外的月份和年份列以及SASI索引,因为将“event_time”作为CLUSTERING COLUMN允许我想要的可扩展时间范围查询吗?