Как вы обрабатываете отношения в базе данных NoSQL?

Со стандартным RDMS я могу найти отношения, используя первичные ключи и внешние ключи. Если мне нужны последние комментарии, я просто заказываю datetime. Если мне нужны все комментарии пользователя, я получаю, когда комментарий принадлежит этому пользователю.

Другими словами, я могу использовать индексы для фильтрации результатов. Не только первичный ключ.

Однако в документе и ключевом значении NoSQL я не могу понять, как я могу использовать их гораздо больше, чем текстовый дамп. Единственное, что вы можете сделать, это получить значение с помощью идентификатора.

Мне нужны некоторые примеры того, как вы моделируете данные в NoSQL, когда вы больше не можете использовать индексы или фильтры. Как сортировать и искать данные?

Ответ 1

Если вам нужны вторичные индексы, как вы описываете, то вы не можете просто использовать любую нереляционную базу данных. Базы данных BigTable, такие как Cassandra (и, возможно, другие), допускают вторичные индексы.

Если вам нужно искать вещи в хранилище ключевых значений на основе значений, вам нужно будет сделать объявление. Вы можете:
1) Создайте свои собственные ключи, которые указывают на исходные ключи, а затем сохраняйте эти пары на новых вставках, обновлениях и удалении исходных пар.
2) Просто посмотрите на каждое значение, грубую силу, офф-лайн, один раз в день и где-нибудь сохраните ответ. Очевидно, что это не сработает, если вам понадобятся новые данные.

Сортировка данных, вероятно, потребуется сделать на уровне приложения или с помощью пользовательских отсортированных наборов, если вы используете методы (1) и Redis.