2014-11-28 2 views
0

Святой Грааль CouchDB является его функцией репликации. С TouchDB, Cloudant-Sync и Couchbase-Lite вы даже можете реплицировать базу данных с \ на смартфоны пользователей, поэтому данные будут доступны, даже если есть проблемы с подключением.Программы ценообразования размещенных провайдеров CouchDB не имеют смысла

CouchDB replication protocol (который может быть реализован несколько иначе в разных рамках \ sdks) делает запрос GET для каждого документа, который был изменен.

Оба Cloudant и Iris-Couch обеспечивают ценовые программы, основанные на размер базы данных, количество световых запросов HTTP (GET, HEAD), а количество тяжелых запросов HTTP (PUT, POST, DELETE). Это означает, что вызов GET для одного документа имеет такую ​​же цену, как и вызов GET до /_all_docs.

В некотором смысле, похоже, что протокол репликации очень неэффективен, когда дело доходит до этих программ ценообразования. Например, если ваши пользователи только вытаскивают документы с сервера, может быть дешевле использовать /_all_docs?include_docs=true, чем запустить стандартную репликацию, даже если в запросе /_all_docs вы загрузите документы, которые не менялись ...

Я пропустил что-то ? Не следует ли, чтобы программы ценообразования учитывали количество загружаемых данных \ uploaded вместо количества запросов? Не должен ли GET-запрос одного документа быть намного дешевле, чем позвонить /_all_docs или представлениям? Может ли быть изменен протокол репликации, поэтому он будет менее эффективным с точки зрения пропускной способности, но намного дешевле?

P.S. Я знаю, что Couchbase - это отдельный проект, и протокол репликации CouchDB не зависит от него. Couchbase также поддерживает репликацию с \ на клиентов (через Couchbase Lite). Есть ли способ сравнить два механизма с точки зрения количества запросов на сервер?

--- EDIT ---

Похоже /_all_docs используется в алгоритме репликации Couchbase-Lite, а не для снижения стоимости, но для оптимизации процесса: https://github.com/couchbase/couchbase-lite-ios/wiki/Replication-Algorithm

  • Ограниченный случай вышеупомянутой оптимизации объемного сбора возможен со стандартным API: изменения генерации 1 (идентификатор версии, начинающийся с «1-») могут быть извлечены навалом через _all_docs, потому что по определению у них нет версий ревизий , К сожалению, _all_docs не может включать тела вложений, поэтому, если он возвращает документ, JSON которого указывает, что он имеет вложения, они должны быть выбраны отдельно. Тем не менее, эта оптимизация может значительно помочь и в настоящее время реализована в Couchbase Lite.

- EDIT -

Данный вопрос обрабатывается в Couchbase синхронизации шлюза, а не как часть CouchDB: https://github.com/couchbase/sync_gateway/wiki/Bulk-GET

Интересно, если это когда-либо будет реализован в CouchDB. Похоже, что поставщики услуг, которые взимают плату за запрос, не заинтересованы в поддержке этой функции ...

ответ

3

У вас есть точка, а затем снова это не имеет значения.

Почему у вас есть точка

Действительно работает одиночный/запрос _all_docs только один запрос возвращает все ваши документы. Вы только что нашли способ обмануть вас в предоставлении вам «бесплатного сервиса».

Почему это не имеет значения

  • репликация должен быть эффективным, так что вы действительно не хотите иметь чек ведомой кушетки каждый документ, который может быть обновлен против _all_docs в мастере. Даже если вы действительно хотели это сделать, чтобы сохранить разумную согласованность, обновления, скорее всего, будут видеть только небольшой уровень изменений, поэтому, если 1 из 1000 документов будет обновляться между двумя репликациями, тогда накладные расходы на репликацию по документу довольно малы.

  • Предположим, вы запустили блог/приложение, которое запрашивает _all_docs, чтобы минимизировать запросы. Хорошо, если ваше приложение предназначено для реагирования, и вам нужно 5 кбайт документов из базы данных с базой данных 50 Мбайт, вы просто потеряли много пользователей, потому что вы будете так же безответны, как и все.

  • Вы оптимизируетесь на неправильном конце. Обычно вы получаете лимит в 20 долларов, когда около 1 миллиона получают запросы. Если у вас есть сайт с таким уровнем трафика и вы используете рекламу на нем, вам, скорее всего, удастся получить более 500 долларов (при условии, что эффективная цена за тысячу показов составляет 0,5 доллара США). У вас будет гораздо больше шансов увеличить ваш доход, добавив контент, чем сжимая стоимость вашего couchdb.

+0

Если у вас есть 10K пользователей с вашим приложением для смартфонов, вытаскивающим из БД с 1K документами, вы легко достигнете 10M запросов GET. По крайней мере, первая репликация должна использовать _all_docs, потому что пользователь все равно загружает все документы. – Oren

+0

Я все еще не использовал _all_docs, но, возможно, написал специальный просмотр, который испускает только соответствующие документы. Если бы я был одним из ваших пользователей и в мобильной сети (3G или меньше), у меня было всего 500 мегабайт ежемесячных данных, я бы не был рад узнать, что вы отправляете мне 10MByte, по крайней мере, не на регулярной основе. Если вы кодируете что-то вроде списка с высоким рейтингом, я бы рекомендовал вам написать выделенное представление и запросить его с параметрами startkey и endkey, чтобы у вас было два запроса на получение, скажем, один для игроков верхнего x и один для игроков выше и ниже текущий счет. – Hans

+0

Даже если у вас есть только 100 документов размером 1кб каждый, это будет в 100 раз дешевле (!) Использовать _all_docs вместо стандартной первой репликации – Oren

Смежные вопросы