Cassandra索引与物化视图

Cassandra索引与物化视图,cassandra,Cassandra,我有下一个Cassandra表结构: CREATE TABLE ringostat.hits ( hitId uuid, clientId VARCHAR, session MAP<VARCHAR, TEXT>, traffic MAP<VARCHAR, TEXT>, PRIMARY KEY (hitId, clientId) ); INSERT INTO ringostat.hits (hitId, clientId, session, traff

我有下一个Cassandra表结构:

CREATE TABLE ringostat.hits (
  hitId uuid,
  clientId VARCHAR,
  session MAP<VARCHAR, TEXT>,
  traffic MAP<VARCHAR, TEXT>,
  PRIMARY KEY (hitId, clientId)
);

INSERT INTO ringostat.hits (hitId, clientId, session, traffic)
  VALUES('550e8400-e29b-41d4-a716-446655440000'. 'clientId', {'id': '1', 'number': '1', 'startTime': '1460023732', 'endTime': '1460023762'}, {'referralPath': '/example_path_for_example', 'campaign': '(not set)', 'source': 'www.google.com', 'medium': 'referal', 'keyword': '(not set)', 'adContent': '(not set)', 'campaignId': '', 'gclid': '', 'yclid': ''});

INSERT INTO ringostat.hits (hitId, clientId, session, traffic)
      VALUES('650e8400-e29b-41d4-a716-446655440000'. 'clientId', {'id': '1', 'number': '1', 'startTime': '1460023732', 'endTime': '1460023762'}, {'referralPath': '/example_path_for_example', 'campaign': '(not set)', 'source': 'www.google.com', 'medium': 'cpc', 'keyword': '(not set)', 'adContent': '(not set)', 'campaignId': '', 'gclid': '', 'yclid': ''});

INSERT INTO ringostat.hits (hitId, clientId, session, traffic)
      VALUES('750e8400-e29b-41d4-a716-446655440000'. 'clientId', {'id': '1', 'number': '1', 'startTime': '1460023732', 'endTime': '1460023762'}, {'referralPath': '/example_path_for_example', 'campaign': '(not set)', 'source': 'www.google.com', 'medium': 'referal', 'keyword': '(not set)', 'adContent': '(not set)', 'campaignId': '', 'gclid': '', 'yclid': ''});
如果不添加
允许筛选
,则出现错误:
未找到非主键列限制的支持的辅助索引

这就是为什么我看到两种选择:

  • 在“流量”列上创建索引
  • 创建物化视图
  • 创建另一个表,并为
    流量
    列设置
    索引
  • 哪一个是最好的选择?此外,我还有许多
    MAP
    类型的字段需要过滤。如果在每个字段上添加
    索引
    ,会出现什么问题

    谢谢。

    来自

    在以下情况下不要使用索引:

    • 在高基数列上,因为您需要查询大量记录以获得少量结果。[…]相反,在基数极低的列(如布尔列)上创建索引没有意义
    • 在使用计数器列的表中
    • 在经常更新或删除的列上
    • 在大分区中查找行,除非是狭义查询

    如果您的计划用法符合这些标准中的一个或多个,则最好使用物化视图。

    您应该考虑将最后的问题作为单独的问题。在我的实体化视图中,我需要在我的<代码>流量< /代码>列上添加索引吗?不,您要查询的列需要在主键中,按顺序。但我有地图类型。我无法在此类型上设置主键:(那么您必须使用索引,或重新构建数据。具体化视图不会有帮助。我认为在不同的列中分离
    traffic
    列,如
    traffic.source VARCHAR
    traffic.medium VARCHAR
    ,将有所帮助。谢谢:)
    SELECT * FROM hits WHERE traffic['source'] = 'www.google.com' AND traffic['medium'] = 'referal' ALLOW FILTERING;