SASI年度和月份指数

时间:2016-09-27 00:56:26

标签: cassandra

我是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允许我想要的可扩展时间范围查询吗?

0 个答案:

没有答案