AFAIK, у Кассандры есть ALLOW FILTERING
с версии 1.
Также, чтобы объяснить ALLOW FILTERING
,
Согласно документации по датастасу,
Давайте возьмемнапример, следующая таблица:
CREATE TABLE blogs (blogId int,
time1 int,
time2 int,
author text,
content text,
PRIMARY KEY(blogId, time1, time2));
Если вы выполните следующий запрос:
SELECT * FROM blogs;
Cassandra вернет вам все данные, которые содержит таблица блогов.
Если вам теперь нужны только данные в указанное время1, вы естественным образом добавите равное условие в столбец time1:
SELECT * FROM blogs WHERE time1 = 1418306451235;
В ответ вы получите следующее сообщение об ошибке:
Bad Request: Невозможно выполнить этот запрос, так как он может включать фильтрацию данных и, следовательно, может иметь непредсказуемую производительность.Если вы хотите выполнить этот запрос, несмотря на непредсказуемость производительности, используйте ALLOW FILTERING.
Cassandra знает, что он не сможет выполнить запрос эффективным способом.Поэтому он предупреждает вас: «Будьте осторожны.Выполнение этого запроса как такового может быть не очень хорошей идеей, поскольку оно может использовать много ваших вычислительных ресурсов ».
Единственный способ, которым Cassandra может выполнить этот запрос, - это извлечь все строки из блогов таблицы, а затемотфильтровывать те, у которых нет запрошенного значения для столбца time1.
Если ваша таблица содержит, например, 1 миллион строк, и 95% из них имеют запрошенное значение для столбца time1, запрос все равно будетбыть относительно эффективным, и вы должны использовать ALLOW FILTERING.
С другой стороны, если ваша таблица содержит 1 миллион строк и только 2 строки содержат запрошенное значение для столбца time1, ваш запрос крайне неэффективен.Кассандра будет загружать 999, 998 рядов даром.Если запрос часто используется, вероятно, лучше добавить индекс для столбца time1.
К сожалению, у Cassandra нет возможности провести различие между двумя вышеупомянутыми случаями, поскольку они зависят от распределения данных таблицы,Поэтому Кассандра предупреждает вас и надеется сделать правильный выбор.
Спасибо,
Гарри