【发布时间】:2012-08-28 18:29:53
【问题描述】:
我有一个带有二级索引的列族。二级索引基本上是一个二进制字段,但我使用的是字符串。该字段名为 is_exported,可以是 'true' 或 'false'。请求后,所有加载的行都会更新为 is_exported = 'false'。
我每十分钟轮询一次此列表,并在新行出现时导出它们。
但问题在这里:我看到这个查询的时间与列表中的数据量呈线性增长,目前它需要 从 12 到 20 秒 (!!!) 找到 5000 行。据我了解,索引请求不应取决于 CF 中的行数,而是取决于每个索引值(基数)的行数,因为它只是另一个隐藏的 CF,例如:
"true" : rowKey1 rowKey2 rowKey3 ...
"false": rowKey1 rowKey2 rowKey3 ...
我正在使用 Pycassa 来查询数据,这里是我正在使用的代码:
column_family = pycassa.ColumnFamily(cassandra_pool, column_family_name, read_consistency_level=2)
is_exported_expr = create_index_expression('is_exported', 'false')
clause = create_index_clause([is_exported_expr], count = 5000)
column_family.get_indexed_slices(clause)
我是不是做错了什么,但我希望这个操作能更快地工作。
有什么想法或建议吗?
一些配置信息:
- 卡桑德拉 1.1.0
- 随机分区器
- 我有 2 个节点,replication_factor = 2(每台服务器都有一个完整的数据副本)
- 使用 AWS EC2,大型实例
- 临时驱动器上的软件 raid0
提前致谢!
【问题讨论】:
-
你试过 1.2.x 吗?他们改进了二级索引支持。
标签: performance cassandra indexing pycassa