Запрос Кассандры по первичному ключу и ошибке столбца - PullRequest
1 голос
/ 27 апреля 2019

Схема

CREATE TABLE books (
   isbn text PRIMARY KEY,
   author text
);

insert into books (isbn, author) values ('111', 'Sally');
insert into books (isbn, author) values ('112', 'Fred');
insert into books (isbn, author) values ('113', 'Joe');

С вышеуказанными данными я могу запросить с помощью первичного ключа 111

select * from books where isbn = '111';

Однако, когда я ставлю author в условии where он выдает ошибку

select * from books where isbn = '111' and author = 'Fred';

Query 1 ERROR: Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING

Я не могу понять, что если данные уже отфильтрованы по первичному ключу (который является только одной записью) почему выдается ошибка?

Во-вторых, если я использую allow filtering, есть ли какое-либо влияние на производительность?

Редактировать: https://dzone.com/articles/apache-cassandra-and-allow-filtering дал мне некоторую подсказку.

Ответы [ 2 ]

3 голосов
/ 27 апреля 2019

Эта ссылка может вам помочь.Из того, что я понимаю, производительность cassandra снижается, если вы allow filtering (предполагая, что это похоже на SQL RBAR , который работает медленно, и почему он выдает ошибку при фильтрации)

IЯ все еще относительно новичок в Cassandra, но из того, что я прочитал, вам нужно выполнить запрос select, чтобы включить ВСЕ столбцы, определенные в вашем первичном ключе, ЕСЛИ вы не определили вторичный индекс.Но есть ограничения с вторичными индексами.

HTH Удачи.

0 голосов
/ 04 мая 2019

В Cassandra вы не можете запрашивать столбцы без разделов или кластеризации.

Если вы хотите, чтобы ваш конкретный вариант использования работал, автор должен быть включен в декларацию первичного ключа.

CREATE TABLE books (isbn text, author author, PRIMARY KEY (isbn, author))

NOTE : с этой моделью данных вы ДОЛЖНЫВСЕГДА запрашивайте с isbn, но автор не обязателен.

Вы не должны использовать разрешение фильтрации.Там будет влияние на производительность.

То, как вы объявляете ключи разделов и кластеризации в cassandra, очень важно и должно использоваться по запросу.Если у вас есть новый вариант использования для запроса тех же данных, но в другом предложении where, создайте новую таблицу!: D

...