Couchdb продолжает расти (файлы)

Я очень смущен о поведении CouchDB с точки зрения размера файла базы данных на диске. Похоже, что неважно, что я делаю, файл базы данных становится все больше и больше (даже при удалении/очистке документов или целых базах данных).

Я смотрел файл /var/lib/couchdb/_dbs.couch и никогда не уменьшался в размере. Простой пример:

curl -X PUT http://admin:[email protected]:5984/testdb

_dbs.couch увеличено размер файла на 5kb.

curl -X DELETE http://admin:[email protected]:5984/testdb

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

Я использую довольно стандартную конфигурацию после новой установки.

Является ли это "рабочим, как предполагалось", или здесь что-то не так?

Что еще важно: могу ли я что-нибудь с этим сделать?

Ответ 1

Он работает по назначению, вы просто не смотрите на нужные файлы.

Каждая база данных имеет соответствующие файлы с тем же именем.

Например:

curl -X PUT http://admin:[email protected]:5984/testdb

curl -X PUT http://admin:[email protected]:5984/emaildb

  • Поскольку у вас есть файл _dbs.couch, вы, вероятно, используете CouchDB 2.X.X с функцией sharding. Он создаст несколько файлов в подпапках папки "осколки".

data/ +-- shards/ | +-- 00000000-7fffffff/ | | -- emaildb.124456678.couch | | -- testdb.647948447.couch | +-- 80000000-ffffffff/ | | -- emaildb.124456678.couch |___|____-- testdb.647948447.couch

Дополнительная информация: http://docs.couchdb.org/en/latest/cluster/sharding.html

  • Вкратце, функции осколков и кластеров позволяют иметь распределенную базу данных с распределенным вычислением карты/уменьшения. В приведенном выше примере каждый dbs имеет 2 осколка, что означает, что каждая база данных охватывает более двух файлов. Каждый новый созданный документ может оказаться в одном из этих двух. Однако использование диска не будет равномерно распределено. Например, если каждый документ является небольшим документом json, но один из них получает вложение 1 ГБ (http://docs.couchdb.org/en/latest/intro/api.html#attachments), получается только один осколок 1 ГБ удар. Осколок основан на документах. У вас может быть 2 осколка, у вас может быть 20, и они не все должны быть на одном сервере (http://docs.couchdb.org/en/latest/cluster/theory.html). Если вы знаете, что на одном сервере не будет достаточно места на диске для хранения всех ваших данных, вы можете настроить 20 серверов couchdb, каждый из которых будет содержать 1 осколок (около 1/20 всех документов). Является ли это единственным node в подвале или кластере серверов couchdb по всему миру для клиентского приложения (curl, pouchdb, firefox и т.д.), Это тот же api.

  • База данных _dbs (_dbs.couch) записывает информацию для каждого dbs для управления кластерами и осколками. Его размер увеличивается, потому что каждый раз, когда вы создаете и удаляете базу данных, она обновляется (Copy-On-Write). Из CouchDB 2.1.0 и далее он будет автоматически уплотняться. Вы можете проверить параметры автоматического уплотнения в конфигурации вашего сервера (в браузере: http://localhost:5984/_utils/#/_config/, compactions разделы). Панель администратора находится на другом порту: http://localhost: 5986/_utils

  • Размер, указанный в Fauxton, является "активным размером". Не учитывает удаленные документы на диске, которые будут удалены после уплотнения. curl http://localhost:5984/testdb предоставит дополнительную информацию, например размер на диске (http://docs.couchdb.org/en/latest/api/database/common.html#get--db).