CouchDB очень медленно

У меня есть база данных CouchDB (v0.10.0) размером 8,2 ГБ и содержит 3890000 документов.

Теперь у меня есть следующая карта вида

function(doc) {emit([doc.Status], doc);

И для загрузки требуется навсегда (4 часа и по-прежнему нет результата).

Вот дополнительная информация, которая может помочь описать ситуацию:

  • Вид не является временным. вид определяется до 3890000 документы вставляются.

  • На сервере ничего нет. Это поле ubuntu, в котором установлены только установленные по умолчанию.

  • Я вижу, что мой процессор работает и работает (иногда стреляет до 100%). Память движется также, но не увеличивается.

Итак, мой вопрос:

  • Что на самом деле происходит в фоновом режиме?
  • Является ли это "одноразовым", когда мне нужно подождать один раз, и это как-то будет работать позже?

Большое спасибо,

Chi

Ответ 1

Представления обновляются только в следующий раз, когда они будут прочитаны. После чтения он обрабатывает все документы, которые были обновлены (созданы, обновлены, удалены) с момента последнего просмотра представления.

Таким образом, даже если вы указали представление перед вставкой 3890000 документов, оно будет обрабатывать 3890000 документов для представления.

От http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views

Обратите внимание, что по умолчанию представления не создаются и не обновляются, когда документ сохраняется, а скорее, когда к ним обращаются. В результате первый доступ может занять некоторое время в зависимости от размера ваших данных, в то время как CouchDB создает представление. Если предпочтительнее, представления также могут быть обновлены при сохранении документа с использованием внешнего script, который вызывает представления, когда были сделаны обновления. Пример можно найти здесь: RegeneratingViewsOnUpdate

Также натолкнулся на этот совет, который может быть полезен, если вы используете Ubuntu:

http://nosql.mypopescu.com/post/1299848121/couchdb-and-ubuntu-configuration-trick-for

Ответ 2

Не испускайте весь документ. Это не нужно. Вместо этого вы можете запустить свой запрос с помощью include_docs=true, который позволит вам получить доступ к документу через каждый атрибут doc строки.

Когда вы испускаете весь документ, вы делаете индекс большим или большим, чем вся ваша база данных.:)