Оператор Cassandra не равный
вопрос ко всем экспертам Cassandra там.
у меня есть семейство столбцов с примерно миллионом записей.
Я хотел бы запросить эти записи таким образом, чтобы я мог выполнить Not-Equal-To
вид операции.
я погуглил на этом, и кажется, я должен использовать какой-то Map-Reduce
.
может кто-нибудь сказать мне, какие варианты доступны в этой связи.
1 ответов
Я могу предложить несколько подходов.
1) Если у вас есть ограниченное количество значений, которые вы хотели бы проверить на не-равенство, рассмотрите моделирование их как boolean
столбцы (т. е. столбец isEqualToUnitedStates
С true или false).
2) в противном случае рассмотрите возможность эмуляции неподдерживаемых запросов != X
объединив результаты двух отдельных запросов, < X
и > X
на стороне клиента.
3) Если ваша схема не может поддерживать любой тип запроса выше, вы можете иметь прибегнуть к написанию пользовательских подпрограмм, которые будут выполнять фильтрацию на стороне клиента и динамически создавать неравный набор. Это будет работать, если вы можете сначала сузить пространство поиска до управляемых пропорций, так что относительно дешево запускать запрос без неравных.
Итак, предположим, вас интересуют все покупки конкретного клиента каждого типа продукта, кроме виджета. Идеальный запрос может выглядеть примерно так:SELECT * FROM purchases WHERE customer = 'Bob' AND item != 'Widget';
теперь, конечно, вы не можете запустить это, но в этом случае вы должны уметь работать SELECT * FROM purchases WHERE customer = 'Bob'
не тратя слишком много ресурсов и фильтра item != 'Widget'
в клиентском приложении.
4) Наконец, если нет способа ограничить данные значимым образом перед выполнением сканирования (запрос без проверки равенства вернет слишком много строк для удобной обработки), вам, возможно, придется прибегнуть к MapReduce. Это означает выполнение распределенного задания, которое будет сканировать все строки таблицы в кластере. Такие работы, очевидно, будет работать намного медленнее, чем собственные запросы, и довольно сложно настроить. Если вы хотите пойти этим путем, пожалуйста, посмотрите в Кассандра Hadoop интеграции.