Любая альтернатива вторичной индексации в семействе суперколонок Cassandra

Моя модель данных выглядит следующим образом

      #keyspace_name{
             #columnfamily1
               {startDate_mobileNo:  // row key
                       { Call_TYpe:  // super column
                               { xyz: value
                                 endDate : value;
                                }
                        }
                }

Теперь я хочу сделать результаты поиска с фильтрацией startDate_mobileNo, Call_TYpe и endDate. Это можно сделать, сделав endDate в качестве вторичного индекса. Но вторичная индексация в супер-столбце невозможна. Поэтому я не могу понять, как поступить. Да, я могу выполнить вторичную фильтрацию индексации, отфильтровывая данные результатов, используя простое кодирование Java. Но я думаю, что это неправильная идея, так как в случае больших данных может быть нехватка памяти. Поэтому, пожалуйста, предложите мне несколько идей.

Заранее спасибо

1 ответ

Решение

Я верю, что вы можете получить то, что вы хотите, используя составные ключи, которые имеют новую первоклассную поддержку CQL в Cassandra 1.1. См. Этот пост в блоге о моделировании с использованием композитов для получения дополнительной информации.

Суперколонны - определенно неправильный путь - они всегда были несколько проблематичными, и теперь они устарели, и вы можете получить все, что вы хотели от них, используя вместо этого композиты.

Если я правильно интерпретирую вашу модель, вы можете сделать что-то вроде:

CREATE TABLE columnfamily1 (
    startDate timestamp,
    mobileNo text,
    Call_TYpe int,
    endDate timestamp,
    xyz text,
    PRIMARY KEY (startDate, mobileNo, Call_TYpe)
);

Вы также можете создать вторичный индекс для endDate, если хотите. Мне не ясно, будете ли вы.

Если вы хотите привести более конкретный пример запросов сортировки, которые вам нужно поддерживать, я могу помочь вам больше.

Другие вопросы по тегам