Cassandra 1.1 chaves compostas, colunas e filtragem em CQL 3
Eu gostaria de ter uma tabela algo como segue:
CREATE TABLE ProductFamilies (
ID varchar,
PriceLow int,
PriceHigh int,
MassLow int,
MassHigh int,
MnfGeo int,
MnfID bigint,
Data varchar,
PRIMARY KEY (ID)
);
Existem 13 campos no total. A maioria deles representa baldes. Os dados são um JSON de IDs de famílias de produtos, que são usados em uma consulta subsequente.Dado como o Cassandra funciona, os nomes das colunas sob o capô serão os valores. Eu desejo filtrar isso.
Desejo executar consultas da seguinte maneira:
SELECT Data FROM MyApp.ProductFamilies WHERE ID IN (?, ?, ?) AND PriceLow >= ?
AND PriceHigh <= ? AND MassLow >= ? AND MassHigh <= ? and MnfGeo >= ? AND
MnfGeo <= ?
Eu li que Cassandra só pode executar os predicados WHERE contra chaves de linha compostas ou colunas indexadas. Isso ainda é verdade? Se assim for, eu teria que fazer as colunas <Data part of the PK.Ainda assim, é necessário incluir todas as colunas da esquerda para a direita e não pode pular nenhuma?Existem pontos não ótimos no meu design?Eu gostaria de adicionar uma coluna "Materiais", que é uma matriz de materiais possíveis em uma família de produtos. Pense em coberturas de pizza e consulte "WHERE Materials IN ('Pineapple')". Sem criar um índice invertido separado de materiais e, em seguida, realizar uma interseção manual contra a consulta acima, há alguma outra maneira [mais elegante] de lidar com isso em Cassandra?