【发布时间】:2011-06-01 06:59:40
【问题描述】:
我正在尝试在读取数据时需要过滤的几列上设置具有二级索引的 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 上
【问题讨论】:
-
子句越多,查询时间越长,在合理范围内是正常的。你能提供更多细节吗?你插入了多少行?您查询的列中的值分布如何?
-
目前,这些值都是一个范围内的随机数据。到目前为止,我的测试大约有 100 万行。对于列中的数据,create_date 是随机的,因此所有值都在同一年内,domain 是从 8 个列表中随机抽取的域名,test_field 是随机字符。