У меня есть семейство столбцов с вторичным индексом. Вторичный индекс в основном представляет собой двоичное поле, но я использую для него строку. Поле называется 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 на эфемерных дисках
Заранее спасибо!