Размер документов couchdb - PullRequest
2 голосов
/ 15 марта 2012

У меня есть следующий документ в базе данных 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 КБайт / документ. Это означает, что документы занимают в 8 раз больше места на CouchDB, чем на диске.

Почему это?

Ответы [ 2 ]

4 голосов
/ 30 марта 2012

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

-@0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ

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

0 голосов
/ 22 марта 2012

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

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

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

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