Apache CouchDB — документная база данных, разрабатываемая Apache Software Foundation. Данные хранятся в JSON-документах без фиксированной схемы. Взаимодействие — исключительно через HTTP REST API: GET, PUT, POST, DELETE. Встроенный механизм репликации позволяет синхронизировать БД между несколькими серверами и клиентскими устройствами (включая браузеры через PouchDB).
Ключевые характеристики
- REST HTTP API — любой HTTP-клиент (curl, браузер) работает с БД напрямую.
- MVCC (Multi-Version Concurrency Control) — конкурентные операции без блокировок.
- Мастер-мастер репликация — несколько серверов принимают записи одновременно, конфликты разрешаются автоматически.
- Eventual Consistency — данные синхронизируются со временем, но могут быть временно несогласованы.
- MapReduce Views — индексирование и запросы через функции JavaScript.
Сравнение с MongoDB
CouchDB и MongoDB оба хранят JSON-документы, но имеют разную философию. MongoDB фокусируется на богатом языке запросов, агрегациях и горизонтальном шардировании. CouchDB — на надёжной репликации и офлайн-первой архитектуре (offline-first). PouchDB позволяет использовать CouchDB-репликацию прямо в браузере.
История
CouchDB разработан Дамиеном Кацем, начало работы — 2005 год. Первый релиз — 2005 год, написан на Erlang. В 2008 году передан Apache Software Foundation. В 2012 году появился CouchBase — коммерческий форк с SQL-подобным языком N1QL. PouchDB создан в 2012 году и принёс CouchDB-синхронизацию в браузер.
Связь с хостингом
CouchDB редко встречается как основная БД в стандартных хостинг-стеках. Его ниша — мобильные и IoT-приложения с офлайн-синхронизацией, и системы с требованием географически распределённой репликации без сложной настройки. На VDS устанавливается из официального репозитория Apache. Для большинства веб-проектов лучше подходят PostgreSQL или MongoDB.
Как работает CouchDB
CouchDB хранит данные в JSON-документах с произвольной структурой. Каждый документ имеет уникальный _id и _rev (ревизия для MVCC). Запросы через JavaScript MapReduce Views -- функции map и reduce определяют индексы. HTTP REST API -- единственный способ работы с базой (нет SQL, нет проприетарных протоколов). Репликация: POST /_replicate синхронизирует базы между узлами, включая P2P и master-master. Особенность CouchDB -- оффлайн-первый дизайн: приложение работает локально и синхронизируется при подключении (PouchDB для браузера).
CouchDB в хостинге
CouchDB требует минимум 512 МБ RAM, рекомендуется 2 ГБ+. Установка на Ubuntu: apt install couchdb. Порт 5984 по умолчанию. Для production обязательно: включить аутентификацию (в CouchDB 3.x она включена по умолчанию), настроить брандмауэр (5984 не должен быть доступен извне). В 2017 году тысячи незащищённых инстансов CouchDB были взломаны через открытый порт 5984 и данные удалены с требованием выкупа. NoSQL семейство включает несколько конкурентов CouchDB: Redis (key-value), MongoDB (document). База данных CouchDB подходит для CMS и мобильных приложений с синхронизацией.
История CouchDB
CouchDB основан Дамиеном Катцем (Damien Katz) в 2005 году. Передан в Apache Software Foundation в 2008 году. CouchDB 1.0 вышел в 2010 году. BigCouch (Cloudant, 2010) добавил кластеризацию. IBM приобрела Cloudant в 2014 году. Apache CouchDB 2.0 (2016) интегрировал кластеризацию из BigCouch. CouchDB 3.0 (2020) добавил обязательную аутентификацию. Erlang -- язык реализации CouchDB, что обеспечивает встроенный параллелизм.