Подумайте об односторонних отношениях и так же быстро, как и обычные запросы.Не так медленно, как MapReduce.
Первый способ, которым Riak справляется с этим, - это обход ссылок.Каждый элемент данных, хранящийся в Riak, может иметь односторонние отношения с другими данными через HTTP-заголовок Link.В каноническом примере вы знаете ключ группы, который вы сохранили в корзине «художников» (корзины Riak похожи на таблицы базы данных или корзины S3).Если этот исполнитель связан с его альбомами, которые, в свою очередь, связаны с треками в альбомах, вы можете найти все треки, созданные в одном запросе.Как я опишу в следующем разделе, это гораздо менее болезненно, чем JOIN в SQL, потому что каждый элемент обрабатывается независимо, а не таблица за раз.Вот как будет выглядеть этот запрос:
GET / raw / Artist / TheBeatles / album, , / дорожек, _, 1 «/ raw» является вершиной пространства имен URL, «художники »- это ведро,« TheBeatles »- исходный ключ объекта.Ниже приведены спецификации соответствия, по которым следует переходить по ссылкам, в виде сегмента, тега, троек, где подчеркивания соответствуют чему-либо.Третий параметр «keep» говорит, что возвращает результаты этого шага, то есть вы можете получить результаты любого шага в любой комбинации.Я не знаю о вас, но для меня это кажется более естественным, чем это:
ВЫБРАТЬ дорожки. * ИЗ дорожек INNER JOIN альбомы ON track.album_id = album.id INNER JOIN исполнители ON album.artist_id = исполнители.id WHERE Artist.name = "The Beatles" Предостережение ссылок заключается в том, что они по своей природе однонаправлены, но это может быть преодолено с небольшими трудностями в вашем приложении.Без ограничений ссылочной целостности в вашей базе данных SQL (которые ActiveRecord делала болезненными в прошлом), у вас нет надежной гарантии, что ваши DELETE или UPDATE в любом случае не приведут к тому, что строка станет осиротевшей.Мы в некотором роде избалованы, потому что ActiveRecord обрабатывает связывание ассоциаций автоматически.
Место, где действительно прослеживается функция перехода по ссылкам, - это самореференциальные и глубокие транзитивные отношения (представьте, что has_many: посредством большого текста).Поскольку вам не нужно создавать виртуальную таблицу с помощью JOIN и создавать псевдонимы разных версий одной и той же таблицы, вы можете легко выполнять такие операции, как графы социальных сетей (друзья друзей) и структуры данных, такие как деревья исписки.