Переход по ссылкам Riak как соединение?

Я хочу хранить изображения в базе данных NoSQL (‹5 МБ) и связывать их со статьями в другом сегменте. Какую скорость предлагает функция перехода по ссылке Riak? Это вообще похоже на соединение РСУБД?


person tesserakt    schedule 16.06.2010    source источник


Ответы (2)


Ссылки совсем не похожи на JOIN (которые включают декартово произведение), но в некоторых смыслах их можно использовать для аналогичных целей. Они очень похожи на ссылки в HTML-документе.

При переходе по ссылке вы либо начинаете с одного ключа, либо создаете задание по уменьшению карты, которое начинается с нескольких ключей. (Обход/обход ссылок на самом деле является частным случаем map-reduce.) Эти значения извлекаются, их ссылки фильтруются в соответствии с вашей спецификацией (сегмент, тег), а затем совпавшие ссылки передаются на следующую фазу (или обратно на клиент). Конечно, все это делается параллельно (в отличие от JOIN) с высокой локальностью данных.

Кроме того, map-reduce сам по себе не медленный, просто у вас нет сложного планировщика запросов, который сделает всю тяжелую работу за вас; вы должны подумать о том, как вы будете запрашивать и организовывать свои данные по мере необходимости.

person seancribbs    schedule 16.06.2010

Думайте об односторонних отношениях и делайте запросы так же быстро, как обычно. Не такой медленный, как MapReduce.

Откуда: http://seancribbs.com/tech/2010/02/06/why-riak-should-power-your-next-rails-app/

Первый способ, которым Riak справляется с этим, — переход по ссылкам. Каждая информация, хранящаяся в Riak, может иметь одностороннюю связь с другими данными через HTTP-заголовок Link. В каноническом примере вы знаете ключ группы, которую вы сохранили в корзине «исполнители» (корзины Riak похожи на таблицы базы данных или корзины S3). Если этот исполнитель связан с его альбомами, которые, в свою очередь, связаны с треками в альбомах, вы можете найти все созданные треки в одном запросе. Как я опишу в следующем разделе, это гораздо менее болезненно, чем JOIN в SQL, потому что каждый элемент обрабатывается независимо, а не таблица за раз. Вот как будет выглядеть этот запрос:

GET /raw/artists/TheBeatles/albums,,/tracks,_,1 «/raw» — это верхняя часть пространства имен URL, «artists» — это ведро, «TheBeatles» — исходный объект ключ. Далее следуют спецификации соответствия, по которым следует переходить по ссылкам, в форме ведра, тега, сохраняемых троек, где знаки подчеркивания соответствуют чему угодно. Третий параметр, «keep», говорит о возврате результатов этого шага, что означает, что вы можете получить результаты любого шага, который вы хотите, в любой комбинации. Не знаю, как вам, а мне это кажется более естественным, чем вот это:

ВЫБЕРИТЕ треки.* ИЗ треков ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ альбомов ВКЛ треки.album_id = альбомы.ид ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ исполнители НА альбомы.артист_ид = исполнители.ид ГДЕ исполнители.название = "The Beatles" Предупреждение о ссылках заключается в том, что они по своей сути являются однонаправленными, но это могут быть преодолены с небольшими трудностями в вашем приложении. Без ограничений ссылочной целостности в вашей базе данных SQL (которые ActiveRecord делал болезненными в прошлом), у вас нет твердой гарантии, что ваши команды DELETE или UPDATE в любом случае не приведут к потере строки. Мы немного избалованы, потому что ActiveRecord автоматически обрабатывает связывание ассоциаций.

Место, где функция перехода по ссылке действительно сияет, находится в самореферентных и глубоких транзитивных отношениях (подумайте о has_many :through в широком смысле). Поскольку вам не нужно создавать виртуальную таблицу с помощью JOIN и псевдонимов разных версий одной и той же таблицы, вы можете легко делать такие вещи, как графы социальных сетей (друзья друзей друзей) и структуры данных, такие как деревья и списки.

person databyte    schedule 16.06.2010
comment
Хранится в заголовке, означает ли это, что ссылка, хранящаяся в документе, является ссылкой http на расположение связанного документа? - person tesserakt; 16.06.2010
comment
Доступ к Riak осуществляется через HTTP, поэтому технически да — документ хранится по ссылке http. Но вам не нужно проходить цепочку ссылок, чтобы добраться до вашего документа, вы можете получить к нему прямой доступ. - person databyte; 18.06.2010