Apache CouchDB
Тип | документо-орієнтована система управління базами даних |
---|---|
Автор | Damien Katz, Jan Lehnardt, Noah Slater, Christopher Lenz, J. Chris Anderson, Paul Davis, Adam Kocoloski, Jason Davies, Benoît Chesneau, Filipe Manana, Robert Newson |
Розробник | Apache Software Foundation |
Перший випуск | 2005 |
Стабільний випуск | 1.6 (10 червня 2014 ) |
Операційна система | крос-платформовий |
Мова програмування | Erlang |
Доступні мови | англійська |
Стан розробки | активний |
Ліцензія | Apache License 2.0 |
Репозиторій | github.com/apache/couchdb |
Вебсайт | couchdb.apache.org |
Apache CouchDB (Cluster Of Unreliable Commodity Hardware) — розподілена документо-орієнтована система управління базами даних класу NoSQL-систем, що не вимагає опису схеми даних. Запити до CouchDB та індексація даних можуть виконуватися згідно з парадигмою MapReduce, використовуючи для формування логіки вибірки даних мову JavaScript.
CouchDB можна розглядати як сервер вебзастосунків; для реалізації цієї ідеї в CouchDB вбудований продуктивний вебсервер, а початковий код, як і дані, зберігається в тій же базі даних. Для автоматизації роботи із застосунками CouchDB використовується утиліта CouchApp.
Ця програма є вільною та відкритою, і написана на мові Erlang.
Запити до CouchDB та індексація даних можуть виконуватися відповідно до парадигми MapReduce, використовуючи для формування логіки вибірки даних мову JavaScript. Доступ до БД здійснюється за допомогою протоколу HTTP з використанням RESTful JSON API. Як одиниця зберігання даних виступає документ, що має унікальний ідентифікатор, версію і містить довільний набір іменованих полів у форматі ключ/значення. Для організації псевдо-структурованого набору даних з довільних документів (агрегування та формування вибірок) застосовується концепція формування видів (view), для визначення яких використовується мова JavaScript. На JavaScript також можна визначати функції для перевірки коректності даних при додаванні в рамках певного представлення нових документів.
CouchDB зберігає дані в форматі впорядкованого списку і дозволяє проводити часткову реплікацію даних між декількома БД в режимі «майстер-майстер» з одночасним виявленням і вирішенням конфліктних ситуацій. Кожен сервер зберігає свій локальний набір даних, синхронізований з іншими серверами, які можуть переводитися в offline-режим і періодично реплікувати зміни. Зокрема, така можливість робить CouchDB привабливим рішенням для організації синхронізації налаштувань програм між різними комп'ютерами (наприклад, це використовувалося для синхронізації вмісту адресної книги ПК c мобільним телефоном через сервіс Ubuntu One.
Ядро системи написано на мові Erlang, оптимізованої для створення обслуговуючих множину паралельних запитів розподілених систем. View-сервер написаний на мові C і базується на JavaScript-рушії Mozilla Spidermonkey. Сирцеві тексти проекту поширюються під ліцензією Apache 2.
Подібно іншим документно-орієнтованим СКБД (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, а перший стабільний випуск вийшов 11 липня 2011.[3]
Попри те, що CouchDB спочатку призначався для роботи в операційній системі Linux, розроблені варіанти цієї системи для операційних систем Microsoft Windows[4] і Mac OS.
Дистрибутив Linux Ubuntu з 9.10 (Karmic Koala) поставляється з системою CouchDB.
CouchDB використовується в багатьох програмних продуктах і на безлічі вебсайтів[5], в тому числі:
- UbuntuOne, Firefox, TomBoy, Akonadi, Evolution - для синхронізації адрес, заміток і закладок[6]
- Mozilla Raindrop — агрегатор повідомлень електронної пошти, соціальних мереж, систем обміну миттєвими повідомленнями (Skype, Jabber)[7]
- ↑ View Server [Архівовано 20 жовтня 2008 у Wayback Machine.] - Couchdb Wiki
- ↑ [[https://web.archive.org/web/20100218055610/http://plugins.jquery.com/project/jqcouch Архівовано 18 лютого 2010 у Wayback Machine.] Плагін для jQuery]
- ↑ Apache CouchDB 1.0.0 has been released. Архів оригіналу за 19 липня 2010. Процитовано 4 квітня 2012.
- ↑ CouchdDB: Windows binary installer. Архів оригіналу за 26 грудня 2011. Процитовано 4 квітня 2012. [Архівовано 2011-12-26 у Wayback Machine.]
- ↑ Проекти з використанням CouchDB. Архів оригіналу за 20 липня 2017. Процитовано 4 квітня 2012. [Архівовано 2017-07-20 у Wayback Machine.]
- ↑ Integrating CouchDB with Ubuntu One: Full Specification. Архів оригіналу за 2 березня 2021. Процитовано 4 квітня 2012.
- ↑ Raindrop Software Architecture. Архів оригіналу за 6 липня 2010. Процитовано 4 квітня 2012.
- Anderson, J. Chris; Slater, Noah; Lehnardt, Jan (15 листопада 2009), CouchDB: The Definitive Guide (вид. 1st), O'Reilly Media, с. 300, ISBN 0596158165, архів оригіналу за 14 липня 2011, процитовано 4 квітня 2012
- Lennon, Joe (15 грудня 2009), Beginning CouchDB (вид. 1st), Apress, с. 300, ISBN 1430272376, архів оригіналу за 5 грудня 2010, процитовано 4 квітня 2012
- CouchDB: The Definitive Guide [Архівовано 3 квітня 2012 у Wayback Machine.]
- CouchDB: A Case Study [Архівовано 6 квітня 2012 у Wayback Machine.]
- Ricky Ho. CouchDB Implementation [Архівовано 23 лютого 2012 у Wayback Machine.]
- Проста бібліотека для роботи з CouchDB на PHP5 [Архівовано 11 червня 2018 у Wayback Machine.]