CouchDB | это... Что такое CouchDB? (original) (raw)
Apache CouchDB
Тип | Документо-ориентированная СУБД |
Автор | Damien Katz, Jan Lehnardt, Noah Slater, Christopher Lenz, J. Chris Anderson |
Разработчик | Apache Software Foundation |
Написана на | Erlang |
Операционная система | Кроссплатформенное программное обеспечение |
Первый выпуск | 2005 |
Последняя версия | 1.2.0 (3 марта 2012) |
Состояние | Active |
Лицензия | Apache 2.0 |
Сайт | http://couchdb.apache.org/ |
Apache CouchDB[1] — документо-ориентированная система управления базами данных, не требующая описания схемы данных. Эта программа является свободной, открытой, и написана на языке Erlang.
CouchDB можно рассматривать как сервер веб-приложений; для реализации этой идеи в CouchDB встроен производительный веб-сервер, а программный код, как и данные, сохраняется в той же базе данных. Для автоматизации работы с приложениями CouchDB используется утилита CouchApp.
Содержание
- 1 Архитектура системы
- 2 История развития
- 3 Использование CouchDB
- 4 Примечания
- 5 Литература
- 6 Ссылки
- 7 См. также
Архитектура системы
Подобно иным документно-ориентированным СУБД (Mnesia, Lotus Notes, MongoDB), и в отличие от реляционных СУБД, CouchDB предназначена для работы с полу-структурированной информацией и имеет следующие особенности:
- данные сохраняются не в строках и колонках, а в виде JSON-подобных документов, моделью которых является не таблицы, а деревья;
- типизация элементов данных, то есть сопоставление отдельным полям документов типов INTEGER, DATE и пр., не поддерживается — вместо этого пользователь может написать функцию-валидатор;
- целостность базы данных обеспечивается исключительно на уровне отдельных записей (но не на уровне связей между ними);
- связи между таблицами или записями принципиально не поддерживаются, соответственно операция объединения (JOIN) между таблицами не определена;
- для построения индексов и выполнения запросов используются функции представления (view)[2];
- функции-валидаторы, функции-представления, функции-фильтры сохраняются в текстовом виде в самой базе данных;
- эти функции, как правило, написаны на языках JavaScript или Erlang, а для их выполнения запускается отдельный сервер запросов, взаимодействие с которым происходит посредством сокетов и текстового JSON-протокола;
- каждой базе данных в системе CouchDB соответствует единственное B-дерево (не путать с двоичным деревом);
- каждое B-дерево хранится в виде отдельного файла на диске;
- одновременно может быть запущено несколько потоков для чтения базы данных и только один — для записи;
- целостность базы данных обеспечивается только при записи данных на диск;
- представления хранятся в БД и их индексы обновляются непрерывно, однако при каждом обновлении функций представления или отображения обновляется всё B-дерево целиком;
- при обработке данных с помощью функций-представлений используется упрощённая модель технологии MapReduce, что позволяет производить параллельные вычисления, в том числе и на многоядерном процессоре;
- распределение вычислений на несколько узлов не поддерживается — вместо этого используется механизм репликации;
- обработка данных с помощью цепочки последовательных функций MapReduce не поддерживается;
- поддерживается вертикальная масштабируемость, что означает поддержку не только огромных кластеров, но и портативных устройств (нетбуки, смартфоны и пр.);
- внешний интерфейс (API) к данной СУБД построен на основе архитектуры REST, то есть сама база данных, отдельные записи, отображения и запросы — суть ресурсы, которые имеют уникальный адрес (URL) и поддерживают операции GET, PUT, POST, DELETE;
- поэтому для взаимодействия с базой данных было написано много клиентских библиотек, в том числе на таких языках JavaScript[3], PHP, Ruby, Python и Erlang;
- взаимодействие между отдельными компонентами СУБД, то есть с серверами представлений осуществляется опять-таки с помощью текстового протокола, а данные передаются в формате JSON; это позволило использовать различные языки программирования для написания этих компонентов — Java, Python, JavaScript и пр.
История развития
Проект CouchDB был принят в инкубатор Apache в феврале 2008 года. Несмотря на то, что CouchDB изначально предназначался для работы в операционной системе Linux, уже разработаны варианты этой системы для операционных систем Microsoft Windows[4] и Mac OS. Более того, дистрибутив Linux Ubuntu с 9.10 (Karmic Koala) поставляется с системой CouchDB.
Использование CouchDB
CouchDB используется во многих программных продуктах и на множестве веб-сайтов [5], в том числе:
- UbuntuOne, Firefox, TomBoy, Akonadi, Evolution — для синхронизации адресов, заметок и закладок[6].
- Mozilla Raindrop — агрегатор сообщений электронной почты, социальных сетей, систем обмена мгновенными сообщениями (Skype, Jabber)[7].
Примечания
- ↑ Apache CouchDB™ website
- ↑ Серверы представлений: документация
- ↑ Плагин для jQuery
- ↑ CouchdDB: Windows binary installer
- ↑ Проекты использующие CouchDB
- ↑ Integrating CouchDB with Ubuntu One: Full Specification
- ↑ Raindrop Software Architecture
Литература
- Anderson, J. Chris; Slater, Noah & Lehnardt, Jan (November 15, 2009), «CouchDB: The Definitive Guide» (1st ed.), O'Reilly Media, сс. 300, ISBN 0596158165, <http://guide.couchdb.org/index.html>
- Lennon, Joe (December 15, 2009), «Beginning CouchDB» (1st ed.), Apress, сс. 300, ISBN 1430272376, <http://www.apress.com/book/view/9781430272373>
Ссылки
- CouchDB: A Case Study
- Ricky Ho. CouchDB Implementation
- Простая библиотека для работы с CouchDB на PHP5
- Asynchronous CouchDB client for Java
На русском языке:
- Map/Reduce своими руками — Apache CouchDb
- CouchDB и его применимость
- Обзор NoSQL систем
- CouchDB для начинающих
Блоги разработчиков:
См. также
- Документо-ориентированная СУБД
- MongoDB
Apache Software Foundation | |
---|---|
Проекты верхнего уровня | ActiveMQ • Ant • Apache HTTP Server • APR • Beehive • Cassandra • Cayenne • Camel • Commons • Cocoon • CouchDB • DB • Directory • Excalibur • Forrest • Geronimo • Gump • Hadoop • Harmony • HBase • HiveMind • HttpComponents • iBATIS • Jackrabbit • James • JMeter • Lenya • Maven • Mina • mod perl • MyFaces • Nutch • OFBiz • OpenOffice.org • POI • Portals • Santuario • ServiceMix • Shale • Shiro • SpamAssassin • Struts • Subversion • Tapestry • Tcl • Tomcat • Turbine • Velocity • WebWork 2 • Wicket • Xalan • Xerces • XMLBeans |
Подпроекты | Apache Commons BCEL • BSF • JCS Apache Lucene Lucene Java • Lucene4c • Lucy• Solr Apache DB Derby • Torque • DdlUtils • OJB • JDO |
Apache Web Services | Axis • Axis2 • CXF • WS-Commons • EWS • JaxMe • jUDDI • Kandula • Mirae • Muse • Pubscribe • Sandesha • Scout • SOAP • Synapse • TSIK • Tuscany • Woden • WSIF • WSRF • WSS4J • XML-RPC |
Другие проекты | Batik • FOP •Log4j |
Развивающиеся проекты (Incubator) | XAP • River • OpenEJB • OpenJPA • Graffito • Tuscany • Log4Net • Roller • Felix • Abdera • CeltiXfire • FtpServer • Heraldry • Ivy • JuiCE • Kabuki • Lokahi • Lucene.Net • mod_ftp • NMaven • Ode • stdcxx • Woden • WSRP4J • Yoko • WADI • Qpid • stdcxx • TripleSoup • UIMA• Adobe Flex |
Списанные проекты (Attic) | AxKit • Cactus • ECS • Jakarta • ORO • Regexp • Slide • Taglibs |
Лицензия: Лицензия Apache • Сайт: apache.org |
Системы управления базами данных (СУБД) | |
---|---|
Клиент-серверные | Caché • CouchDB • IMS • DB2 • Firebird • Informix • Ingres • InterBase • MS SQL Server • MongoDB • MySQL • mSQL • Oracle Database • Pervasive SQL • PostgreSQL • Sybase ASE • Sybase ASA • Sybase IQ • Teradata Database • ЛИНТЕР |
Движки | BDE • Berkeley DB • C-Store • db4o • HSQLDB • Mnesia • PrimeBase • Redis • Rdb • SQLite • ZODB |
Файл-серверные | DataFlex • dBase • MS Access • OpenOffice.org Base • Paradox |
Базы данных | |
---|---|
Концепции | Модель данных • Реляционная (модель • алгебра • Нормальная форма • Ссылочная целостность • БД • СУБД) • Иерархическая модель • Сетевая (модель • СУБД) • Объектно-ориентированная (БД • СУБД) • Транзакция • Журнализация • Секционирование |
Объекты | Отношение (таблица) • Представление • Хранимая процедура • Триггер • Курсор • Индекс |
Ключи | Потенциальный • Первичный • Внешний • Естественный • Суррогатный (искусственный) • Суперключ |
SQL | SELECT • INSERT • UPDATE • MERGE • DELETE • TRUNCATE • JOIN • UNION • INTERSECT • EXCEPT • CREATE • ALTER • DROP • GRANT • COMMIT • ROLLBACK |
СУБД | IMS • DB2 • Informix • Oracle Database • Microsoft SQL Server • Adaptive Server Enterprise • Teradata Database • Firebird • PostgreSQL • MySQL • SQLite • Microsoft Access • Visual FoxPro • ЛИНТЕР • CouchDB • MongoDB |
Компоненты | Язык запросов • Оптимизатор запросов • План выполнения запроса • ODBC • ADO • ADO.NET • JDBC |