CouchDB

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Apache CouchDB
Couchdb screenshot.pngCouchDB'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; 48 днів тому)
Написано на 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], в тому числі:

Виноски[ред.ред. код]

Література[ред.ред. код]

Посилання[ред.ред. код]