Cassandra 1.1 klucze kompozytowe, kolumny i filtrowanie w CQL 3
Chcę mieć stół w następujący sposób:
CREATE TABLE ProductFamilies (
ID varchar,
PriceLow int,
PriceHigh int,
MassLow int,
MassHigh int,
MnfGeo int,
MnfID bigint,
Data varchar,
PRIMARY KEY (ID)
);
Łącznie jest 13 pól. Większość z nich to wiadra. Dane to JSON identyfikatorów rodziny produktów, które są następnie używane w kolejnym zapytaniu.Biorąc pod uwagę, jak działa Cassandra, nazwy kolumn pod maską będą wartościami. Chcę je filtrować.
Chcę uruchamiać zapytania w następujący sposób:
SELECT Data FROM MyApp.ProductFamilies WHERE ID IN (?, ?, ?) AND PriceLow >= ?
AND PriceHigh <= ? AND MassLow >= ? AND MassHigh <= ? and MnfGeo >= ? AND
MnfGeo <= ?
Czytałem, że Cassandra może wykonywać tylko predykaty WHERE względem złożonych kluczy wiersza lub indeksowanych kolumn. Czy to nadal prawda? Jeśli tak, musiałbym utworzyć kolumny <Data w PK.Czy nadal jest konieczne dołączenie wszystkich kolumn od lewej do prawej i nie można ich pominąć?Czy w moim projekcie są jakieś nieoptymalne punkty?Chciałbym dodać kolumnę „Materiały”, która jest zestawem możliwych materiałów w rodzinie produktów. Pomyśl o dodatkach do pizzy i pytaj „WHERE Materials IN („ Pineapple ”)”. Czy bez tworzenia oddzielnego odwróconego indeksu materiałów i wykonywania ręcznego przecięcia z powyższym zapytaniem, czy jest jakiś inny [bardziej elegancki] sposób radzenia sobie z tym w Cassandrze?