Почему плохо возвращать документ с Couchbase View`s

Я пытаюсь войти в мир Couchbase и узнать что-то о представлениях. Несколько раз в презентациях и демонстрациях я слышал, что плохо возвращать весь документ из представления:

emit(meta.id, doc);

Мой вопрос: почему? Что я должен вернуть тогда и как я могу получить правильные значения документа?


person ArkadyB    schedule 15.01.2015    source источник


Ответы (2)


Это плохая идея, потому что она на самом деле контрпродуктивна. Запись документа в представление означает, что он будет храниться на диске вместе с самим индексом представления. Вы платите цену ввода-вывода за повторную запись документа на диск (дубликат исходного документа по ключу/значению) и снова платите за его чтение во время запроса. Поскольку запросы представлений обслуживаются с диска (или из кеша файловой системы), вы никогда не сможете воспользоваться преимуществами встроенного уровня кеша для более быстрого извлечения документа. Короче говоря, в среднем будет быстрее получить идентификатор документа из представления и получить документ по идентификатору, чем просто прочитать весь документ из представления. Особенно это касается операций над несколькими документами.

person David Ostrovsky    schedule 15.01.2015
comment
В дополнение к цене внешнего интерфейса вы заплатите цену, когда будете перебалансировать кластер из-за проблем с хранилищем, о которых упомянул Дэвид. Таким образом, это становится проблемой обслуживания, поскольку перебалансировка займет больше времени. - person Kirk; 16.01.2015
comment
Дело в том, что это не имеет смысла, учитывая архитектуру дивана. Возможно, документация должна быть более ясной по этому поводу, потому что я чувствую, что это серьезная проблема. - person theMayer; 22.01.2015
comment
@theMayer: Вы говорите, что вместо этого мы должны возвращать только идентификаторы документов и чтобы клиент запрашивал каждый из этих документов отдельно, чтобы получить полный результат? Не приведет ли это к снижению производительности на стороне клиента? Скажем, мое представление возвращает 30 идентификаторов документов, я действительно не хочу, чтобы мой клиент делал 30 сетевых вызовов, чтобы получить полный результат. - person Arnab Chakraborty; 02.03.2015
comment
@theMayer: кстати, я полностью понимаю проблемы, которые вы упомянули в ответе, - мне просто любопытно, что лучше всего делать в сценарии, когда моему клиенту нужны все документы в результате запроса. - person Arnab Chakraborty; 02.03.2015
comment
более подробную информацию можно найти по адресу: stackoverflow.com/questions/28813135/ - person Arnab Chakraborty; 02.03.2015
comment
@ArnabChakraborty - на самом деле как минимум на порядок эффективнее запрашивать дополнительные сведения о документе на сервере. Это неверно для удаленного клиента с задержкой в ​​​​Интернете, однако Couchbase никогда не следует открывать напрямую в Интернет — ваш веб-сервис должен делать это автоматически. CB также имеет пакетный сервис для получения нескольких предметов. - person theMayer; 02.03.2015

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

Поэтому рекомендуется (и это намного эффективнее) заставить представление возвращать doc.id, а затем использовать стандартную процедуру get для возврата всего документа.

person mrkwse    schedule 15.01.2015