Эта статья читается как пресс-релиз или новостная статья и может быть в значительной степени основана на обычном освещении . ( Ноябрь 2023 г. ) |
Оригинальный автор(ы) | Дэмиен Кац, Ян Ленардт, Наоми Слейтер, Кристофер Ленц, Дж. Крис Андерсон, Пол Дэвис, Адам Коколоски, Джейсон Дэвис, Бенуа Шено, Филипе Манана, Роберт Ньюсон |
---|---|
Разработчик(и) | Фонд программного обеспечения Apache |
Первоначальный выпуск | 2005 (2005) |
Стабильный релиз | 3.4.2 [1] / 20 октября 2024 г. (20 October 2024) |
Репозиторий |
|
Написано в | Эрланг , JavaScript , C , C++ |
Операционная система | Кроссплатформенный |
Тип | Документоориентированная база данных |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | couchdb.apache.org |
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]
CouchDB также предлагает встроенный интерфейс администрирования, доступный через Интернет, который называется Fauxton. [13]
Возможности репликации и синхронизации CouchDB делают его идеальным для использования на мобильных устройствах, где сетевое соединение не гарантируется, а приложение должно продолжать работать в автономном режиме.
CouchDB хорошо подходит для приложений с накапливающимися, периодически меняющимися данными, для которых должны выполняться предопределенные запросы и где важно управление версиями (например, системы CRM, CMS). Репликация Master-master является особенно интересной функцией, позволяющей легко развертывать несколько сайтов. [14]
Пользователи CouchDB включают:
CouchDB управляет коллекцией документов JSON . Документы организованы с помощью представлений. Представления определяются с помощью агрегатных функций , а фильтры вычисляются параллельно, как и MapReduce .
Представления обычно хранятся в базе данных, а их индексы постоянно обновляются. CouchDB поддерживает систему представлений с использованием внешних сокет-серверов и протокола на основе JSON. [27] Как следствие, серверы представлений были разработаны на различных языках (по умолчанию используется JavaScript, но также есть PHP, Ruby, Python и Erlang).
Приложения взаимодействуют с CouchDB через HTTP. Ниже показано несколько примеров использования cURL , утилиты командной строки. В этих примерах предполагается, что CouchDB работает на localhost (127.0.0.1) на порту 5984.
Действие | Запрос | Ответ |
---|---|---|
Доступ к информации сервера | завиток http://127.0.0.1:5984/ | { "couchdb" : "Добро пожаловать" , "версия" : "1.1.0" } |
Создание базы данных с именем wiki | curl -X PUT http://127.0.0.1:5984/wiki | { "ok" : правда } |
Попытка создать вторую базу данных с именем wiki | curl -X PUT http://127.0.0.1:5984/wiki | { "error" : "file_exists" , "reason" : "База данных не может быть создана, файл уже существует." } |
Получить информацию о базе данных вики | завиток http://127.0.0.1:5984/wiki | { "db_name" : "wiki" , "doc_count" : 0 , "doc_del_count" : 0 , "update_seq" : 0 , "purge_seq" : 0 , "compact_running" : false , "disk_size" : 79 , "instance_start_time" : "1272453873691070" , "disk_format_version" : 5 } |
Удалить базу данных wiki | curl -X УДАЛИТЬ http://127.0.0.1:5984/wiki | { "ok" : правда } |
Создайте документ, запросив у CouchDB идентификатор документа. | curl -X POST -H "Content-Type: application/json" --data \ '{ "text" : "Википедия на CouchDB", "rating": 5 }' \ http://127.0.0.1:5984/wiki | { "ok" : true , "id" : "123BAC" , "rev" : "946B7D1C" } |
получить список баз данных | завиток http://127.0.0.1:5984/_all_dbs | [ "_репликатор" , "_пользователи" , "вики" ] |
CouchDB включает в свой пакет по умолчанию ряд других проектов с открытым исходным кодом.
Компонент | Описание | Лицензия |
---|---|---|
Эрланг | Erlang — это универсальный параллельный язык программирования и система времени выполнения . Последовательное подмножество Erlang — это функциональный язык со строгой оценкой , одиночным присваиванием и динамической типизацией. | Apache 2.0 (версия 18.0 и более поздние версии) Erlang Public License (более ранние версии) |
ОИТ | Международные компоненты для Unicode (ICU) — это проект с открытым исходным кодом, состоящий из зрелых библиотек C / C++ и Java для поддержки Unicode , интернационализации и глобализации программного обеспечения. | Лицензия Юникод |
jQuery | jQuery — это легкая кроссбраузерная библиотека JavaScript , которая подчеркивает взаимодействие между JavaScript и HTML. | Лицензия Массачусетского технологического института |
OpenSSL | OpenSSL — это реализация протоколов SSL и TLS с открытым исходным кодом . Основная библиотека (написанная на языке программирования C ) реализует основные криптографические функции и предоставляет различные вспомогательные функции | Apache 1.0 и четырехпунктная лицензия BSD |
ПаукОбезьяна | SpiderMonkey — производительный движок JavaScript, поддерживаемый Mozilla Foundation . Он содержит интерпретатор , JIT-компилятор и сборщик мусора. | МПЛ 2.0 |