Еще более эффективный подход к этому, чем использование ключевой фильтрации (согласно рекомендации Кев Бернс), заключается в использовании вторичных индексов или Riak Search для моделированияэтот сценарий.
Посмотрите мои ответы на Какая кластеризованная база данных NoSQL для хранения сообщений? и Ссылки в Riak: что они могут делать / не делать по сравнению сГраф базы данных? для обсуждения аналогичных случаев.
Вам нужно принять несколько решений, в зависимости от вашего варианта использования.Во всех случаях вы должны начать с группы company , чтобы у каждой компании был уникальный ключ.
1) Хранить ли представляющие интерес предметы в 2 отдельных корзинах ( Новости и Продукты ) или в одном (что-то вроде items_of_interest ) зависит от ваших предпочтений и простоты запроса.Если вы всегда будете запрашивать новости и продукты для компании в одном запросе, вы можете также хранить их в одной корзине.Но я рекомендую использовать 2 отдельных, чтобы их было легче отслеживать, особенно если у вас есть что-то вроде отдельных вкладок или страниц для «Company X-Products» и «Company X-News».И если вам нужно объединить их в один канал, вы сделаете 2 запроса (один для новостей и один для продуктов) и объедините их в коде клиента (по дате или как угодно).
2) Еслиэлемент новости / продукта может иметь одну и только одну компанию, к которой он принадлежит, создать дополнительный индекс для company_key для каждого элемента.Таким образом, вы можете легко получить все новости или продукты для компании с помощью запроса вторичного индекса (2i) для этой компании.
3) Если существует отношение многие ко многим (если новость / элемент продукта)может принадлежать нескольким компаниям (возможно, новость о совместном предприятии для 2 отдельных компаний)), тогда я рекомендую моделировать отношения как отдельный объект Riak .Например, вы можете создать упоминания сегмента, и для каждой компании, упомянутой в новостях, вы вставите объект Mention с его собственным уникальным ключом, вторичным индексом для company_key, и значение будет содержатьтип («новости» или «продукт») и item_key (ключ новостей или ключ продукта).Подобное извлечение связей для разделения объектов Riak позволяет вам делать много интересных вещей - помечать их произвольно, используя Riak Search, запрашивать их для уведомлений о событиях подписки и т. Д.