WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте
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 предназначена для работы с полуструктурированной информацией и имеет следующие особенности:

  • данные сохраняются не в строках и колонках, а в виде JSON-подобных документов, моделью которых является не таблицы, а деревья;
  • типизация элементов данных, то есть сопоставление отдельным полям документов типов INTEGER, DATE и пр., не поддерживается — вместо этого пользователь может написать функцию-валидатор;
  • целостность базы данных обеспечивается исключительно на уровне отдельных записей (но не на уровне связей между ними);
  • связи между таблицами или записями принципиально не поддерживаются, соответственно операция объединения (JOIN) между таблицами не определена;
  • для построения индексов и выполнения запросов используются функции представления (view)[4];
  • функции-валидаторы, функции-представления, функции-фильтры сохраняются в текстовом виде в самой базе данных;
  • эти функции, как правило, написаны на языках JavaScript или Erlang, а для их выполнения запускается отдельный сервер запросов, взаимодействие с которым происходит посредством сокетов и текстового JSON-протокола;
  • каждой базе данных в системе CouchDB соответствует единственное B-дерево (не путать с двоичным деревом);
  • каждое B-дерево хранится в виде отдельного файла на диске;
  • одновременно может быть запущено несколько потоков для чтения базы данных и только один — для записи;
  • целостность базы данных обеспечивается только при записи данных на диск;
  • представления хранятся в БД и их индексы обновляются непрерывно, однако при каждом обновлении функций представления или отображения обновляется всё B-дерево целиком;
  • при обработке данных с помощью функций-представлений используется упрощённая модель технологии MapReduce, что позволяет производить параллельные вычисления, в том числе и на многоядерном процессоре;
  • распределение вычислений на несколько узлов не поддерживается — вместо этого используется механизм репликации;
  • обработка данных с помощью цепочки последовательных функций MapReduce не поддерживается;
  • поддерживается вертикальное масштабирование;
  • внешний интерфейс (API) к данной СУБД построен на основе архитектуры REST, то есть сама база данных, отдельные записи, отображения и запросы — суть ресурсы, которые имеют уникальный адрес (URL) и поддерживают операции GET, PUT, POST, DELETE;
  • поэтому для взаимодействия с базой данных было написано много клиентских библиотек, в том числе на таких языках: JavaScript[5], PHP, Ruby, Python и Erlang;
  • взаимодействие между отдельными компонентами СУБД, то есть с серверами представлений осуществляется опять-таки с помощью текстового протокола, а данные передаются в формате JSON; это позволило использовать различные языки программирования для написания этих компонентов — Java, Python, JavaScript и пр.

История

Проект 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

CouchDB используется во многих программных продуктах и на множестве веб-сайтов[7], в том числе:

  • UbuntuOne, Firefox, TomBoy, Akonadi, Evolution — для синхронизации адресов, заметок и закладок[8].
  • Mozilla Raindrop — агрегатор сообщений электронной почты, социальных сетей, систем обмена мгновенными сообщениями (Skype, Jabber)[9].
  • BBC — для динамического контента.
  • Credit Suisse — для внутреннего использования в отделе товаров.
  • Meebo — для социальной платформы (веб и приложений) — Meebo была приобретена Google и закрыта 12 июля 2012 г.

Больше примеров доступно на wiki проекта Apache.

Управление данными

CouchDB управляет коллекцией документов JSON. Документы организуются по представлениям (англ. views). Представления определяются агрегатными функциями и фильтрами, вычисленными параллельно подобно MapReduce.

Представления хранятся в базе данных, и их индексы обновляются непрерывно. CouchDB поддерживает систему представления, которая использует внешние сокет-серверы и протокол, основанный на JSON. Как следствие, серверы представления были разработаны на множестве языков (JavaScript — по умолчанию, но есть также PHP, Ruby, Python и Erlang).

Доступ по HTTP

Приложения взаимодействуют с 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.

Примечания

  1. The couchdb Open Source Project on Open Hub: Languages Page — 2006.
  2. 09 – August – 2018 – CouchDB Blog
  3. https://couchdb.apache.org/
  4. Серверы представлений: документация (недоступная ссылка). Проверено 12 февраля 2010. Архивировано 20 октября 2008 года.
  5. Плагин для jQuery
  6. CouchdDB: Windows binary installer (недоступная ссылка). Проверено 13 февраля 2010. Архивировано 26 декабря 2011 года.
  7. Проекты использующие CouchDB
  8. Integrating CouchDB with Ubuntu One: Full Specification
  9. Raindrop Software Architecture

Литература

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии