1an index (tidigare namn: sekundärt index) ger möjlighet att komma åt data i Cassandra med andra icke-primära nyckelfält än partitionsnyckeln. Fördelen är snabb, effektiv sökning av data som matchar ett givet tillstånd. I själva verket, om det inte finns något index på en normal kolumn, är det inte ens tillåtet att villkorligt fråga efter kolumnen.
ett index indexerar kolumnvärden i en separat, dold kolumnfamilj (tabell) från den som innehåller de värden som indexeras. Data för ett index är endast lokalt, vilket innebär att det inte kommer att replikeras till andra noder. Detta innebär också, för datafråga genom indexerad kolumn, förfrågningarna måste vidarebefordras till alla noder, väntar på alla resonser, och sedan slås resultaten samman och returneras. Så om du har många noder saktar frågesvaret ner när fler maskiner läggs till i klustret.
Varning:
med den aktuella versionen (2.0.7) av Apache Cassandra kunde du bara fråga med en indexerad kolumn med jämlikhetsjämförelsevillkor. Range select eller order-by med en indexerad kolumn stöds inte. Anledningen är att nycklarna som lagras i den dolda kolumnfamiljen är osorterade.
När ska man använda ett Index?
2cassandras inbyggda index är bäst på ett bord med många rader som innehåller det indexerade värdet. Ju mer unika värden som finns i en viss kolumn, desto mer overhead kommer du att ha för att fråga och behålla indexet. Anta till exempel att du hade ett spellistbord med en miljard låtar och ville slå upp låtar av artisten. Många låtar delar samma kolumnvärde för artist. Artistkolumnen är en bra kandidat för ett index.
När ska man inte använda ett Index?
2använd inte ett index i dessa situationer:
- på kolumner med hög kardinalitet eftersom du sedan frågar en enorm volym poster för ett litet antal resultat
- i tabeller som använder en motkolumn
- på en ofta uppdaterad eller borttagen kolumn
- för att leta efter en rad i en stor partition om inte snävt frågas