Сжатие CouchDB и удаление документов - безразличное уплотнение? - PullRequest
5 голосов
/ 31 июля 2011

Принятие простой CouchDB к теории, что сжатие CouchDB совершенно безразлично к удаленным документам.

Удаление документа с дивана с помощью метода DELETE приводит к следующему при попытке получить его:

локальный: 5984 / ENQ / удален-док-идентификатор { "Ошибка": "not_found", "причина": "удален"}

Ожидаемая.

Теперь я сжал базу данных: локальный: 5984 / ENQ / _compact {'ok': правда}

И проверка уплотнения завершена "compact_running": false

Теперь я ожидаю, что CouchDB вернет not_found, причина "отсутствует" в простом GET локальный: 5984 / ENQ / удален-док-идентификатор { "Ошибка": "not_found", "причина": "удален"}

И попытка с помощью? Rev = удаленный_rev дает мне полный документ, да для бесполезных данных.

Так что я прав, полагая, что сжатие couchdb не показывает особой обработки для удаленных документов и просто смотрит на число оборотов снова, предельное число оборотов при принятии решения, что является частью сжатия. Есть ли специальный rev_limit, который мы можем установить для удаленных документов?

Конечно, единственное решение не может быть _purge? на данный момент у нас должно быть тысячи осиротевших удаленных документов, и хотя мы хотим сохранить некоторую историю версий для обычных документов, мы не хотим уменьшать наш rev_limit до 1, чтобы помочь в этом сценарии

Какие проблемы с репликацией мы должны знать при продувке?

Ответы [ 3 ]

7 голосов
/ 21 августа 2011

Удаленные документы сохраняются навсегда (потому что это важно для обеспечения возможной согласованности между репликами).Итак, поведение, которое вы описали, является преднамеренным.

Чтобы максимально эффективно удалить документ, используйте глагол DELETE, поскольку в нем хранятся только _id, _rev и удаленный флаг.Конечно, вы можете достичь того же самого большего вручную через POST или PUT.

Наконец, _purge существует только для крайних случаев, когда, например, вы вставили важный пароль в документ couchdb и нуждаетесь в этом.ушел с диска.Это не рекомендуемый метод сокращения базы данных, обычно он делает недействительными любые ваши представления (что приводит к полной перестройке) и также портит репликацию.

4 голосов
/ 04 августа 2011

Добавление документа, его удаление и последующее сжатие не возвращает базу данных CouchDB в первоначальное состояние. Удаленный документ сохраняется путем сжатия, хотя в обычном случае результирующий документ имеет небольшой размер (только _id, _rev и _deleted = true). Причиной этого является тиражирование. Представьте себе следующее:

  • Создать документ.
  • Репликация БД на удаленную БД.
  • Удалить документ.
  • Компактная БД.
  • Повторная репликация БД в удаленную БД.

Если документ полностью удален после удаления + сжатия, то вторая репликация не будет знать удаленной БД, что документ был удален. Это может привести к несовместимости двух БД.

Обнаружена проблема, которая может привести к тому, что документ в БД не будет маленьким; однако это не относится к методу HTTP DELETE AFAIK (хотя я могу ошибаться). Билет здесь:

https://issues.apache.org/jira/browse/COUCHDB-1141

Основная идея заключается в том, что в DELETE может быть включена информация об аудите, которая будет храниться путем сжатия. Убедитесь, что вы не публикуете полное тело документа с помощью метода DELETE (это может объяснить, почему документ на самом деле не удален).

1 голос
/ 22 мая 2012

Чтобы уточнить ... из нашего опыта вам нужно нажать на УДАЛИТЬ с идентификатором и компакт, чтобы полностью удалить данные документа.

Как указывалось выше, вы все равно будете иметь "данные заголовка" в своей базе данных впоследствии.

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