CouchDB
Apache CouchDB | |
---|---|
logo | |
| |
Тип | Документо-ориентированная СУБД |
Авторы | 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
Ссылки
- CouchDB: A Case Study
- Ricky Ho. CouchDB Implementation
На русском языке:
- Map/Reduce своими руками — Apache CouchDb
- Иван Бегтин. CouchDB и его применимость
- Впечатления об Apache CouchDB
- Обзор NoSQL систем
Блоги разработчиков: