Interested Article - CouchDB
- 2020-05-28
- 1
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 .
Примечания
- — 2023.
- — 2006.
- ↑
- . Дата обращения: 12 февраля 2010. Архивировано из 20 октября 2008 года.
- от 18 февраля 2010 на Wayback Machine Плагин для jQuery ]
- . Дата обращения: 13 февраля 2010. Архивировано из 26 декабря 2011 года.
- . Дата обращения: 12 февраля 2010. Архивировано из 20 июля 2017 года.
- . Дата обращения: 13 февраля 2010. 2 марта 2021 года.
- . Дата обращения: 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
- 2020-05-28
- 1