CouchDB

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая 212.235.9.62 (обсуждение) в 07:46, 1 июля 2010 (Архитектура системы). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску
Apache CouchDB
logo
Скриншот программы Apache CouchDB
Тип Документо-ориентированная СУБД
Авторы Damien Katz, Jan Lehnardt, Noah Slater, Christopher Lenz, J. Chris Anderson
Разработчик Apache Software Foundation
Написана на Erlang
Операционная система Кроссплатформенное программное обеспечение
Первый выпуск 2005
Последняя версия 0.10
Тестовая версия 0.11
Репозиторий github.com/apache/couchdb
Состояние Active
Лицензия Apache 2.0
Сайт couchdb.apache.org
Логотип Викисклада Медиафайлы на Викискладе

CouchDB — документо-ориентированная система управления базами данных, не требующая описания схемы данных. Эта программа является свободной, открытой, и написана на языке Erlang.

CouchDB можно рассматривать как сервер веб-приложений; для реализации этой идеи в CouchDB встроен производительный веб-сервер, а программный код, как и данные, сохраняется в той же базе данных. Для автоматизации работы с приложениями CouchDB используется утилита CouchApp.

Архитектура системы

Подобно иным документно-ориентированным СУБД (Mnesia, Lotus Notes, MongoDB), и в отличие от реляционных СУБД, CouchDB предназначена для работы с полу-структурированной информацией и имеет следующие особенности:

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

История развития

Проект CouchDB был принят в инкубатор Apache в феврале 2008 года. Несмотря на то, что CouchDB изначально предназначался для работы в операционной системе GNU/Linux, уже разработаны варианты этой системы для операционных систем Microsoft Windows[3] и Mac OS. Более того, дистрибутив GNU/Linux Ubuntu с 9.10 (Karmic Koala) по умолчанию включает CouchDB.

Использование CouchDB

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

  • UbuntuOne, Firefox, TomBoy, Akonadi, Evolution - для синхронизации адресов, заметок и закладок[5].
  • Ajatus — распределенная CRM-система.
  • Mozilla Raindrop - агрегатор сообщений электронной почты, социальных сетей, систем обмена мгновенными сообщениями (Skype, Jabber)[6].

Примечания

Литература

  • Anderson, J. Chris; Slater, Noah; Lehnardt, Jan (November 15, 2009), CouchDB: The Definitive Guide (1st ed.), O'Reilly Media, p. 300, ISBN 0596158165
  • Lennon, Joe (December 15, 2009), Beginning CouchDB (1st ed.), Apress, p. 300, ISBN 1430272376
  • Chandler, Christopher (December 2009), CouchDB in Action (1st ed.), Manning Publications, p. 350, ISBN 9781935182283

Ссылки

На русском языке:

Блоги разработчиков:

См. также