Святой Грааль 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. Похоже, что поставщики услуг, которые взимают плату за запрос, не заинтересованы в поддержке этой функции ...
Если у вас есть 10K пользователей с вашим приложением для смартфонов, вытаскивающим из БД с 1K документами, вы легко достигнете 10M запросов GET. По крайней мере, первая репликация должна использовать _all_docs, потому что пользователь все равно загружает все документы. – Oren
Я все еще не использовал _all_docs, но, возможно, написал специальный просмотр, который испускает только соответствующие документы. Если бы я был одним из ваших пользователей и в мобильной сети (3G или меньше), у меня было всего 500 мегабайт ежемесячных данных, я бы не был рад узнать, что вы отправляете мне 10MByte, по крайней мере, не на регулярной основе. Если вы кодируете что-то вроде списка с высоким рейтингом, я бы рекомендовал вам написать выделенное представление и запросить его с параметрами startkey и endkey, чтобы у вас было два запроса на получение, скажем, один для игроков верхнего x и один для игроков выше и ниже текущий счет. – Hans
Даже если у вас есть только 100 документов размером 1кб каждый, это будет в 100 раз дешевле (!) Использовать _all_docs вместо стандартной первой репликации – Oren