Самый быстрый способ запросить Cassandra? Первичный ключ или ключ раздела? - PullRequest
2 голосов
/ 11 марта 2020

Какой самый быстрый способ запросить Cassandra? У меня есть таблица, где первичный ключ состоит из 3 столбцов. Я запрашиваю по одному из этих столбцов, и это невероятно медленно (я запрашиваю через Spark). Был бы запрос по всем 3 быстрее?

enter image description here У меня также есть ключ раздела, который состоит из двух столбцов. К сожалению, столбец, для которого я выбираю записи, не относится к разделу ключа раздела. Может ли это быть медленным из-за этого?

Любое понимание полезно.

1 Ответ

2 голосов
/ 11 марта 2020

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

Да, вероятно, поэтому все идет медленно. Хотя, чтобы быть справедливым, 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.

...