Как выполнить операцию пересечения двух наборов данных в хранилище Key-Value?

Допустим, у меня есть 2 набора данных, один для правил, а другой для значений.

Мне нужно отфильтровать значения на основе правил.

Я использую хранилище Key-Value (couchbase, cassandra и т. д.). Я могу использовать multi-get для извлечения всех значений из одной таблицы и всех правил для другой и выполнять проверку в цикле.

Однако я считаю, что это очень неэффективно. Я перемещаю по сети огромный объем данных (значений), а клиент занят фильтрацией.

Каков общий шаблон для поиска пересечения между двумя таблицами с хранилищем Key-Value?


person janetsmith    schedule 28.08.2014    source источник
comment
Downvoter, не могли бы вы поделиться причиной?   -  person janetsmith    schedule 29.08.2014


Ответы (1)


Идея модели данных nosql состоит в том, чтобы записывать данные денормализованным способом, чтобы таблица могла отвечать на точный запрос. В качестве примера представьте, что у вас есть отзывы, сделанные покупателями в магазинах. Вам нужно знать отзывы, оставленные пользователем в магазинах, а также отзывы, полученные магазином. Это будет смоделировано с использованием двух таблиц

ShopReviews
Пользовательские обзоры

В первой таблице вы запрашиваете идентификатор магазина, а во второй - идентификатор пользователя, но данные записываются дважды и доступны напрямую, используя только доступ по ключу.

Точно так же вы должны организовать значения по правилам (нельзя быть более точным, не зная, какова связь между ними) и так далее. Еще одно соображение: более новые версии nosql db поддерживают коллекции, которые могут помочь смоделировать отношения 1 ко многим.

ХТХ, Карло

person Carlo Bertuccini    schedule 28.08.2014