Подтвердить что ты не робот

Почему мои базы данных CouchDB растут так быстро?

Мне было интересно, почему моя база данных CouchDB быстро росла, поэтому я написал небольшой тестовый скрипт. Этот сценарий изменяет атрибут документа CouchDB 1200 раз и принимает размер базы данных после каждого изменения. После выполнения этих 1200 шагов записи база данных выполняет шаг уплотнения, и размер дБ измеряется снова. В конце сценарий строит размер баз данных по номерам ревизий. Сравнительный анализ выполняется дважды:

  • Первый раз используется номер версии документа по умолчанию (= 1000) (_revs_limit).
  • Во второй раз число версий документа устанавливается равным 1.

При первом запуске получается следующий сюжет

first run

Второй прогон производит этот сюжет

second run

Для меня это довольно неожиданное поведение. На первом этапе я бы ожидал линейного роста, так как каждое изменение производит новую ревизию. Когда 1000 ревизий достигнуты, значение размера должно быть постоянным, поскольку более старые ревизии отбрасываются. После уплотнения размер должен значительно упасть.

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

Я мог бы понять, что для управления изменениями нужно немного накладных расходов, но такое поведение роста кажется мне странным. Кто-нибудь может объяснить это явление или исправить мои предположения, которые приводят к неправильным ожиданиям?

4b9b3361

Ответ 1

Во-первых, CouchDB сохраняет некоторую информацию даже для удаленных версий (только идентификатор и идентификатор ревизии), потому что для этого требуется репликация.

Во-вторых, вставка документов по одному является неоптимальной из-за того, как данные сохраняются на диске (см. WikiPedia), это может объяснить суперлинейный рост в первом графе.