Призрачные вложения в CouchDB - PullRequest
3 голосов
/ 15 сентября 2011

У меня проблема с CouchDB 1.1.0. Я создал базу данных на своем ноутбуке и скопировал ее на мой сервер. Затем я добавил вложения в свою локальную базу данных и скопировал их в удаленную базу данных.

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

Если я проверю размер базы данных, они здесь. Но я не могу их получить и не могу их удалить. (Очистка базы данных не удаляет их).

При репликации с удаленного компьютера в другую БД у меня по-прежнему реплицируются «призрачные вложения».

У кого-нибудь есть идеи по этому поводу? Как я могу удалить это вложение?

Ответы [ 2 ]

7 голосов
/ 15 сентября 2011

Возможно, у вас есть документ конфликт .

В отличие от военного или этического конфликта, CouchDB конфликт является нормальным и полезным, обычно возникает после репликации. (Конфликты несколько похожи на ветки в Git, Mercurial или Bzr.)

Во время репликации CouchDB иногда получает альтернативные версии того же документа. В этой ситуации, вместо замены одной ревизии другой, CouchDB сохраняет обе. К сожалению, когда вы запрашиваете CouchDB для получения этого документа, он должен решить, какой из них отправить; и в основном он просто выбирает одну ревизию и отправляет ее. Используя обычный GET /db/doc_id запрос, вы никогда бы не поняли, что «конфликтующая» (альтернативная) ревизия где-то скрывается в базе данных.

Приведенная выше ссылка показывает, как находить и разрешать конфликты (при удалении нежелательной ревизии оставшаяся ревизия будет видна.) Важнейшим примером является представление для поиска конфликтов:

function(doc) {
  // Map function in a CouchDB view to find conflicts.
  if(doc._conflicts) {
    emit(doc._conflicts, null);
  }
}

Если вы запросите это представление, я думаю, вы увидите некоторые конфликты. Если представление возвращает 0 строк, то это вовсе не проблема, и нам придется продолжать думать о вашей проблеме.

0 голосов
/ 16 сентября 2011

Да, у меня были конфликты. Спасибо Джейсон

Если кому-то нужна дополнительная информация о конфликтах, просто

http://guide.couchdb.org/draft/conflicts.html

Я только что создал небольшие скрипты Node, чтобы получить все конфликты через представление и удалить их.

...