Interested Article - CouchDB

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) ;
  • функции-валидаторы, функции-представления, функции-фильтры сохраняются в текстовом виде в самой базе данных;
  • эти функции, как правило, написаны на языках JavaScript или Erlang, а для их выполнения запускается отдельный сервер запросов, взаимодействие с которым происходит посредством сокетов и текстового JSON- протокола ;
  • каждой базе данных в системе CouchDB соответствует единственное B-дерево (не путать с двоичным деревом );
  • каждое B-дерево хранится в виде отдельного файла на диске;
  • одновременно может быть запущено несколько потоков для чтения базы данных и только один — для записи;
  • целостность базы данных обеспечивается только при записи данных на диск;
  • представления хранятся в БД и их индексы обновляются непрерывно, однако при каждом обновлении функций представления или отображения обновляется всё B-дерево целиком;
  • при обработке данных с помощью функций-представлений используется упрощённая модель технологии MapReduce , что позволяет производить параллельные вычисления , в том числе и на многоядерном процессоре ;
  • на несколько узлов не поддерживается — вместо этого используется механизм репликации ;
  • обработка данных с помощью цепочки последовательных функций MapReduce не поддерживается;
  • поддерживается вертикальное масштабирование ;
  • внешний интерфейс ( API ) к данной СУБД построен на основе архитектуры REST , то есть сама база данных, отдельные записи, отображения и запросы — суть ресурсы, которые имеют уникальный адрес ( URL ) и поддерживают операции GET , PUT , POST , DELETE ;
  • поэтому для взаимодействия с базой данных было написано много клиентских библиотек, в том числе на таких языках: JavaScript , 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 и 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

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

  • UbuntuOne , Firefox , TomBoy , Akonadi , Evolution — для синхронизации адресов, заметок и закладок .
  • — агрегатор сообщений электронной почты, социальных сетей, систем обмена мгновенными сообщениями (Skype, Jabber) .
  • 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 , библиотека поддержки Юникода , OpenSSL , дистрибутив языка программирования Erlang .

Примечания

  1. — 2023.
  2. — 2006.
  3. . Дата обращения: 12 февраля 2010. Архивировано из 20 октября 2008 года.
  4. от 18 февраля 2010 на Wayback Machine Плагин для jQuery ]
  5. . Дата обращения: 13 февраля 2010. Архивировано из 26 декабря 2011 года.
  6. . Дата обращения: 12 февраля 2010. Архивировано из 20 июля 2017 года.
  7. . Дата обращения: 13 февраля 2010. 2 марта 2021 года.
  8. . Дата обращения: 13 февраля 2010. 6 июля 2010 года.

Литература

  • Anderson, J. Chris; Slater, Noah; Lehnardt, Jan (November 15, 2009), (1st ed.), O'Reilly Media , p. 300, ISBN 0596158165 от 14 июля 2011 на Wayback Machine
  • Lennon, Joe (December 15, 2009), (1st ed.), Apress , p. 300, ISBN 1430272376 , Дата обращения: 12 февраля 2010 от 5 декабря 2010 на Wayback Machine

Ссылки

  • — официальный сайт CouchDB
Источник —

Same as CouchDB