NoSQL
- 1 year ago
- 0
- 0
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 и Mac OS . Более того, дистрибутив Linux Ubuntu с 9.10 (Karmic Koala) поставляется с системой CouchDB.
В начале 2012 года Кац покинул проект, чтобы сосредоточиться на работе над Couchbase Server .
После ухода Каца работа над проектом Apache CouchDB была продолжена и выпущена версия 1.2 в апреле 2012, а затем и 1.3 в апреле 2013. В июне 2013 сообщество CouchDB связало кодовую базу с и кластерной версией CouchDB в проекте Apache.
CouchDB используется во многих программных продуктах и на множестве веб-сайтов , в том числе:
Больше примеров доступно на 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 , библиотека поддержки Юникода , OpenSSL , дистрибутив языка программирования Erlang .