четверг, 18 февраля 2010 г.

CouchDB | Тонкости map-функции

Никогда не пишите в map-функции
emit(doc._id, doc);

т.к. при вызове view на жестком диске создается индекс-файл, который будет содержать значения doc._id и doc!

UPDADE: doc - т.е. будут все поля документа.

Возвращайте только новые, просчитанные данные. Ибо есть ключик include_docs=true, при наличии которого БД отдаст кроме того, что в emit ещё и сами документы!

3 комментария:

Александр Кошелев комментирует...

include_docs это по сути джоин -- отсюда следствие, что он сильно увеличиваек время ответа CouchDB.

Виталий Ф. комментирует...

я не заметил замедления. данные вытаскиваются через ключ документа... да и сделать инклуд правильнее, чем потом делать запросы на документы по пришедшему списку doc._id (или 1 запрос через post)

Александр Кошелев комментирует...

Конечно, тянуть документы постфактум это ещё хуже, но include_docs действительно замедляет запрос к вьюхе. На больших объемах точно заметите -- это просто следует из структуры стораджа CouchDB и сути джоина.

Как вариант эмитить документ как значение, либо только какую-то нужную его часть. Но тоже не всегда подходит, т.к. увеличивает размер индекса.