我有一个带有二级索引的列族。二级索引基本上是一个二进制字段,但我使用的是字符串。名为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
提前致谢!