我正在尝试设置一个带有二级索引的cassandra列族,我需要在读取数据时进行过滤。在我的初始测试中,当我一起使用多个索引时,事情变慢了。以下是我目前如何配置它(通过cassandra-cli):
update column family bulkdata with comparator=UTF8Type and column_metadata=[{column_name: test_field, validation_class: UTF8Type}, {column_name: create_date, validation_class: LongType, index_type: KEYS}, {column_name: domain, validation_class: UTF8Type, index_type: KEYS}];
我想获取create_date>所有数据somevalue1和column_name = somevalue2。使用pycassa为我的客户端执行以下操作:
domain_expr = create_index_expression('domain', 'whatever.com')
cd_expr = create_index_expression('create_date', 1293650000, GT)
clause = create_index_clause([domain_expr, cd_expr], count=10000)
for key, item in col_fam.get_indexed_slices(clause):
...
这当然是SQL中常见的错误,人们通常必须根据查询需要创建复合索引。我对cassandra很新,所以我不知道是否需要这样的东西,甚至不存在。
我与cassandra的交互将包括大量的写入,以及大量的读取和更新。我已经建立了索引,认为它们是正确的做法,但也许我完全错了。我对设置高性能系统的任何想法感兴趣,我的索引设置或不设置。
哦,这是在cassandra 0.7.0-rc3
答案 0 :(得分:8)
Native Cassandra二级索引有一些限制。根据datastax文档,它们不应该用于具有高基数的列(太多的唯一值)。您正在编制索引的create_date列似乎具有高基数。此外,在本地Cassandra索引支持中没有复合索引。
如需更深入的报道,您可以访问我的博文 http://pkghosh.wordpress.com/2011/03/02/cassandra-secondary-index-patterns/
普拉纳布