Cassandra,实现高基数指数

时间:2012-01-24 16:15:40

标签: database nosql cassandra

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

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

在Cassandra中,它看起来像是一种降低URL基数的有效解决方案吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

问题在于,在使用低基数索引之后必须遵循顺序扫描,以便最终到达查询的一个特定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   

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