Чтобы ответить на ваш вопрос физического хранилища, ключевая функция, которая позволяет Cassandra писать быстро, состоит в том, что они только для добавления . То есть Кассандра всегда записывает только последовательные блоки на диск; во время записи не требуется выполнять медленный поиск случайных расположений дисков.
Когда столбец обновляется, происходят две вещи: запись добавляется в журнал фиксации (для восстановления после сбоя), и Memtable в памяти обновляется. Как только Memtable заполнится, он будет записан на диск как новый SSTable. Таким образом, длина данных не имеет значения, поскольку вы не пытаетесь вписать их в структуру диска фиксированной длины.
SSTable доступны только для чтения - вы никогда не возвращаетесь и не перезаписываете старые значения при обновлении, вы просто пишете новые. На чтении, Кассандра сначала ищет в Memtable ключ. Если он не находит его, Кассандра сканирует SSTables в порядке от самого нового до самого старого и останавливается, когда находит ключ. Это дает вам самое последнее значение.
Также есть несколько оптимизаций. Каждый SSTable имеет связанный фильтр Блума для своих ключей, который представляет собой компактный вероятностный индекс, который может давать ложные срабатывания, но не ложные отрицания. Если ключ отсутствует в фильтре Блума, вы можете безопасно пропустить этот SSTable, поскольку он гарантированно не содержит ключ, хотя иногда вы можете прочитать SSTable, который вам не нужен.
Когда вы получаете слишком много SSTable, они объединяются в больший в процессе, называемом compaction . По сути, это делает большую сортировку слиянием на SSTables. Это позволяет Cassandra освободить пространство для значений, которые были перезаписаны или удалены, и дефрагментировать строки, которые были распределены по нескольким таблицам SSTable.
См. http://www.mikeperham.com/2010/03/13/cassandra-internals-writing/ и http://wiki.apache.org/cassandra/MemtableSSTable для получения дополнительной информации.