Размер документов CouchDB

У меня есть следующий документ в базе данных CouchDB:

{
   "_id": "000013a7-4df6-403b-952c-ed767b61554a",
   "_rev": "1-54dc1794443105e9d16ba71531dd2850",
   "tags": [
       "auto_import"
   ],
   "ZZZZZZZZZZZ": "910111",
   "UUUUUUUUUUUUU": "OOOOOOOOO",
   "RECEIVING_OPERATOR": "073",
   "type": "XXXXXXXXXXXXXXXXXXX",
   "src_file": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

Этот файл JSON занимает ровно 319 байт, если он сохранен в моей локальной файловой системе. Мои документы все такие (плюс-минус пара байтов, так как некоторые поля имеют разную длину).

В моей базе данных сейчас около 6 миллионов документов, и они занимают 15 ГБ. Это дает около 2,5 КБ/документ. Это означает, что документы занимают в CouchDB в 8 раз больше места, чем на диске.

Это почему?


person blueFast    schedule 15.03.2012    source источник


Ответы (2)


Проблема связана с тем, как используется идентификатор документа: он хранится не только в документе, но и в других структурах данных. Это означает, что использование стандартного UUID (000013a7-4df6-403b-952c-ed767b61554a 36 символов) займет много места на диске. Если столкновение является незначительной проблемой, с помощью base64 вы можете пронумеровать 16 миллионов документов, используя всего 4 символа, и более 1 миллиарда документов, используя 5 символов. Хорошим выбором для словаря является упорядоченный (в смысле "Сортировка просмотра"):

-@0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ

Используя этот метод, я уменьшил размер своей базы данных с 2,5 Кбайт/документ до 0,4 Кбайт/документ. Моя новая база данных использует только 16% пространства старой базы данных, что, я бы сказал, является очень большим улучшением.

person blueFast    schedule 30.03.2012

CouchDB использует нечто, называемое MVCC, что в основном означает, что он сохраняет предыдущие версии документов по мере их изменения. Он использует эти предыдущие версии для репликации в случае конфликтов и по умолчанию хранит 1000 редакций (см. это для получения дополнительной информации).

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

Вы также можете ознакомиться с сжатием, так как это может помочь (временно) уменьшить объем хранилища, поскольку Что ж.

person Billy    schedule 22.03.2012
comment
Без изменений: это вновь созданная база данных, в которую вставлены только новые документы. Документы не обновлены. На самом деле, проверив проблему с людьми из CouchDB, я обнаружил проблему: идентификатор документа, который используется внутри CouchDB для многих структур, оказывает большое влияние на размер базы данных. Если вы хотите уменьшить размер документов, один простой способ — использовать идентификатор документа в кодировке base64 (или base62, или любой другой). - person blueFast; 22.03.2012