Обход ссылки Riak как соединение?

Я надеюсь хранить изображения в базе данных NoSQL (<5 МБ) и связывать их со статьями в другом блоке. Какую скорость функция обхода ссылки Riak предлагает? Похож на это соединение RDBMS вообще?

7
задан tesserakt 16 June 2010 в 04:38
поделиться

2 ответа

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

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

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

11
ответ дан 6 December 2019 в 10:47
поделиться

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

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

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

ПОЛУЧИТЬ / raw / artist / TheBeatles / album, , / track, _, 1 «/ Raw» - это начало URL-адреса. пространство имен, "исполнители" - это ведро, «TheBeatles» - это ключ исходного объекта. Ниже приведены спецификации соответствия по каким ссылкам следовать, в форме ведра, бирки, держать троек, где подчеркивания соответствуют чему угодно. Третий параметр, «сохранить» говорит, что нужно вернуть результат этого шага, а это означает, что вы можете получить результаты с любого шага вы хотите, в любом сочетании.Я не знаю о тебе, но мне это кажется более естественно, чем это:

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

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

7
ответ дан 6 December 2019 в 10:47
поделиться