Перейти до вмісту

Apache CouchDB

Очікує на перевірку
Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з CouchDB)
Apache CouchDB
Інтерфейс адміністрування Futon у ранніх версіях CouchDB
Типдокументо-орієнтована СКБД
АвторДем'єн Кац (Damien Katz)
РозробникApache Software Foundation
Перший випуск2005
Стабільний випуск3.5.3 (10 жовтня 2026; 34 дні тому (2026-10-10))
Операційна системакросплатформова
Мова програмуванняErlang
Стан розробкиактивний
ЛіцензіяApache License 2.0
Репозиторійgithub.com/apache/couchdb
Вебсайтcouchdb.apache.org

Apache CouchDB (скорочено CouchDB) — вільна документо-орієнтована система керування базами даних класу NoSQL, розробку якої здійснює Apache Software Foundation. Написана переважно мовою Erlang і поширюється за ліцензією Apache 2.0. Дані зберігаються у вигляді документів JSON, доступ до яких надається через HTTP-інтерфейс. CouchDB підтримує реплікацію між незалежними базами даних, роботу із даними за відсутності мережевого з'єднання з подальшою синхронізацією та кластерне розміщення даних.[1]

На відміну від реляційних СКБД, CouchDB не вимагає єдиної попередньо визначеної схеми полів для всіх документів. Для пошуку та агрегування даних вона використовує представлення (views) на основі MapReduce, а також мову запитів Mango з умовами відбору, заданими у форматі JSON.[2]

Історія

[ред. | ред. код]

Роботу над CouchDB у 2005 році розпочав програміст Дем'єн Кац (Damien Katz), який раніше працював над Lotus Notes. Перші реалізації створювалися мовою C++, згодом проєкт перейшов на Erlang. Назва CouchDB є зворотним акронімом від англ. Cluster of Unreliable Commodity Hardware («кластер із ненадійного масового обладнання»), що відображає задум системи, здатної працювати на звичайних серверах.[3][4][5]

12 лютого 2008 року CouchDB увійшла до Apache Incubator, а в листопаді того самого року стала самостійним проєктом Apache Software Foundation. Випуск 1.0.0 відбувся в липні 2010 року.[6]

У вересні 2016 року вийшла версія 2.0, яка отримала вбудовану кластеризацію на основі технологій проєкту BigCouch, розробленого компанією Cloudant, а також мову запитів Mango і новий інтерфейс адміністрування Fauxton. До того версії 1.x працювали як одновузлові бази даних, хоча могли реплікувати інформацію між окремими серверами.[7][5]

Випуск 3.0 у лютому 2020 року змінив типові налаштування безпеки: для запуску сервера став обов'язковим обліковий запис адміністратора, а новостворені бази за замовчуванням перестали бути загальнодоступними.[8] Станом на жовтень 2026 року актуальний стабільний випуск — 3.5.3.[9]

Принцип роботи

[ред. | ред. код]

Модель даних і зберігання

[ред. | ред. код]

База CouchDB містить набір незалежних документів. Кожен документ має унікальний у межах бази ідентифікатор (`_id`), ідентифікатор редакції (`_rev`) та довільні поля з підтримуваними JSON типами значень. До документа можна долучати двійкові файли. Документи не мусять мати однакових полів, а перевірку допустимості змін можна реалізувати спеціальними функціями у проєктних документах (design documents).[1]

Для одночасної роботи багатьох клієнтів застосовується багатоверсійне керування паралелізмом (англ. multiversion concurrency control, MVCC). Читання не блокує запис, а кожна операція оновлення окремого документа є атомарною. Клієнт, що намагається зберегти зміни на основі застарілої редакції документа, отримує повідомлення про конфлікт. Цей механізм не означає підтримки спільних транзакцій над довільним набором документів.[1]

Документи та службові індекси організовано із застосуванням B-дерев. Оновлення записуються до кінця файлу без перезаписування раніше збережених структур (append-only). Для звільнення місця, зайнятого застарілими даними та індексами, передбачено ущільнення файлів (compaction).[1][10]

Запити й індекси

[ред. | ред. код]

CouchDB надає REST-подібний програмний інтерфейс через HTTP. Операції з базами даних та документами виконуються, зокрема, методами `GET`, `PUT`, `POST` і `DELETE`, а відповіді переважно передаються у форматі JSON.[11]

Для вибірки й агрегування документів використовуються представлення (англ. views). Їх визначають у проєктних документах за допомогою функцій JavaScript: функція `map` формує ключі та значення індексу, а необов'язкова `reduce` обчислює підсумкові значення. Індекси представлень зберігаються окремо та оновлюються інкрементно, без потреби щоразу опрацьовувати всю базу.[1][12]

Інший спосіб пошуку — мова запитів Mango, яка дає змогу задавати умови відбору документів у вигляді JSON-об'єктів. Для прискорення запитів вона використовує спеціальні індекси; зокрема, запит `POST /{db}/_find` повертає документи, що відповідають заданому селектору. На відміну від представлень MapReduce, для звичайних запитів Mango не потрібно писати функції JavaScript.[2]

Реплікація та конфлікти

[ред. | ред. код]

Одна з характерних можливостей CouchDB — інкрементна реплікація між базами даних, які можуть розташовуватися на різних серверах. Реплікація в одному напрямку переносить лише зміни, відсутні в базі призначення; для двобічної синхронізації налаштовують два напрямки. Передбачено безперервну та вибіркову реплікацію. Після переривання зв'язку передавання може продовжуватися з контрольної точки.[13]

Коли той самий документ незалежно змінено в різних репліках, під час синхронізації можуть виникнути конфліктні редакції. CouchDB детерміновано обирає одну з них для звичайного відображення, але зберігає доступ до інших. Остаточне узгодження відмінностей — наприклад, об'єднання змін — виконує прикладна програма або користувач; автоматичне обрання редакції не є злиттям вмісту.[14]

Завдяки цьому механізму CouchDB застосовують у системах, де користувачі працюють із локальними даними без постійного доступу до мережі, а потім синхронізують їх із сервером. Наприклад, JavaScript-бібліотека PouchDB реалізує сумісну реплікацію для баз даних у веббраузері.[13][15]

Кластеризація

[ред. | ред. код]

Починаючи з версії 2.0, CouchDB підтримує вбудовану кластеризацію: бази даних розподіляються на сегменти (shards), копії яких розміщуються на різних вузлах. Це забезпечує горизонтальне масштабування й підвищує доступність даних у разі відмови окремих вузлів. Кластеризація всередині одного логічного екземпляра CouchDB відрізняється від реплікації між незалежними базами даних, яка доступна і в одновузловому режимі.[7][16]

Кількість сегментів і їхніх копій налаштовується. У версії 3.x типовими значеннями є два сегменти та три репліки кожного сегмента; параметри читання й запису визначають, скільки копій мають підтвердити операцію.[17]

Інтерфейс і платформи

[ред. | ред. код]

Серверна частина CouchDB працює на Linux, Microsoft Windows, macOS та інших сумісних із Erlang/OTP операційних системах. Взаємодія з базою можлива з будь-якої мови програмування, здатної надсилати HTTP-запити. Для адміністрування через браузер використовується вбудований інтерфейс Fauxton, який дає змогу створювати бази даних, переглядати документи, запускати запити та керувати реплікацією. У ранніх версіях використовувався інтерфейс Futon.[18][19][7]

Використання

[ред. | ред. код]

Реплікація та можливість автономної роботи роблять CouchDB придатною для вебзастосунків, які мають синхронізувати дані між користувацькими пристроями й сервером. Цю модель, зокрема, використовують разом із PouchDB для вебзастосунків, що зберігають дані локально й можуть працювати без мережевого підключення.[13]

Серед історичних прикладів використання — інтеграція CouchDB в Ubuntu One для синхронізації контактів, нотаток і закладок, описана в технічному плані Ubuntu 2009 року. Тоді ж на CouchDB спирався експериментальний проєкт Mozilla Raindrop для об'єднання повідомлень із різних каналів зв'язку. Ці приклади стосуються раннього періоду розвитку системи й не означають, що відповідні сервіси працюють нині.[20][6]

Примітки

[ред. | ред. код]
  1. 1 2 3 4 5 Technical Overview. Apache CouchDB Documentation (англ.). Apache Software Foundation. Процитовано 30 жовтня 2026.
  2. 1 2 Mango Queries. Apache CouchDB Documentation (англ.). Apache Software Foundation. Процитовано 30 жовтня 2026.
  3. ↑ Damien Katz. Foreword. CouchDB: The Definitive Guide (англ.). Процитовано 30 жовтня 2026.
  4. ↑ Scott Beatty (6 вересня 2008). Notes from Jan Lehnardt's Presentation on CouchDB to the BBC, 2008-08-27 (англ.). Apache Software Foundation. Процитовано 30 жовтня 2026.
  5. 1 2 Jan Lehnardt (25 липня 2016). The Road to CouchDB 2.0. CouchDB Blog (англ.). Процитовано 30 жовтня 2026.
  6. 1 2 Board history: CouchDB (англ.). Apache Software Foundation. Процитовано 30 жовтня 2026.
  7. 1 2 3 The Apache Software Foundation Announces Apache CouchDB v2.0 (англ.). Apache Software Foundation. 20 вересня 2016. Процитовано 30 жовтня 2026.
  8. ↑ The Road to CouchDB 3.0: Security. CouchDB Blog (англ.). 26 лютого 2020. Процитовано 30 жовтня 2026.
  9. ↑ Apache CouchDB — Releases (англ.). Apache Software Foundation. Процитовано 30 жовтня 2026.
  10. ↑ Compaction. Apache CouchDB Documentation (англ.). Apache Software Foundation. Процитовано 30 жовтня 2026.
  11. ↑ API Basics. Apache CouchDB Documentation (англ.). Apache Software Foundation. Процитовано 30 жовтня 2026.
  12. ↑ Design Documents. Apache CouchDB Documentation (англ.). Apache Software Foundation. Процитовано 30 жовтня 2026.
  13. 1 2 3 Introduction to Replication. Apache CouchDB Documentation (англ.). Apache Software Foundation. Процитовано 30 жовтня 2026.
  14. ↑ Replication and Conflict Model. Apache CouchDB Documentation (англ.). Apache Software Foundation. Процитовано 30 жовтня 2026.
  15. ↑ About PouchDB. PouchDB (англ.). Процитовано 30 жовтня 2026.
  16. ↑ Cluster Management. Apache CouchDB Documentation (англ.). Apache Software Foundation. Процитовано 30 жовтня 2026.
  17. ↑ Theory. Apache CouchDB Documentation (англ.). Apache Software Foundation. Процитовано 30 жовтня 2026.
  18. ↑ Installation. Apache CouchDB Documentation (англ.). Apache Software Foundation. Процитовано 30 жовтня 2026.
  19. ↑ Getting Started. Apache CouchDB Documentation (англ.). Apache Software Foundation. Процитовано 30 жовтня 2026.
  20. ↑ Integrating with Ubuntu One. Ubuntu Wiki (англ.). 17 червня 2009. Процитовано 30 жовтня 2026.

Література

[ред. | ред. код]
  • Anderson, J. Chris; Lehnardt, Jan; Slater, Noah (2010). CouchDB: The Definitive Guide (англ.). O'Reilly Media. ISBN 978-0-596-15589-6.
  • Lennon, Joe (2009). Beginning CouchDB (англ.). Apress. ISBN 978-1-4302-7237-3.

Посилання

[ред. | ред. код]