Операции Couch DB Join, такие как RDBMS - PullRequest
1 голос
/ 24 февраля 2012

Я использую одну БД для хранения простых документов и другую БД для хранения только вложений.Но я храню идентификатор вложения в простых документах БД.Есть ли способ, как выполнить операции соединения двух баз данных, таких как СУБД.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Я знаю, что можно делать объединения в базе данных:

Вот отличный пост на эту тему: http://www.cmlenz.net/archives/2007/10/couchdb-joins

Суть в том, что couchdb может упорядочивать значения json, включаясписки.

Итак, давайте возьмем это сверху ... CouchDB, как вы знаете, хранит документы JSON.Он использует функции карты для «генерации» упорядоченных пар «ключ-значение» (вот страница из окончательного руководства по couchdb: http://guide.couchdb.org/draft/views.html) Итак, давайте возьмем супер простой пример, а затем сложный, который нам нужен для «соединений».

Это функция карты, которая просматривает каждый документ в БД, проверяет, есть ли у документа автор, и если он есть, отображает его автора и его сообщение.Результатом будет список «пар ключ-значение», упорядоченных по ключам, в данном случае авторов (и это в алфавитном порядке).

function (doc) {
  if (doc.author) {
    emit(doc.author, doc.post);
  }
}

Теперь наш сложный пример.В этом примере предполагается, что в базе данных есть записи в блогах как документы json, а комментарии - как отдельные документы json.В комментариях есть ключ 'post' с идентификатором поста в блоге, к которому они принадлежат, очень похоже на иностранные идентификаторы в mySQL.

function(doc) {
  if (doc.type == "post") {
    emit([doc._id, 0], doc);
  } else if (doc.type == "comment") {
    emit([doc.post, 1], doc);
  }
}

Так что, черт возьми, происходит?Итак, первое, на что нужно обратить внимание, это «другое».Эта функция фактически отображает записи и комментарии в блоге в одном и том же виде (упорядоченный список пар значений ключа).

«doc._id» - это идентификатор конкретного сообщения, а «doc.post» - это идентификаторсообщение комментарий принадлежит двум.Таким образом, весь список упорядочен по идентификатору записи в блоге.

Если doc.type - это «запись в блоге», в массиве добавляется «0» для обозначения, а «1» - для документов.это «комментарии».Теперь вот магия.Документы (посты и комментарии) упорядочены в одном списке пар ключ-значение, но поскольку CouchDB может упорядочивать массивы, он будет перемещать те, у которых «1» (комментарии) находится между одним постом в блоге и следующим.Имеет смысл?

Ха-ха, настолько отличается от того, к чему мы привыкли, и это всего лишь одно творческое решение.Есть много других способов создать результат, который вам может понадобиться.Надеюсь, что это полезно!

0 голосов
/ 24 февраля 2012

Нет возможности присоединиться, однако вы можете хранить вложения в той же базе данных или в тех же документах, которые ссылаются на них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...