Apache Cassandra中的复合索引

Jak*_*ake 7 indexing cassandra

我正在尝试在几个列上设置一个带有二级索引的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}];
Run Code Online (Sandbox Code Playgroud)

我想获取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):
    ...
Run Code Online (Sandbox Code Playgroud)

这当然是SQL中的一个常见错误,人们通常必须根据查询需要创建复合索引.我对cassandra很新,所以我不知道这样的东西是否需要甚至存在.

我与cassandra的交互将包括大量的写入,以及大量的读取和更新.我已经建立了索引,认为它们是正确的做法,但也许我完全错了.我对设置高性能系统的任何想法感兴趣,我的索引设置或不设置.

哦,这是在cassandra 0.7.0-rc3

小智 8

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

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

普拉纳布