【问题标题】:Cassandra, implementing high-cardinality indexesCassandra,实现高基数索引
【发布时间】:2014-08-12 06:22:37
【问题描述】:

众所周知,Cassandra 在低基数索引方面表现出色,但在高基数索引方面表现不佳。我的列族包含一个存储 URL 值的字段。 自然,在大数据集中搜索这个特定值可能会很慢。

作为一种解决方案,我想出了获取 url 的第一个字符并存储它们的想法 在单独的列中,例如test.com/abcd 将存储为 (ab, test.com/abcd) 列。 因此,当需要按特定 URL 值进行搜索时,我可以通过先搜索“ab”,然后在获得的结果集中查找确切的 url,将其缩小 26*26 倍。

这看起来像是在 Cassandra 中减少 URL 基数的有效解决方案吗?

【问题讨论】:

    标签: database nosql cassandra


    【解决方案1】:

    如果您需要非常快,您可能需要考虑使用一个单独的表,其中包含您正在搜索的值作为列键。在 BigTable 实现中,键前缀搜索通常比列搜索更快。

    【讨论】:

      【解决方案2】:

      这样做的一个问题是,在您使用低基数索引后,必须进行顺序扫描,以便最终到达查询的一个特定 URL。

      正如 Chris Shain 所说,您可以构建一个单独的列族来构建倒排索引:

      Column Family 'people'
      
      ssn   | name     | url
      ----- | ------   | ---
      1234  | foo      | http://example.com/1234
      5678  | bar      | http://hello.com/world
      
      
      
      Column Family 'urls'
      
      url                      | ssn   
      ------------------------ | ------
      http://example.com/1234  | 1234   
      http://hello.com/world   | 5678   
      

      缺点是您需要自己维护手动索引的完整性。

      【讨论】:

        猜你喜欢
        • 2015-06-10
        • 2014-09-25
        • 1970-01-01
        • 1970-01-01
        • 2015-11-29
        • 2014-07-23
        • 2023-03-09
        • 1970-01-01
        • 2021-01-21
        相关资源
        最近更新 更多