CouchDB

CouchDB – это база данных документов, написанная на языке программирования Erlang, которая позволяет хранить данные в формате JSON и обеспечивает высокую доступность, отказоустойчивость и горизонтальное масштабирование. CouchDB разрабатывалась с учетом потребностей в мобильном интернете и облачных вычислениях, и она хорошо подходит для приложений, которые требуют распределенного хранения данных и синхронизацию между разными устройствами.

CouchDB использует модель хранения документов, где каждый документ представляет собой JSON объект с ключами и значениями. Документы хранятся в базах данных, которые могут быть реплицированы для обеспечения отказоустойчивости и масштабируемости. CouchDB поддерживает горизонтальное масштабирование с помощью кластеризации и репликации данных.

Другими ключевыми особенностями CouchDB являются поддержка ACID-транзакций, встроенная механика индексации данных, событийное программирование с помощью webhooks и встроенная аутентификация и авторизация.

CouchDB является открытым и свободным программным обеспечением, распространяемым под лицензией Apache. Она предоставляет HTTP API для доступа к данным и управления базами данных, что делает ее легкой в интеграции с различными языками программирования и фреймворками.

Реализована в рамках подхода NoSQL. Для хранения данных используется JSON, для реализации MapReduce-запросов — JavaScript. Возможно написание любой логики на Erlang. Одной из особенностей именно этой СУБД является поддержка репликации с несколькими ведущими узлами.

CouchDB можно рассматривать как сервер веб-приложений; для реализации этой идеи в CouchDB встроен производительный веб-сервер, а программный код, как и данные, сохраняется в той же базе данных. Для автоматизации работы с приложениями используется утилита CouchApp.

Следуя подходу NoSQL, CouchDB не хранит данные и связи в таблицах. Вместо этого каждая база данных — набор независимых документов. Каждый документ содержит свои собственные данные и независимую схему. Приложение может получить доступ к нескольким базам данных, например, хранящейся на мобильном телефоне пользователя и на сервере. Метаданные документа содержат информацию о версии, позволяя объединять данные и разрешать любые противоречия, которые могли появиться в момент, когда базы данных были разъединены.

Для управления конкурентным доступом используется механизм MVCC, благодаря чему возможно избежать необходимости блокировки файла базы данных во время записи. Разрешение конфликтов относится к сфере ответственности логики приложения, разрешение конфликта обычно включает в себя объединение данных в один документ, а затем старый документ удаляется.
Проект CouchDB создал бывший работник Lotus Notes в IBM Дамьен Кац (Damien Katz) в апреле 2005 года, автор определил проект как «систему хранения для крупномасштабной объектной базы данных». Его идеей для базы данных была база данных для интернета, которая должна была быть написана с нуля до сервера веб-приложений. Он самофинансировал проект в течение почти двух лет и выпустил его как проект с открытым исходным кодом под лицензией GNU GPL.

Проект CouchDB был принят в инкубатор Apache в феврале 2008 года. Несколькими месяцами позже проект перешёл в статус проекта верхнего уровня, что привело к появлению стабильной версии в июле 2010 года. Несмотря на то, что CouchDB изначально предназначался для работы в операционной системе Linux, также разработаны варианты этой системы для операционных систем Microsoft Windows[7] и Mac OS. Более того, дистрибутив Linux Ubuntu с 9.10 (Karmic Koala) поставляется с системой CouchDB.

В начале 2012 года Кац покинул проект, чтобы сосредоточиться на работе над Couchbase Server.

После ухода Каца работа над проектом Apache CouchDB была продолжена и выпущена версия 1.2 в апреле 2012, а затем и 1.3 в апреле 2013. В июне 2013 сообщество CouchDB связало кодовую базу с BigCouch и кластерной версией CouchDB Cloudant в проекте Apache.

CouchDB включает много дополнительных компонентов с открытым исходным кодом как часть его пакета по умолчанию, в частности, в пакет входят JavaScript-движок SpiderMonkey, кроссбраузерная JavaScript-библиотека jQuery, библиотека поддержки Unicode ICU, OpenSSL, дистрибутив языка программирования Erlang.

Обсуждение закрыто.