众所周知,Cassandra在低基数指数方面表现出色,而在高基数指数方面表现不佳。我的列族包含一个存储URL值的字段。 当然,在大数据集中搜索此特定值可能会很慢。
作为一个解决方案,我想出了获取url的第一个字符并存储它们的想法 在单独的列中,例如test.com/abcd将存储为(ab,test.com/abcd)列。 因此,当需要通过特定URL值进行搜索时,我可以先搜索“ab”,然后在获得的结果集中查找确切的URL,将其缩小26 * 26倍。
在Cassandra中,它看起来像是一种降低URL基数的有效解决方案吗?
答案 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
缺点是您需要自己维护手动索引的完整性。