К сожалению, столбец, для которого я выбираю записи, не относится к столбцу ключа. Может ли это быть медленным из-за этого?
Да, вероятно, поэтому все идет медленно. Хотя, чтобы быть справедливым, Spark предназначен для запроса распределенных хранилищ данных. Он не предназначен для быстрой работы.
Поэтому я предполагаю, что ваше определение PRIMARY KEY выглядит следующим образом:
PRIMARY KEY((A,B),C)
Причина, по которой запросы по C
медленные, заключается в том, что Кассандра (Spark) не может определить, какой узел в кластере отвечает за данные на основе C
. Следовательно, каждый узел должен быть проверен на значения C
, которые удовлетворяют вашему запросу.
Будет ли запрос по всем 3 быстрее?
Да, запросы по всем трем, скорее всего, будут быстрее. Это потому, что ключ раздела состоит из A
и B
. При запросе на основе ключа раздела в этом случае значения ключей A
и B
хэшируются вместе. То, что ha sh сопоставляется с диапазонами токенов, за которые отвечает каждый узел. Таким образом, целевой узел, содержащий требуемые данные, может быть легко определен, и нет необходимости проверять каждый узел на соответствие значений.
Если бы я запрашивал, используя только 1 столбец из основного ключ (скажем, A), это также будет быстро, верно?
Нет, не будет. Учитывая определение ключа раздела (A,B)
, узел, содержащий данные, не может быть определен только A
. Фактически, поскольку наборы результатов, вероятно, будут больше, запросы на A
будут, вероятно, медленнее, чем запросы на C
.