Apache CouchDB
CouchDB's Futon Administration Interface, User database | |
Тип | документо-орієнтована система управління базами даних |
---|---|
Автор | 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[ред. | ред. код]
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.
- ↑ Проекти з використанням CouchDB. Архів оригіналу за 20 липня 2017. Процитовано 4 квітня 2012.
- ↑ 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.]
|