Мне было интересно, почему моя база данных CouchDB быстро росла, поэтому я написал небольшой тестовый скрипт. Этот сценарий изменяет атрибут документа CouchDB 1200 раз и принимает размер базы данных после каждого изменения. После выполнения этих 1200 шагов записи база данных выполняет шаг уплотнения, и размер дБ измеряется снова. В конце сценарий строит размер баз данных по номерам ревизий. Сравнительный анализ выполняется дважды:
- Первый раз используется номер версии документа по умолчанию (= 1000) (_revs_limit).
- Во второй раз число версий документа устанавливается равным 1.
При первом запуске получается следующий сюжет
Второй прогон производит этот сюжет
Для меня это довольно неожиданное поведение. На первом этапе я бы ожидал линейного роста, так как каждое изменение производит новую ревизию. Когда 1000 ревизий достигнуты, значение размера должно быть постоянным, поскольку более старые ревизии отбрасываются. После уплотнения размер должен значительно упасть.
Во втором запуске первая ревизия должна привести к определенному размеру базы данных, который затем сохраняется во время следующих шагов записи, поскольку каждая новая ревизия приводит к удалению предыдущей.
Я мог бы понять, что для управления изменениями нужно немного накладных расходов, но такое поведение роста кажется мне странным. Кто-нибудь может объяснить это явление или исправить мои предположения, которые приводят к неправильным ожиданиям?