Что на самом деле происходит, когда я сжимаю базу данных CouchDB? - PullRequest
4 голосов
/ 19 марта 2012

Я заметил, что каждый раз, когда я сжимаю свой экземпляр CouchDB после вставки какого-либо материала, размер довольно сильно падает (иногда даже до 20%).

Я не удаляю и не изменяю никакие данные, все, что я делаю, это просто вставляю новые записи, сжимаю их, и размер уменьшается.

Что на самом деле происходит, когда я сжимаю базу данных? Это как-то сжимает данные? Или потому, что каждая новая запись сопровождается каким-то мусором, который позже удаляется компактом?

1 Ответ

9 голосов
/ 20 марта 2012

CouchDB использует формат файла только для добавления. Код никогда не выполняет fseek(3). Любая усеченная часть файла .couch, которая начинается с начала, является допустимым файлом базы данных. (CouchDB сканирует в обратном направлении от конца, чтобы найти свой «заголовок»).

Стоимость этой архитектуры заключается в записи большого количества дублирующихся данных каждый раз, когда вы вносите изменения. По сути, couch записывает ваши новые данные в конец файла, затем записывает все обновления метаданных, необходимые для включения этих данных в дерево данных, и записывает новый заголовок для постоянной фиксации всего этого.

Таким образом, вы получаете много повторяющихся метаданных (внутренние узлы b-дерева и т. Д.), Не говоря уже о данных старого документа, накапливающихся в файле .couch. Опять же, это плата за пуленепробиваемую технику, никогда не перезаписывающую данные.

Сжатие сканирует только соответствующие данные из старого файла .couch и записывает только эти данные в новый файл .couch. Би-деревья сбалансированы, старых документов больше нет. Это красиво и чисто.

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