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 |
| Сайт | couchdb.apache.org |
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]
Виноски[ред. • ред. код]
Література[ред. • ред. код]
- Anderson, J. Chris; Slater, Noah; Lehnardt, Jan (November 15, 2009), CouchDB: The Definitive Guide (1st вид.), O'Reilly Media, сторінки 300, ISBN 0596158165, http://guide.couchdb.org/index.html
- Lennon, Joe (December 15, 2009), Beginning CouchDB (1st вид.), Apress, сторінки 300, ISBN 1430272376, http://www.apress.com/book/view/9781430272373
Посилання[ред. • ред. код]
- CouchDB: The Definitive Guide
- CouchDB: A Case Study
- Ricky Ho. CouchDB Implementation
- Проста бібліотека для роботи з CouchDB на PHP5
|
||||||||||||||||||||