Имитация соединения для базы данных документов NoSQL - PullRequest
1 голос
/ 14 октября 2011

Существуют ли какие-либо обходные пути для выполнения запроса на соединение с базой данных документов NoSQL?

Пример: нам нужно выбрать статьи за последний месяц пользователями с рейтингом более тысячи.Решение SQL -

SELECT a.* FROM Articles as a
INNER JOIN Users as u ON a.UserId = u.Id
WHERE a.Date > (Now - Month) AND u.Rating > 1000

Я могу представить несколько решений NoSQL.Во-первых, решение для двух запросов:

  1. Извлечение пользователей с рейтингом более 1000
  2. Извлечение статей за последний месяц для этих пользователей

Мне не нравитсятак как мне нужно сделать два запроса, и мне нужно получить всех пользователей с рейтингом> 1000 (что если у меня 1кк пользователей?)

Другое решение NoSQL, которое приходит мне в голову, - это денормализация.Но я не большой поклонник этого.Я был бы не против помещения коллекции комментариев в сущность поста (поскольку комментарии принадлежат посту), но я не люблю помещать пользователя в статью или статьи внутри пользователя.

Существуют ли другие решения?

Ответы [ 3 ]

1 голос
/ 14 октября 2011

RavenDB Multi Maps отлично справляется с этими сценариями:

http://ayende.com/blog/89089/ravendb-multi-maps-reduce-indexes

1 голос
/ 14 октября 2011

Вы можете сделать это, используя Multi Maps / уменьшить индексы с помощью RavenDB .Смотри здесь .

0 голосов
/ 21 августа 2012

Другим решением может быть playOrm, где вы можете разделить таблицу, выбрать и объединить разделы. Это в основном похоже на спящий режим с JQL и всем, кроме вашего запроса в разделы. Возможно, если вы разделите по месяцам, вы можете выполнить простой запрос выбора старой школы для этого раздела и присоединить его к чему-то еще. noSql теперь, кажется, имеет соединения через playOrm;). Это, конечно, не делает объединений на ОГРОМНЫХ таблицах. PARTITION должен быть сопоставим по размеру с размерами таблицы RDBMS при выполнении объединений .... Размер таблицы может быть бесконечным (т. Е. У вас есть бесконечные разделы).

...