我有一個具有二級索引的列族。二級索引基本上是一個二進制字段,但我使用了一個字符串。名爲的字段is_exported並且可以是'真'或'假'。請求後,所有加載的行都將更新爲is_exported ='false'。爲什麼Cassandra二級索引在僅僅35萬行上非常緩慢?
我每十分鐘輪詢一次該列表,並在出現新的行時導出它們。
但是,這裏的問題是:我看到這個查詢的時間與列表中的數據量增長非常接近,目前需要從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
- RandomPartitioner
- 我有2個節點和replication_factor = 2(每個服務器都有一個完整的數據複製)
- 使用AWS EC2,大實例
- 臨時驅動器上的軟件raid0
提前致謝!
你試過1.2.x嗎?他們已經改進了二級索引支持。 – Aaron