Как Cassandra может извлекать строки только с помощью ключа разделения?

В базах данных, похожих на BigTable, хранятся строки, отсортированные по их ключам.

Cassandra использует комбинацию ключей разделения и кластеризации для хранения и распределения данных; Тем не менее, вы можете выбрать строки только с ключом разделения!

Как Кассандра сконструирована таким образом?

Например, способ обойти это в RocksDB состоит в том, что вы можете иметь одно семейство столбцов по умолчанию по ключу раздела, а другое - с ключами комбинации разделения и кластеризации, итерировать отсортированные данные и извлекать по умолчанию семейство столбцов, что в итоге приводит к очень высокой сложности пространства.!

Обновление: я полагаю, что Cassandra пытается сохранить каждый столбец в отдельном ключе. Он начинается с ключа раздела и перебирает различные "имена столбцов" - возможно, комбинацию других столбцов кластеризации. Обратитесь к изображению основного механизма хранения.

ВЫБЕРИТЕ * От авторов, ГДЕ имя = 'Том Клэнси' И год = '1993'. В таблице, где "имя" - это ключ раздела, а "год" и "заголовок" - это столбцы кластеризации.

Визуализация Cassandra Storage Layer для вышеуказанного запроса.

2 ответа

Кассандра, как вы упомянули, имеет ключ раздела и ключ кластера.

Вот очень короткое и ясное объяснение предмета с хорошими примерами Datastax - Самое важное, что нужно знать при моделировании данных Cassandra: первичный ключ.

Важные выводы из этого документа:

Первый элемент в нашем ПЕРВИЧНОМ КЛЮЧЕ - это то, что мы называем ключом раздела. Ключ раздела имеет специальное использование в Apache Cassandra помимо того, что показывает уникальность записи в базе данных. Другой целью, которая очень важна в распределенных системах, является определение локальности данных.

Это объясняет, как выбор строк только с помощью ключа разделения является частью дизайна Кассандры.

Если ключ раздела имеет более одного столбца в своем определении -

Все столбцы, перечисленные после ключа раздела, называются столбцами кластеризации. Вот где мы делаем огромный перерыв в реляционных базах данных. Если ключ раздела важен для локальности данных, столбец кластеризации указывает порядок, в котором данные расположены внутри раздела.

При правильной разработке столбцов кластеризации запросы на чтение должны занимать меньше времени по сравнению с отсутствием определения столбцов кластеризации.

Помимо ссылки выше, вы можете найти действительно хорошее объяснение и примеры в этом вопросе. (Разница между ключом раздела, составным ключом и ключом кластеризации в Cassandra?).

Обновить:

База данных хранит и находит данные, используя вложенный порядок сортировки. Данные хранятся в иерархии, которую должен пройти запрос. У вас есть общий ключ для разных значений столбцов кластеризации. Взгляните сюда: кластеризация столбцов

Все данные в Cassandra хранятся в разделах, поэтому, когда у вас есть условие только для ключа (ключей) раздела, вы извлекаете все строки, имеющие ключи раздела - они записываются одна за другой. Вы можете найти больше информации в руководстве по архитектуре DSE.

Другие вопросы по тегам