Я предполагаю, что в приведенном выше случае вы специально пытаетесь получить имя пользователя по электронной почте.
Короткий ответ:
В Cassandra вы не сможете получить имя пользователя из электронной почты в одном запросе, используя определенную вами структуру таблицы. Вам нужно будет запросить users_by_email, чтобы получить идентификатор, а затем запросить пользователей, чтобы получить имя пользователя. Лучшим вариантом было бы добавить столбец имени пользователя в таблицу users_by_email.
Длинный ответ:
Из-за базовых механизмов, с помощью которых Cassandra хранит данные на диске, единственные доступные параметры, которые вы можете использовать в предложении where, должны быть в основном ключе. Первичный ключ состоит из двух разных типов ключей. Во-первых, это ключ раздела, который используется для физического разделения файлов на диске и между узлами в кластере. Во-вторых, ключи кластера, которые используются для организации данных, хранящихся в разделе, и помогают в эффективном извлечении данных. Еще одна важная часть, которую следует отметить, заключается в том, что если вы используете предложение WHERE в своем запросе, оно должно содержать все ключи раздела для каждого вызова. Это необходимо для эффективного извлечения данных. Если вы хотите получить более подробную информацию о работе предложения WHERE, взгляните на эту ссылку:
http://www.datastax.com/dev/blog/a-deep-look-to-the-cql-where-clause
Теперь, когда вы знаете, каковы ограничения предложения WHERE, возникает вопрос, как их обойти. Первое, что вам нужно знать, это то, что Cassandra не является RDBMS, и вы не можете выполнять JOIN для таблиц. Это означает, что нам нужно забыть все правила, которые мы выучили за столько лет о том, как правильно нормализовать данные в базе данных, и начать думать о проблеме по-другому. В целом Cassandra разработана для шаблона таблицы на запрос. Это означает, что для каждого шаблона доступа к данным (т.е. запроса), с которым вы собираетесь работать, существует связанная таблица, которая содержит данные для этого запроса и имеет правильные ключи, позволяющие фильтровать данные соответствующим образом. Я не собираюсь вдаваться во все мельчайшие детали того, как правильно моделировать ваши данные, но я предлагаю вам пройти бесплатный курс Datastax Academy по моделированию данных, доступный здесь:
https://academy.datastax.com/courses/ds220-data-modeling
Итак, насколько я понимаю вашу конкретную потребность, я думаю, что вы можете изменить свою таблицу пользователей, чтобы она выглядела следующим образом:
CREATE TABLE users_by_email(
email text,
username text,
id_ UUID,
PRIMARY KEY (email, username)
);
Эта настройка таблицы позволит вам выбрать имя пользователя по электронной почте, используя запрос, например:
SELECT username FROM users_by_email WHERE email=XXXXX;
person
bechbd
schedule
22.02.2016