org.apache.cassandra.io.sstable

## Class SSTable

- java.lang.Object
- - org.apache.cassandra.io.sstable.SSTable

Direct Known Subclasses:
  SSTableReader, SSTableWriter

    public abstract class SSTable
    extends java.lang.Object

This class is built on top of the SequenceFile. It stores data on disk in sorted fashion. However the sorting is upto the application. This class expects keys to be handed to it in sorted order. A separate index file is maintained as well, containing the SSTable keys and the offset into the SSTable at which they are found. Every 1/indexInterval key is read into memory when the SSTable is opened. Finally, a bloom filter file is also kept for the keys in each SSTable.

### Field Summary

Fields
`protected java.util.Set<Component>` `components`
`boolean` `compression`
`Descriptor` `descriptor`
`DecoratedKey` `first`
`DecoratedKey` `last`
`CFMetaData` `metadata`
`protected DiskOptimizationStrategy` `optimizationStrategy`
`static int` `TOMBSTONE_HISTOGRAM_BIN_SIZE`
`static int` `TOMBSTONE_HISTOGRAM_SPOOL_SIZE`
`static int` `TOMBSTONE_HISTOGRAM_TTL_ROUND_SECONDS`

### Constructor Summary

Constructors
`protected` `SSTable(Descriptor descriptor, java.util.Set<Component> components, CFMetaData metadata, DiskOptimizationStrategy optimizationStrategy)`

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`void` `addComponents(java.util.Collection<Component> newComponents)` Registers new custom components.
`protected static void` `appendTOC(Descriptor descriptor, java.util.Collection<Component> components)` Appends new component names to the TOC component.
`long` `bytesOnDisk()`
`static java.util.Set<Component>` `componentsFor(Descriptor desc)` Discovers existing components for the descriptor.
`DecoratedKey` `decorateKey(java.nio.ByteBuffer key)`
`static boolean` `delete(Descriptor desc, java.util.Set<Component> components)` We use a ReferenceQueue to manage deleting files that have been compacted and for which no more SSTable references exist.
`static java.util.Set<Component>` `discoverComponentsFor(Descriptor desc)`
`protected long` `estimateRowsFromIndex(RandomAccessReader ifile)`
`java.util.List<java.lang.String>` `getAllFilePaths()`
`java.lang.String` `getColumnFamilyName()`
`java.lang.String` `getFilename()`
`java.lang.String` `getIndexFilename()`
`java.lang.String` `getKeyspaceName()`
`static DecoratedKey` `getMinimalKey(DecoratedKey key)` If the given @param key occupies only part of a larger buffer, allocate a new buffer that is only as large as necessary.
`IPartitioner` `getPartitioner()`
`protected static java.util.Set<Component>` `readTOC(Descriptor descriptor)` Reads the list of components from the TOC component.
`java.lang.String` `toString()`
`static Pair<Descriptor,Component>` `tryComponentFromFilename(java.io.File dir, java.lang.String name)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Field Detail

#### TOMBSTONE_HISTOGRAM_BIN_SIZE

    public static final int TOMBSTONE_HISTOGRAM_BIN_SIZE

See Also:
  Constant Field Values

#### TOMBSTONE_HISTOGRAM_SPOOL_SIZE

    public static final int TOMBSTONE_HISTOGRAM_SPOOL_SIZE

See Also:
  Constant Field Values

#### TOMBSTONE_HISTOGRAM_TTL_ROUND_SECONDS

    public static final int TOMBSTONE_HISTOGRAM_TTL_ROUND_SECONDS

#### descriptor

    public final Descriptor descriptor

#### components

    protected final java.util.Set<Component> components

#### metadata

    public final CFMetaData metadata

#### compression

    public final boolean compression

#### first

    public DecoratedKey first

#### last

    public DecoratedKey last

#### optimizationStrategy

    protected final DiskOptimizationStrategy optimizationStrategy

### Constructor Detail

#### SSTable

    protected SSTable(Descriptor descriptor,
                      java.util.Set<Component> components,
                      CFMetaData metadata,
                      DiskOptimizationStrategy optimizationStrategy)

### Method Detail

#### delete

    public static boolean delete(Descriptor desc,
                                 java.util.Set<Component> components)

We use a ReferenceQueue to manage deleting files that have been compacted and for which no more SSTable references exist. But this is not guaranteed to run for each such file because of the semantics of the JVM gc. So, we write a marker to `compactedFilename` when a file is compacted; if such a marker exists on startup, the file should be removed. This method will also remove SSTables that are marked as temporary.

Returns:
  true if the file was deleted

#### getPartitioner

    public IPartitioner getPartitioner()

#### decorateKey

    public DecoratedKey decorateKey(java.nio.ByteBuffer key)

#### getMinimalKey

    public static DecoratedKey getMinimalKey(DecoratedKey key)

If the given @param key occupies only part of a larger buffer, allocate a new buffer that is only as large as necessary.

#### getFilename

    public java.lang.String getFilename()

#### getIndexFilename

    public java.lang.String getIndexFilename()

#### getColumnFamilyName

    public java.lang.String getColumnFamilyName()

#### getKeyspaceName

    public java.lang.String getKeyspaceName()

#### getAllFilePaths

    public java.util.List<java.lang.String> getAllFilePaths()

#### tryComponentFromFilename

    public static Pair<Descriptor,Component> tryComponentFromFilename(java.io.File dir,
                                                                      java.lang.String name)

Returns:
  Descriptor and Component pair. null if given file is not acceptable as SSTable component. If component is of unknown type, returns CUSTOM component.

#### componentsFor

    public static java.util.Set<Component> componentsFor(Descriptor desc)

Discovers existing components for the descriptor. Slow: only intended for use outside the critical path.

#### discoverComponentsFor

    public static java.util.Set<Component> discoverComponentsFor(Descriptor desc)

#### estimateRowsFromIndex

    protected long estimateRowsFromIndex(RandomAccessReader ifile)
                                  throws java.io.IOException

Returns:
  An estimate of the number of keys contained in the given index file.
Throws:
  `java.io.IOException`

#### bytesOnDisk

    public long bytesOnDisk()

#### toString

    public java.lang.String toString()

Overrides:
  `toString` in class `java.lang.Object`

#### readTOC

    protected static java.util.Set<Component> readTOC(Descriptor descriptor)
                                               throws java.io.IOException

Reads the list of components from the TOC component.

Returns:
  set of components found in the TOC
Throws:
  `java.io.IOException`

#### appendTOC

    protected static void appendTOC(Descriptor descriptor,
                                    java.util.Collection<Component> components)

Appends new component names to the TOC component.

#### addComponents

    public void addComponents(java.util.Collection<Component> newComponents)

Registers new custom components. Used by custom compaction strategies. Adding a component for the second time is a no-op. Don't remove this - this method is a part of the public API, intended for use by custom compaction strategies.

Parameters:
  `newComponents` - collection of components to be added