2010-12-29 3 views
7

Я пытаюсь настроить семейство столбцов cassandra со вторичными индексами на несколько столбцов, которые мне нужно будет фильтровать при чтении данных. В моем первоначальном тестировании, когда я использую несколько индексов вместе, все замедляется. Вот как я это сконфигурировано в настоящее время (через Кассандры кли):Составные индексы в Apache Cassandra

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 0.7.0-RC3

+2

Это нормально для большего положения, чтобы увеличить время запроса, в пределах разумного. Вы можете дать более подробную информацию? Сколько строк вы вставили? Какое распределение значений по столбцам, которые вы запрашиваете? – jbellis

+0

На данный момент значения представляют собой случайные данные в пределах диапазона. Для моего тестирования до сих пор у меня около 1 миллиона строк. Для данных в coummns create_date рандомизируется, поэтому все значения находятся в одном и том же году, домен является доменным именем, выбранным случайным образом из списка из 8, а test_field - случайными символами. – Jake

ответ

8

Native Cassandra вторичные индексы имеют некоторые ограничения. Они не должны использоваться для столбцов с высокой мощностью (слишком много уникальных значений), согласно документации datastax. Кажется, что столбец create_date, который вы индексируете, будет иметь большую мощность. Кроме того, нет такой вещи, как составной индекс в поддержке индекса Cassandra.

Для более охвата глубины, вы можете посетить мой блог http://pkghosh.wordpress.com/2011/03/02/cassandra-secondary-index-patterns/

Pranab