Document-oriented NoSQL database
Apache CouchDB — это документоориентированная NoSQL- база данных с открытым исходным кодом , реализованная на Erlang .
CouchDB использует несколько форматов и протоколов для хранения, передачи и обработки своих данных. Он использует JSON для хранения данных, JavaScript в качестве языка запросов с использованием MapReduce и HTTP для API . [2]
CouchDB был впервые выпущен в 2005 году, а в 2008 году стал проектом Apache Software Foundation .
В отличие от реляционной базы данных , база данных CouchDB не хранит данные и связи в таблицах. Вместо этого каждая база данных представляет собой набор независимых документов. Каждый документ поддерживает свои собственные данные и автономную схему. Приложение может обращаться к нескольким базам данных, например, к одной, хранящейся на мобильном телефоне пользователя, и к другой на сервере. Метаданные документа содержат информацию о ревизиях, что позволяет объединять любые различия, которые могли возникнуть, пока базы данных были отключены.
CouchDB реализует форму управления параллелизмом многоверсионности (MVCC), поэтому он не блокирует файл базы данных во время записи. Разрешение конфликтов оставлено на усмотрение приложения. Разрешение конфликта обычно включает сначала слияние данных в один из документов, а затем удаление устаревшего. [3]
Другие функции включают семантику ACID на уровне документа с конечной согласованностью , (инкрементальную) MapReduce и (инкрементальную) репликацию. Одной из отличительных особенностей CouchDB является репликация с несколькими мастерами , которая позволяет масштабировать ее на разных машинах для создания высокопроизводительных систем. Встроенное веб-приложение под названием Fauxton (ранее Futon) помогает в администрировании.
История
Couch — это аббревиатура для cluster of unreliable commercial hardware . [4]
Проект CouchDB был создан в апреле 2005 года Дэмиеном Кацем, бывшим разработчиком Lotus Notes в IBM . Он самостоятельно финансировал проект в течение почти двух лет и выпустил его как проект с открытым исходным кодом под лицензией GNU General Public License .
В феврале 2008 года он стал проектом Apache Incubator и предлагался под лицензией Apache License . [5] Спустя несколько месяцев он перешел в статус проекта верхнего уровня. [6] Это привело к выпуску первой стабильной версии в июле 2010 года . [7]
В начале 2012 года Кац покинул проект, чтобы сосредоточиться на Couchbase Server . [8]
После ухода Каца проект Apache CouchDB продолжил работу, выпустив версию 1.2 в апреле 2012 года и 1.3 в апреле 2013 года. В июле 2013 года сообщество CouchDB объединило кодовую базу BigCouch , кластеризованную версию CouchDB от Cloudant , с проектом Apache. [9] Фреймворк кластеризации BigCouch включен в текущую версию Apache CouchDB. [10]
Собственная кластеризация поддерживается в версии 2.0.0. А новый Mango Query Server обеспечивает простой способ на основе JSON для выполнения запросов CouchDB без JavaScript или MapReduce. Также в версии 2.0.0 был представлен Fauxton, новый встроенный веб-интерфейс, заменивший Futon, старый встроенный веб-интерфейс. [11]
Основные характеристики
- Семантика ACID
- CouchDB обеспечивает семантику ACID . [12] Это достигается путем реализации формы управления многоверсионным параллелизмом , что означает, что CouchDB может обрабатывать большой объем одновременных читателей и писателей без конфликтов.
- Создано для офлайн
- CouchDB может реплицироваться на устройства (например, смартфоны), которые могут отключаться от сети, и выполнять синхронизацию данных, когда устройство снова подключается к сети.
- Распределенная архитектура с репликацией
- CouchDB был разработан с учетом двунаправленной репликации (или синхронизации) и работы в автономном режиме. Это означает, что несколько реплик могут иметь собственные копии одних и тех же данных, изменять их, а затем синхронизировать эти изменения позднее.
- Хранение документов
- CouchDB хранит данные как «документы», как одну или несколько пар поле/значение, выраженных как JSON . Значения полей могут быть простыми вещами, такими как строки, числа или даты; но также могут использоваться упорядоченные списки и ассоциативные массивы . Каждый документ в базе данных CouchDB имеет уникальный идентификатор, и не требуется схема документа.
- Окончательная согласованность
- CouchDB гарантирует конечную согласованность , обеспечивая как доступность, так и устойчивость к разделам.
- Карта/сокращение представлений и индексов
- Сохраненные данные структурированы с использованием представлений. В CouchDB каждое представление создается функцией JavaScript , которая действует как половина Map операции map /reduce. Функция берет документ и преобразует его в одно значение, которое она возвращает. CouchDB может индексировать представления и обновлять эти индексы по мере добавления, удаления или обновления документов.
- HTTP-API
- Все элементы имеют уникальный URI, который раскрывается через HTTP. Он использует методы HTTP POST, GET, PUT и DELETE для четырех основных операций CRUD (Create, Read, Update, Delete) на всех ресурсах.
CouchDB также предлагает встроенный интерфейс администрирования, доступный через Интернет, который называется Fauxton. [13]
Варианты использования и производственные развертывания
Возможности репликации и синхронизации CouchDB делают его идеальным для использования на мобильных устройствах, где сетевое соединение не гарантируется, а приложение должно продолжать работать в автономном режиме.
CouchDB хорошо подходит для приложений с накапливающимися, периодически меняющимися данными, для которых должны выполняться предопределенные запросы и где важно управление версиями (например, системы CRM, CMS). Репликация Master-master является особенно интересной функцией, позволяющей легко развертывать несколько сайтов. [14]
Пользователи
Пользователи CouchDB включают:
- ЦЕРН использует CouchDB в качестве базы данных для Системы управления данными на Большом адронном коллайдере . [15]
- Красный Крест использует приложение iDAT для электронного завершения работы с делами в зонах стихийных бедствий. Здесь CouchDB используется как многоузловая одноранговая офлайн-база данных. [16]
- Службы IBM Cloud на фундаментальном уровне основаны на CouchDB. [17]
- United Airlines использует CouchDB для бортовых развлекательных систем на более чем 3000 самолетов. [18] [19]
- Amadeus IT Group , для некоторых из их внутренних систем. [ необходима ссылка ]
- Credit Suisse , для внутреннего использования в отделе товаров для их рыночной структуры. [20] [ необходим лучший источник ]
- Meebo , для их социальной платформы (веб и приложения). [ требуется ссылка ] Meebo была приобретена Google, и большинство продуктов были закрыты 12 июля 2012 года. [21]
- npm использует CouchDB в качестве репликационной базы данных для своего реестра пакетов. [22]
- Sophos , для некоторых из их внутренних систем. [ необходима ссылка ]
- BBC , для динамической CMS-платформы. [23]
- Canonical начала использовать его в 2009 году для своего сервиса синхронизации «Ubuntu One» [24] , но прекратила его использование в ноябре 2011 года [25].
- CANAL+ для международной платформы по запросу на CANAL+ Overseas.
- Protogrid, как хранилище для их быстрой среды разработки приложений [26]
Манипулирование данными: документы и представления
CouchDB управляет коллекцией документов JSON . Документы организованы с помощью представлений. Представления определяются с помощью агрегатных функций , а фильтры вычисляются параллельно, как и MapReduce .
Представления обычно хранятся в базе данных, а их индексы постоянно обновляются. CouchDB поддерживает систему представлений с использованием внешних сокет-серверов и протокола на основе JSON. [27] Как следствие, серверы представлений были разработаны на различных языках (по умолчанию используется JavaScript, но также есть PHP, Ruby, Python и Erlang).
Доступ к данным через HTTP
Приложения взаимодействуют с CouchDB через HTTP. Ниже показано несколько примеров использования cURL , утилиты командной строки. В этих примерах предполагается, что CouchDB работает на localhost (127.0.0.1) на порту 5984.
Компоненты с открытым исходным кодом
CouchDB включает в свой пакет по умолчанию ряд других проектов с открытым исходным кодом.
Смотрите также
Ссылки
- ^ "Release 3.4.2". 20 октября 2024 г. Получено 21 октября 2024 г.
- ^ Apache Software Foundation. "Apache CouchDB" . Получено 15 апреля 2012 г.
- ^ Смит, Джейсон. «Что такое протокол репликации CouchDB? Он похож на Git?». StackOverflow . Stack Exchange . Получено 14 апреля 2012 г. .
- ^ "Exploring CouchDB". Developer Works . IBM. 31 марта 2009 г. Получено 30 сентября 2016 г.
- ^ Объявление о рассылке Apache на mail-archives.apache.org
- ^ Re: Предлагаемое решение: Установить CouchDB TLP на mail-archives.apache.org
- ^ "CouchDB NoSQL Database Ready for Production Use" Архивировано 15 ноября 2010 г. на Wayback Machine , статья из PC World за июль 2010 г.
- ^ Кац, Дэмиен. "Будущее CouchDB" . Получено 15 апреля 2012 г.
- ↑ Слейтер, Ной (25 июля 2013 г.). «Welcome BigCouch» . Получено 25 июля 2013 г. .
- ^ "'2.0'". 20 сентября 2016 г. Получено 13 января 2017 г.
- ^ "1.8.2.0.x Branch — Apache CouchDB® 3.3 Documentation". docs.couchdb.org . Получено 2024-08-04 .
- ^ CouchDB, Технический обзор. Архивировано 20 октября 2011 г. на Wayback Machine.
- ^ "couchdb-fauxton" . Гитхаб . апач . Проверено 2 мая 2023 г.
- ^ Сравнение Cassandra, MongoDB, CouchDB, Redis, Riak и HBase от Кристофа Ковача
- ^ "Почему ученые Большого адронного коллайдера используют CouchDB". ReadWrite . 2010-08-26 . Получено 2022-03-29 .
- ^ iDAT, Код Красного Креста, 2021-07-31 , получено 2022-03-29
- ^ "Database-Deep-Dives-CouchDB". www.ibm.com . 19 июля 2019 . Получено 29.03.2022 .
- ^ "Database-Deep-Dives-CouchDB". www.ibm.com . 19 июля 2019 . Получено 29.03.2022 .
- ^ «United Airlines оптимизирует операции с помощью Couchbase | Пример из практики». www.couchbase.com . Получено 29.03.2022 .
- ^ "CouchDB in the wild" Архивировано 20 июля 2017 г. в статье Wayback Machine о продукте Web, список программных проектов и веб-сайтов, использующих CouchDB.
- ^ Катлер, Ким-Май (9 июня 2012 г.). «Meebo получает классическое обращение Google Acq-hire: большинство продуктов скоро закроются». TechCrunch . AOL Inc . Получено 7 января 2016 г.
- ^ "npm-registry-couchapp". GitHub . npm. 17 июня 2015 г. Получено 7 января 2016 г.
- ^ CouchDB на BBC как отказоустойчивое, масштабируемое хранилище ключей и значений для нескольких центров обработки данных
- ↑ Электронное письмо от Эллиота Мерфи (Canonical), архивировано 05.05.2011 на Wayback Machine в список рассылки CouchDB-Devel
- ^ Canonical удаляет CouchDB из Ubuntu One (Slashdot)
- ^ "Protogrid - Über uns".
- ^ Просмотреть документацию сервера, заархивированную 2008-10-20 на Wayback Machine на wiki.apache.org
Библиография
- Андерсон, Дж. Крис; Слейтер, Ноа; Ленардт, Ян (15 ноября 2009 г.), CouchDB: The Definitive Guide (1-е изд.), O'Reilly Media , стр. 300, ISBN 978-0-596-15816-3
- Леннон, Джо (15 декабря 2009 г.), Beginning CouchDB (1-е изд.), Apress , стр. 300, ISBN 978-1-4302-7237-3, заархивировано из оригинала 5 декабря 2010 г. , извлечено 1 ноября 2009 г.
- Холт, Брэдли (7 марта 2011 г.), Написание и запрос представлений MapReduce в CouchDB (1-е изд.), O'Reilly Media , стр. 76, ISBN 978-1-4493-0312-9
- Холт, Брэдли (11 апреля 2011 г.), Масштабирование CouchDB (1-е изд.), O'Reilly Media , стр. 72, ISBN 978-1-4493-0343-3
- Браун, MC (31 октября 2011 г.), Начало работы с CouchDB (1-е изд.), O'Reilly Media , стр. 50, ISBN 978-1-4493-0755-4
- Томпсон, Мик (2 августа 2011 г.), Начало работы с GEO, CouchDB и Node.js (1-е изд.), O'Reilly Media , стр. 64, ISBN 978-1-4493-0752-3
Внешние ссылки
- Официальный сайт
- CouchDB: Полное руководство
- Полный справочник HTTP API
- Простая библиотека PHP5 для взаимодействия с CouchDB
- Асинхронный клиент CouchDB для Java
- Асинхронный клиент CouchDB для Scala
- Lehnardt, Jan (2008). "Couch DB at 10,000 feet". Erlang eXchange 2008. Архивировано из оригинала 9 ноября 2012. Получено 15 апреля 2012 .
- Ленхардт, Ян (2009). "CouchDB для разработчиков Erlang". Erlang Factory London 2009. Архивировано из оригинала 19 июня 2011 г. Получено 15 апреля 2012 г.
- Katz, Damien (январь 2009). "CouchDB and Me". RubyFringe . InfoQ. Архивировано из оригинала 27 апреля 2011 . Получено 15 апреля 2012 .