В Кассандре ключ разделения распространяет данные по кластеру.Он вычисляет хэш ключа раздела и определяет местоположение данных в кластере.
Единственное исключение - если вы используете ALLOW FILTERING или вторичный индекс, он не требует, чтобы вы также включали все ключи раздела в запросе.
Цель ключа раздела - разделить данные на разделы, где весь раздел хранится на одном узле в кластере.(с каждым узлом, хранящим много разделов).Когда данные считываются или записываются из кластера, для вычисления значения хеш-значения ключа раздела используется функция Partitioner.Это хеш-значение используется для определения узла / раздела, который содержит эту строку.Ключ кластеризации в дальнейшем используется для поиска строки в данном разделе.
Выборочные запросы в Apache Cassandra очень похожи на запросы выбора из реляционной базы данных.Тем не менее, они значительно более ограничены.Атрибуты, разрешенные в предложении 'where' запроса Cassandra, должны включать полный ключ раздела, а дополнительные предложения могут ссылаться только на столбцы ключа кластеризации или вторичный индекс запрашиваемой таблицы.
Требование атрибутов ключа раздела в'where' помогает Cassandra поддерживать постоянное время извлечения набора результатов при масштабировании кластера, позволяя Cassandra определять раздел и, следовательно, узел (и даже файлы данных на диске), на который должен быть направлен запрос.
Если в запросе не указаны значения для всех столбцов из первичного ключа в предложении 'where', Cassandra не выполнит его и выдаст следующее предупреждение:
'InvalidRequest: Ошибка отserver: code = 2200 [Invalid query] message = ”Невозможно выполнить этот запрос, так как он может включать фильтрацию данных и, следовательно, может иметь непредсказуемую производительность.Если вы хотите выполнить этот запрос, несмотря на непредсказуемость производительности, используйте ALLOW FILTERING ”'