Apache CouchDB (Cluster Of Unreliable Commodity Hardware) — розподілена документо-орієнтована система управління базами даних класу NoSQL-систем, що не вимагає опису схеми даних. Запити до CouchDB та індексація даних можуть виконуватися згідно з парадигмою MapReduce, використовуючи для формування логіки вибірки даних мову JavaScript.
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 |
|
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.
Особливості
Подібно іншим документно-орієнтованим СКБД (, Lotus Notes, MongoDB), і на відміну від реляційних СКБД, CouchDB призначена для роботи з напів-структурованою інформацією і має такі особливості:
- дані зберігаються не в рядках і колонках, а у вигляді JSON-подібних документів, моделлю яких є не таблиці, а дерева;
- типізація елементів даних, тобто зіставлення окремим полям документів типів INTEGER, DATE тощо, не підтримується — замість цього користувач може написати функцію-валідатор;
- цілісність бази даних забезпечується виключно на рівні окремих записів (але не на рівні зв'язків між ними);
- зв'язки між таблицями або записами принципово не підтримуються, відповідно операція об'єднання (JOIN) між таблицями не визначена;
- для побудови індексів і виконання використовуються функції виду (view);
- функції-валідатори, функції-види, функції-фільтри зберігаються в текстовому вигляді в самій базі даних;
- ці функції, як правило, написані на мовах JavaScript або Erlang, а для їхнього виконання запускається окремий сервер запитів, взаємодія з яким відбувається за допомогою сокетів і текстового JSON-протоколу;
- кожній базі даних в системі CouchDB відповідає єдине B-дерево (не плутати з двійковим деревом);
- кожне B-дерево зберігається у вигляді окремого файлу на диску;
- одночасно може бути запущено декілька нитей для читання бази даних і лише одна для запису;
- цілісність бази даних забезпечується тільки при записі даних на диск;
- види і їхні індекси, що зберігаються в БД, оновлюються безперервно, проте при кожному оновленні функцій видів або відображення оновлюється все B-дерево цілком;
- при обробці даних за допомогою функцій-видів використовується спрощена модель технології MapReduce, що дозволяє здійснювати паралельні обчислення, в тому числі і на багатоядерних процесорах;
- розподіл обчислень на кілька вузлів не підтримується — замість цього використовується механізм ;
- обробка даних за допомогою ланцюжка послідовних функцій MapReduce не підтримується;
- підтримується вертикальна масштабованість, що означає підтримку не тільки величезних кластерів, але і портативних пристроїв (нетбуки, смартфони тощо);
- зовнішній інтерфейс (API) до цієї СКБД побудований на основі архітектури REST, тобто сама база даних, окремі записи, відображення і запити — суть ресурси, які мають унікальну адресу (URL) і підтримують операції GET, PUT, POST, DELETE;
- тому для взаємодії з базою даних було написано багато клієнтських бібліотек, у тому числі на таких мовах JavaScript, PHP, Ruby , Python і Erlang;
- взаємодія між окремими компонентами СКБД, тобто з серверами видів здійснюється знову-таки за допомогою текстового протоколу, а дані передаються в форматі JSON; це дозволило використовувати різні мови програмування для написання цих компонентів — Java, Python, JavaScript тощо.
Платформи
Проект CouchDB був прийнятий в інкубатор Apache в лютому 2008, а перший стабільний випуск вийшов 11 липня 2011.
Попри те, що CouchDB спочатку призначався для роботи в операційній системі Linux, розроблені варіанти цієї системи для операційних систем Microsoft Windows і Mac OS.
Дистрибутив Linux Ubuntu з 9.10 (Karmic Koala) поставляється з системою CouchDB.
Використання CouchDB
CouchDB використовується в багатьох програмних продуктах і на безлічі вебсайтів, в тому числі:
- UbuntuOne, Firefox, TomBoy, , Evolution - для синхронізації адрес, заміток і закладок
- — електронної пошти, соціальних мереж, систем обміну миттєвими повідомленнями (Skype, Jabber)
Виноски
- 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]
- . Архів оригіналу за 19 липня 2010. Процитовано 4 квітня 2012.
- . Архів оригіналу за 26 грудня 2011. Процитовано 4 квітня 2012.
- . Архів оригіналу за 20 липня 2017. Процитовано 4 квітня 2012.
- . Архів оригіналу за 2 березня 2021. Процитовано 4 квітня 2012.
- . Архів оригіналу за 6 липня 2010. Процитовано 4 квітня 2012.
Література
- Anderson, J. Chris; Slater, Noah; Lehnardt, Jan (15 листопада 2009), (вид. 1st), O'Reilly Media, с. 300, ISBN , архів оригіналу за 14 липня 2011, процитовано 4 квітня 2012
- Lennon, Joe (15 грудня 2009), (вид. 1st), Apress, с. 300, ISBN , архів оригіналу за 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.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Apache CouchDB Cluster Of Unreliable Commodity Hardware rozpodilena dokumento oriyentovana sistema upravlinnya bazami danih klasu NoSQL sistem sho ne vimagaye opisu shemi danih Zapiti do CouchDB ta indeksaciya danih mozhut vikonuvatisya zgidno z paradigmoyu MapReduce vikoristovuyuchi dlya formuvannya logiki vibirki danih movu JavaScript Apache CouchDBCouchDB s Futon Administration Interface User databaseTipdokumento oriyentovana sistema upravlinnya bazami danihAvtorDamien Katz Jan Lehnardt Noah Slater Christopher Lenz J Chris Anderson Paul Davis Adam Kocoloski Jason Davies Benoit Chesneau Filipe Manana Robert NewsonRozrobnikApache Software FoundationPershij vipusk2005Stabilnij vipusk1 6 10 chervnya 2014 10 rokiv tomu 2014 06 10 Operacijna sistemakros platformovijMova programuvannyaErlangDostupni movianglijskaStan rozrobkiaktivnijLicenziyaApache License 2 0Repozitorijgithub com apache couchdbVebsajtcouchdb apache org Mediafajli u Vikishovishi CouchDB mozhna rozglyadati yak server vebzastosunkiv dlya realizaciyi ciyeyi ideyi v CouchDB vbudovanij produktivnij vebserver a pochatkovij kod yak i dani zberigayetsya v tij zhe bazi danih Dlya avtomatizaciyi roboti iz zastosunkami CouchDB vikoristovuyetsya utilita CouchApp Cya programa ye vilnoyu ta vidkritoyu i napisana na movi Erlang OglyadZapiti do CouchDB ta indeksaciya danih mozhut vikonuvatisya vidpovidno do paradigmi MapReduce vikoristovuyuchi dlya formuvannya logiki vibirki danih movu JavaScript Dostup do BD zdijsnyuyetsya za dopomogoyu protokolu HTTP z vikoristannyam RESTful JSON API Yak odinicya zberigannya danih vistupaye dokument sho maye unikalnij identifikator versiyu i mistit dovilnij nabir imenovanih poliv u formati klyuch znachennya Dlya organizaciyi psevdo strukturovanogo naboru danih z dovilnih dokumentiv agreguvannya ta formuvannya vibirok zastosovuyetsya koncepciya formuvannya vidiv view dlya viznachennya yakih vikoristovuyetsya mova JavaScript Na JavaScript takozh mozhna viznachati funkciyi dlya perevirki korektnosti danih pri dodavanni v ramkah pevnogo predstavlennya novih dokumentiv CouchDB zberigaye dani v formati vporyadkovanogo spisku i dozvolyaye provoditi chastkovu replikaciyu danih mizh dekilkoma BD v rezhimi majster majster z odnochasnim viyavlennyam i virishennyam konfliktnih situacij Kozhen server zberigaye svij lokalnij nabir danih sinhronizovanij z inshimi serverami yaki mozhut perevoditisya v offline rezhim i periodichno replikuvati zmini Zokrema taka mozhlivist robit CouchDB privablivim rishennyam dlya organizaciyi sinhronizaciyi nalashtuvan program mizh riznimi komp yuterami napriklad ce vikoristovuvalosya dlya sinhronizaciyi vmistu adresnoyi knigi PK c mobilnim telefonom cherez servis Ubuntu One Yadro sistemi napisano na movi Erlang optimizovanoyi dlya stvorennya obslugovuyuchih mnozhinu paralelnih zapitiv rozpodilenih sistem View server napisanij na movi C i bazuyetsya na JavaScript rushiyi Mozilla Spidermonkey Sircevi teksti proektu poshiryuyutsya pid licenziyeyu Apache 2 Osoblivosti Podibno inshim dokumentno oriyentovanim SKBD Lotus Notes MongoDB i na vidminu vid relyacijnih SKBD CouchDB priznachena dlya roboti z napiv strukturovanoyu informaciyeyu i maye taki osoblivosti dani zberigayutsya ne v ryadkah i kolonkah a u viglyadi JSON podibnih dokumentiv modellyu yakih ye ne tablici a dereva tipizaciya elementiv danih tobto zistavlennya okremim polyam dokumentiv tipiv INTEGER DATE tosho ne pidtrimuyetsya zamist cogo koristuvach mozhe napisati funkciyu validator cilisnist bazi danih zabezpechuyetsya viklyuchno na rivni okremih zapisiv ale ne na rivni zv yazkiv mizh nimi zv yazki mizh tablicyami abo zapisami principovo ne pidtrimuyutsya vidpovidno operaciya ob yednannya JOIN mizh tablicyami ne viznachena dlya pobudovi indeksiv i vikonannya vikoristovuyutsya funkciyi vidu view funkciyi validatori funkciyi vidi funkciyi filtri zberigayutsya v tekstovomu viglyadi v samij bazi danih ci funkciyi yak pravilo napisani na movah JavaScript abo Erlang a dlya yihnogo vikonannya zapuskayetsya okremij server zapitiv vzayemodiya z yakim vidbuvayetsya za dopomogoyu soketiv i tekstovogo JSON protokolu kozhnij bazi danih v sistemi CouchDB vidpovidaye yedine B derevo ne plutati z dvijkovim derevom kozhne B derevo zberigayetsya u viglyadi okremogo fajlu na disku odnochasno mozhe buti zapusheno dekilka nitej dlya chitannya bazi danih i lishe odna dlya zapisu cilisnist bazi danih zabezpechuyetsya tilki pri zapisi danih na disk vidi i yihni indeksi sho zberigayutsya v BD onovlyuyutsya bezperervno prote pri kozhnomu onovlenni funkcij vidiv abo vidobrazhennya onovlyuyetsya vse B derevo cilkom pri obrobci danih za dopomogoyu funkcij vidiv vikoristovuyetsya sproshena model tehnologiyi MapReduce sho dozvolyaye zdijsnyuvati paralelni obchislennya v tomu chisli i na bagatoyadernih procesorah rozpodil obchislen na kilka vuzliv ne pidtrimuyetsya zamist cogo vikoristovuyetsya mehanizm obrobka danih za dopomogoyu lancyuzhka poslidovnih funkcij MapReduce ne pidtrimuyetsya pidtrimuyetsya vertikalna masshtabovanist sho oznachaye pidtrimku ne tilki velicheznih klasteriv ale i portativnih pristroyiv netbuki smartfoni tosho zovnishnij interfejs API do ciyeyi SKBD pobudovanij na osnovi arhitekturi REST tobto sama baza danih okremi zapisi vidobrazhennya i zapiti sut resursi yaki mayut unikalnu adresu URL i pidtrimuyut operaciyi GET PUT POST DELETE tomu dlya vzayemodiyi z bazoyu danih bulo napisano bagato kliyentskih bibliotek u tomu chisli na takih movah JavaScript PHP Ruby Python i Erlang vzayemodiya mizh okremimi komponentami SKBD tobto z serverami vidiv zdijsnyuyetsya znovu taki za dopomogoyu tekstovogo protokolu a dani peredayutsya v formati JSON ce dozvolilo vikoristovuvati rizni movi programuvannya dlya napisannya cih komponentiv Java Python JavaScript tosho PlatformiProekt CouchDB buv prijnyatij v inkubator Apache v lyutomu 2008 a pershij stabilnij vipusk vijshov 11 lipnya 2011 Popri te sho CouchDB spochatku priznachavsya dlya roboti v operacijnij sistemi Linux rozrobleni varianti ciyeyi sistemi dlya operacijnih sistem Microsoft Windows i Mac OS Distributiv Linux Ubuntu z 9 10 Karmic Koala postavlyayetsya z sistemoyu CouchDB Vikoristannya CouchDBCouchDB vikoristovuyetsya v bagatoh programnih produktah i na bezlichi vebsajtiv v tomu chisli UbuntuOne Firefox TomBoy Evolution dlya sinhronizaciyi adres zamitok i zakladok elektronnoyi poshti socialnih merezh sistem obminu mittyevimi povidomlennyami Skype Jabber VinoskiView Server 20 zhovtnya 2008 u Wayback Machine Couchdb Wiki https web archive org web 20100218055610 http plugins jquery com project jqcouch Arhivovano18 lyutogo 2010 u Wayback Machine Plagin dlya jQuery Arhiv originalu za 19 lipnya 2010 Procitovano 4 kvitnya 2012 Arhiv originalu za 26 grudnya 2011 Procitovano 4 kvitnya 2012 Arhiv originalu za 20 lipnya 2017 Procitovano 4 kvitnya 2012 Arhiv originalu za 2 bereznya 2021 Procitovano 4 kvitnya 2012 Arhiv originalu za 6 lipnya 2010 Procitovano 4 kvitnya 2012 LiteraturaAnderson J Chris Slater Noah Lehnardt Jan 15 listopada 2009 vid 1st O Reilly Media s 300 ISBN 0596158165 arhiv originalu za 14 lipnya 2011 procitovano 4 kvitnya 2012 Lennon Joe 15 grudnya 2009 vid 1st Apress s 300 ISBN 1430272376 arhiv originalu za 5 grudnya 2010 procitovano 4 kvitnya 2012PosilannyaCouchDB The Definitive Guide 3 kvitnya 2012 u Wayback Machine CouchDB A Case Study 6 kvitnya 2012 u Wayback Machine Ricky Ho CouchDB Implementation 23 lyutogo 2012 u Wayback Machine Prosta biblioteka dlya roboti z CouchDB na PHP5 11 chervnya 2018 u Wayback Machine