Class CollectionValueIndex
- java.lang.Object
-
- org.apache.cassandra.index.internal.CassandraIndex
-
- org.apache.cassandra.index.internal.composites.CollectionValueIndex
-
- All Implemented Interfaces:
Index
public class CollectionValueIndex extends CassandraIndex
Index the value of a collection cell. This is a lot like an index on REGULAR, except that we also need to make the collection key part of the index entry so that: 1) we don't have to scan the whole collection at query time to know the entry is stale and if it still satisfies the query. 2) if a collection has multiple time the same value, we need one entry for each so that if we delete one of the value only we only delete the entry corresponding to that value.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.cassandra.index.Index
Index.CollatedViewIndexBuildingSupport, Index.Group, Index.IndexBuildingSupport, Index.Indexer, Index.LoadType, Index.QueryPlan, Index.Searcher, Index.Status
-
-
Field Summary
-
Fields inherited from class org.apache.cassandra.index.internal.CassandraIndex
baseCfs, functions, indexCfs, indexedColumn, metadata, NAME
-
Fields inherited from interface org.apache.cassandra.index.Index
INDEX_BUILDER_SUPPORT
-
-
Constructor Summary
Constructors Constructor Description CollectionValueIndex(ColumnFamilyStore baseCfs, IndexMetadata indexDef)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <T> CBuilder
buildIndexClusteringPrefix(java.nio.ByteBuffer partitionKey, ClusteringPrefix<T> prefix, CellPath path)
Used to construct an the clustering for an entry in the index table based on values from the base data.IndexEntry
decodeEntry(DecoratedKey indexedValue, Row indexEntry)
Used at search time to convert a row in the index table into a simple struct containing the values required to retrieve the corresponding row from the base table.java.nio.ByteBuffer
getIndexedValue(java.nio.ByteBuffer partitionKey, Clustering<?> clustering, CellPath path, java.nio.ByteBuffer cellValue)
Extract the value to be inserted into the index from the components of the base databoolean
isStale(Row data, java.nio.ByteBuffer indexValue, long nowInSec)
Check whether a value retrieved from an index is still valid by comparing it to current row from the base table.boolean
supportsOperator(ColumnMetadata indexedColumn, Operator operator)
Returns true if an index of this type can support search predicates of the form [column] OPERATOR [value]-
Methods inherited from class org.apache.cassandra.index.internal.CassandraIndex
customExpressionValueType, deleteStaleEntry, dependsOn, getBackingTable, getBlockingFlushTask, getEstimatedResultRows, getIndexCfs, getIndexComparator, getIndexedColumn, getIndexMetadata, getInitializationTask, getInvalidateTask, getMetadataReloadTask, getPostIndexQueryFilter, getTruncateTask, indexCfsMetadata, indexerFor, isQueryable, newIndex, register, searcherFor, shouldBuildBlocking, supportsExpression, validate, validate
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.cassandra.index.Index
filtersMultipleContains, getBlockingFlushTask, getBuildTaskSupport, getComponents, getFlushObserver, getPostQueryOrdering, getPreJoinTask, getRecoveryTaskSupport, getSupportedLoadTypeOnFailure, isSSTableAttached, unregister
-
-
-
-
Constructor Detail
-
CollectionValueIndex
public CollectionValueIndex(ColumnFamilyStore baseCfs, IndexMetadata indexDef)
-
-
Method Detail
-
getIndexedValue
public java.nio.ByteBuffer getIndexedValue(java.nio.ByteBuffer partitionKey, Clustering<?> clustering, CellPath path, java.nio.ByteBuffer cellValue)
Description copied from class:CassandraIndex
Extract the value to be inserted into the index from the components of the base data- Specified by:
getIndexedValue
in classCassandraIndex
- Parameters:
partitionKey
- from the primary dataclustering
- from the primary datapath
- from the primary datacellValue
- from the primary data- Returns:
- a ByteBuffer containing the value to be inserted in the index. This will be used to make the partition key in the index table
-
buildIndexClusteringPrefix
public <T> CBuilder buildIndexClusteringPrefix(java.nio.ByteBuffer partitionKey, ClusteringPrefix<T> prefix, CellPath path)
Description copied from class:CassandraIndex
Used to construct an the clustering for an entry in the index table based on values from the base data. The clustering columns in the index table encode the values required to retrieve the correct data from the base table and varies depending on the kind of the indexed column. See indexCfsMetadata for more details Used whenever a row in the index table is written or deleted.- Specified by:
buildIndexClusteringPrefix
in classCassandraIndex
- Parameters:
partitionKey
- from the base data being indexedprefix
- from the base data being indexedpath
- from the base data being indexed- Returns:
- a clustering prefix to be used to insert into the index table
-
decodeEntry
public IndexEntry decodeEntry(DecoratedKey indexedValue, Row indexEntry)
Description copied from class:CassandraIndex
Used at search time to convert a row in the index table into a simple struct containing the values required to retrieve the corresponding row from the base table.- Specified by:
decodeEntry
in classCassandraIndex
- Parameters:
indexedValue
- the partition key of the indexed table (i.e. the value that was indexed)indexEntry
- a row from the index table- Returns:
-
supportsOperator
public boolean supportsOperator(ColumnMetadata indexedColumn, Operator operator)
Description copied from class:CassandraIndex
Returns true if an index of this type can support search predicates of the form [column] OPERATOR [value]- Overrides:
supportsOperator
in classCassandraIndex
- Returns:
-
isStale
public boolean isStale(Row data, java.nio.ByteBuffer indexValue, long nowInSec)
Description copied from class:CassandraIndex
Check whether a value retrieved from an index is still valid by comparing it to current row from the base table. Used at read time to identify out of date index entries so that they can be excluded from search results and repaired- Specified by:
isStale
in classCassandraIndex
- Parameters:
data
- the current row from the primary data tableindexValue
- the value we retrieved from the index- Returns:
- true if the index is out of date and the entry should be dropped
-
-