Apache CouchDB | |
---|---|
![]() | |
Тип | документо-ориентированная СУБД |
Автор | Дамьен Кац (Damien Katz) |
Разработчик | Apache Software Foundation |
Написана на | Erlang[1] |
Операционная система | Linux, Microsoft Windows и macOS |
Первый выпуск | 2005 |
Последняя версия | |
Состояние | активное |
Лицензия | Apache License 2.0[3] |
Сайт | couchdb.apache.org (англ.) |
CouchDB — документо-ориентированная система управления базами данных с открытым исходным кодом, не требующая описания схемы данных, распространяется свободно, написана на языке Erlang. Впервые вышла в 2005 году, с 2008 года — проект фонда Apache.
Реализована в рамках подхода NoSQL. Для хранения данных используется JSON, для реализации MapReduce-запросов — JavaScript. Возможно написание любой логики на Erlang.Одной из особенностей СУБД является поддержка репликации с несколькими ведущими узлами.
CouchDB можно рассматривать как сервер веб-приложений; для реализации этой идеи в CouchDB встроен производительный веб-сервер, а программный код, как и данные, сохраняется в той же базе данных. Для автоматизации работы с приложениями используется утилита CouchApp.
Следуя подходу NoSQL, CouchDB не хранит данные и связи в таблицах. Вместо этого каждая база данных — набор независимых документов. Каждый документ содержит свои собственные данные и независимую схему. Приложение может получить доступ к нескольким базам данных, например, хранящейся на мобильном телефоне пользователя и на сервере. Метаданные документа содержат информацию о версии, позволяя объединять данные и разрешать любые противоречия, которые могли появиться в момент, когда базы данных были разъединены.
Для управления конкурентным доступом используется механизм MVCC, благодаря чему возможно избежать необходимости блокировки файла базы данных во время записи. Разрешение конфликтов относится к сфере ответственности логики приложения, разрешение конфликта обычно включает в себя объединение данных в один документ, а затем старый документ удаляется.
Подобно иным документно-ориентированным СУБД (Mnesia, Lotus Notes, MongoDB) и в отличие от реляционных СУБД, CouchDB предназначена для работы с полуструктурированной информацией и имеет следующие особенности:
Проект CouchDB создал бывший работник Lotus Notes в IBM Дамьен Кац (Damien Katz) в апреле 2005 года, автор определил проект как «систему хранения для крупномасштабной объектной базы данных». Его идеей для базы данных была база данных для интернета, которая должна была быть написана с нуля до сервера веб-приложений. Он самофинансировал проект в течение почти двух лет и выпустил его как проект с открытым исходным кодом под лицензией GNU GPL.
Проект CouchDB был принят в инкубатор Apache в феврале 2008 года. Несколькими месяцами позже проект перешёл в статус проекта верхнего уровня, что привело к появлению стабильной версии в июле 2010 года. Несмотря на то, что CouchDB изначально предназначался для работы в операционной системе Linux, также разработаны варианты этой системы для операционных систем Microsoft Windows[6] и 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 используется во многих программных продуктах и на множестве веб-сайтов[7], в том числе:
Больше примеров доступно на wiki проекта Apache.
CouchDB управляет коллекцией документов JSON. Документы организуются по представлениям (англ. views). Представления определяются агрегатными функциями и фильтрами, вычисленными параллельно подобно MapReduce.
Представления хранятся в базе данных, и их индексы обновляются непрерывно. CouchDB поддерживает систему представления, которая использует внешние сокет-серверы и протокол, основанный на JSON. Как следствие, серверы представления были разработаны на множестве языков (JavaScript — по умолчанию, но есть также PHP, Ruby, Python и Erlang).
Приложения взаимодействуют с CouchDB через HTTP. Ниже представлено несколько примеров с использованием утилиты командной строки cURL. Эти примеры предполагают, что CouchDB работает на localhost (127.0.0.1) на порту 5984.
Действие | Запрос | Ответ |
---|---|---|
Доступ к информации о сервере | curl http://127.0.0.1:5984/
|
{
"couchdb": "Welcome",
"version":"1.1.0"
}
|
Создание базы данных под именем wiki | curl -X PUT http://127.0.0.1:5984/wiki
|
{"ok": true}
|
Попытка создать вторую базу данных под названием wiki | curl -X PUT http://127.0.0.1:5984/wiki
|
{
"error":"file_exists",
"reason":"The database could not be created, the file already exists."
}
|
Получаем информацию о базе данных wiki | curl http://127.0.0.1:5984/wiki
|
{
"db_name": "wiki",
"doc_count": 0,
"doc_del_count": 0,
"update_seq": 0,
"purge_seq": 0,
"compact_running": false,
"disk_size": 79,
"instance_start_time": "1272453873691070",
"disk_format_version": 5
}
|
Удаление базы данных wiki | curl -X DELETE http://127.0.0.1:5984/wiki
|
{"ok": true}
|
Создаем документ, прося CouchDB, чтобы предоставил id документа | curl -X POST -H "Content-Type: application/json" --data \
'{ "text" : "Wikipedia on CouchDB", "rating": 5 }' \
http://127.0.0.1:5984/wiki
|
{
"ok": true,
"id": "123BAC",
"rev": "946B7D1C"
}
|
CouchDB включает много дополнительных компонентов с открытым исходным кодом как часть его пакета по умолчанию, в частности, в пакет входят JavaScript-движок SpiderMonkey, кроссбраузерная JavaScript-библиотека jQuery, библиотека поддержки Юникода ICU, OpenSSL, дистрибутив языка программирования Erlang.
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .