Apache Cassandra中的复合索引

时间:2010-12-29 22:04:21

标签: cassandra indexing

我正在尝试设置一个带有二级索引的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

1 个答案:

答案 0 :(得分:8)

Native Cassandra二级索引有一些限制。根据datastax文档,它们不应该用于具有高基数的列(太多的唯一值)。您正在编制索引的create_date列似乎具有高基数。此外,在本地Cassandra索引支持中没有复合索引。

如需更深入的报道,您可以访问我的博文 http://pkghosh.wordpress.com/2011/03/02/cassandra-secondary-index-patterns/

普拉纳布