Как Cassandra может извлекать строки только с помощью ключа разделения?
В базах данных, похожих на BigTable, хранятся строки, отсортированные по их ключам.
Cassandra использует комбинацию ключей разделения и кластеризации для хранения и распределения данных; Тем не менее, вы можете выбрать строки только с ключом разделения!
Как Кассандра сконструирована таким образом?
Например, способ обойти это в RocksDB состоит в том, что вы можете иметь одно семейство столбцов по умолчанию по ключу раздела, а другое - с ключами комбинации разделения и кластеризации, итерировать отсортированные данные и извлекать по умолчанию семейство столбцов, что в итоге приводит к очень высокой сложности пространства.!
Обновление: я полагаю, что Cassandra пытается сохранить каждый столбец в отдельном ключе. Он начинается с ключа раздела и перебирает различные "имена столбцов" - возможно, комбинацию других столбцов кластеризации. Обратитесь к изображению основного механизма хранения.
ВЫБЕРИТЕ * От авторов, ГДЕ имя = 'Том Клэнси' И год = '1993'. В таблице, где "имя" - это ключ раздела, а "год" и "заголовок" - это столбцы кластеризации.
Визуализация Cassandra Storage Layer для вышеуказанного запроса.
2 ответа
Кассандра, как вы упомянули, имеет ключ раздела и ключ кластера.
Вот очень короткое и ясное объяснение предмета с хорошими примерами Datastax - Самое важное, что нужно знать при моделировании данных Cassandra: первичный ключ.
Важные выводы из этого документа:
Первый элемент в нашем ПЕРВИЧНОМ КЛЮЧЕ - это то, что мы называем ключом раздела. Ключ раздела имеет специальное использование в Apache Cassandra помимо того, что показывает уникальность записи в базе данных. Другой целью, которая очень важна в распределенных системах, является определение локальности данных.
Это объясняет, как выбор строк только с помощью ключа разделения является частью дизайна Кассандры.
Если ключ раздела имеет более одного столбца в своем определении -
Все столбцы, перечисленные после ключа раздела, называются столбцами кластеризации. Вот где мы делаем огромный перерыв в реляционных базах данных. Если ключ раздела важен для локальности данных, столбец кластеризации указывает порядок, в котором данные расположены внутри раздела.
При правильной разработке столбцов кластеризации запросы на чтение должны занимать меньше времени по сравнению с отсутствием определения столбцов кластеризации.
Помимо ссылки выше, вы можете найти действительно хорошее объяснение и примеры в этом вопросе. (Разница между ключом раздела, составным ключом и ключом кластеризации в Cassandra?).
Обновить:
База данных хранит и находит данные, используя вложенный порядок сортировки. Данные хранятся в иерархии, которую должен пройти запрос. У вас есть общий ключ для разных значений столбцов кластеризации. Взгляните сюда: кластеризация столбцов
Все данные в Cassandra хранятся в разделах, поэтому, когда у вас есть условие только для ключа (ключей) раздела, вы извлекаете все строки, имеющие ключи раздела - они записываются одна за другой. Вы можете найти больше информации в руководстве по архитектуре DSE.