Apache CouchDB
![]() | Эта статья читается как пресс-релиз или новостная статья и может быть в значительной степени основана на обычных репортажах . ( ноябрь 2023 г. ) |
![]() | |
![]() Интерфейс администрирования Fauxton CouchDB, база данных пользователей | |
Оригинальный автор(ы) | Дэмиен Кац, Ян Ленардт, Наоми Слейтер, Кристофер Ленц, Дж. Крис Андерсон, Пол Дэвис, Адам Коколоски, Джейсон Дэвис, Бенуа Шено, Филипе Манана, Роберт Ньюсон |
---|---|
Разработчик(и) | Фонд программного обеспечения Apache |
Первоначальный выпуск | 2005 г |
Стабильная версия | 3.3.3 [1] ![]() |
Репозиторий | |
Написано в | Эрланг , JavaScript , C , C++ |
Операционная система | Кросс-платформенный |
Тип | Документоориентированная база данных |
Лицензия | Лицензия Апач 2.0 |
Веб-сайт | диван ![]() |
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) помогает в администрировании.
История
[ редактировать ]Диван — это аббревиатура от кластера ненадежного стандартного оборудования . [4] Проект CouchDB был создан в апреле 2005 года Дэмиеном Кацем, бывшим разработчиком Lotus Notes в IBM . Он самофинансировал проект в течение почти двух лет и выпустил его как проект с открытым исходным кодом под лицензией GNU General Public License .
В феврале 2008 года он стал проектом инкубатора Apache и вместо этого предлагался под лицензией Apache . [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 предоставляет простой способ выполнения запросов CouchDB на основе JSON без использования JavaScript или MapReduce.
Основные особенности
[ редактировать ]- КИСЛОТНАЯ Семантика
- CouchDB предоставляет семантику ACID . [11] Это достигается за счет реализации формы управления многоверсионным параллелизмом , что означает, что CouchDB может без конфликтов обрабатывать большой объем одновременных операций чтения и записи.
- Создано для оффлайн
- CouchDB может реплицироваться на устройствах (например, смартфонах), которые могут отключаться от сети, и выполнять синхронизацию данных за вас, когда устройство снова подключается к сети.
- Распределенная архитектура с репликацией
- CouchDB был разработан с учетом двунаправленной репликации (или синхронизации) и автономной работы. Это означает, что несколько реплик могут иметь свои собственные копии одних и тех же данных, изменять их, а затем синхронизировать эти изменения позднее.
- Хранение документов
- CouchDB хранит данные как «документы», как одну или несколько пар поле/значение, выраженных в формате JSON . Значения полей могут быть простыми, например строками, числами или датами; но упорядоченные списки и ассоциативные массивы также можно использовать . Каждый документ в базе данных CouchDB имеет уникальный идентификатор, и не существует обязательной схемы документа.
- Окончательная согласованность
- CouchDB гарантирует конечную согласованность , обеспечивая как доступность, так и устойчивость к разделам.
- Сопоставить/уменьшить представления и индексы
- Сохраненные данные структурируются с помощью представлений. В CouchDB каждое представление создается с помощью функции JavaScript , которая действует как часть карты в операции карты /сокращения. Функция принимает документ и преобразует его в одно значение, которое она возвращает. CouchDB может индексировать представления и обновлять эти индексы по мере добавления, удаления или обновления документов.
- HTTP API
- Все элементы имеют уникальный URI, который предоставляется через HTTP. Он использует методы HTTP POST, GET, PUT и DELETE для четырех основных операций CRUD (создание, чтение, обновление, удаление) на всех ресурсах.
CouchDB также предлагает встроенный интерфейс администрирования, доступный через Интернет, под названием Fauxton. [12]
Варианты использования и производственное развертывание
[ редактировать ]Возможности репликации и синхронизации CouchDB делают его идеальным для использования на мобильных устройствах, где сетевое соединение не гарантируется, и приложение должно продолжать работать в автономном режиме.
CouchDB хорошо подходит для приложений с накапливающимися, периодически меняющимися данными, для которых необходимо выполнять заранее определенные запросы и где важно управление версиями (например, CRM, CMS-системы). Репликация «главный-главный» — особенно интересная функция, позволяющая легко развертывать системы на нескольких площадках. [13]
Пользователи
[ редактировать ]Среди пользователей CouchDB:
- ЦЕРН использует CouchDB в качестве базы данных для системы управления данными Большого адронного коллайдера . [14]
- Красный Крест использует приложение iDAT для электронного оформления дел в зонах стихийных бедствий. Здесь CouchDB используется как многоузловая одноранговая база данных, работающая в автономном режиме. [15]
- Сервисы IBM Cloud на фундаментальном уровне основаны на CouchDB. [16]
- United Airlines использует CouchDB для бортовых развлекательных систем более чем в 3000 самолетов. [17] [18]
- Amadeus IT Group для некоторых своих серверных систем. [ нужна ссылка ]
- Credit Suisse для внутреннего использования в отделе сырьевых товаров в рамках своей торговой площадки. [19] [ нужен лучший источник ]
- Meebo для своей социальной платформы (Интернет и приложения). [ нужна ссылка ] Meebo была приобретена Google, и 12 июля 2012 года большинство продуктов было закрыто. [20]
- npm использует CouchDB в качестве реплицируемой базы данных для своего реестра пакетов. [21]
- Sophos для некоторых своих серверных систем. [ нужна ссылка ]
- BBC — для динамической CMS-платформы. [22]
- Canonical начала использовать его в 2009 году для своей службы синхронизации Ubuntu One. [23] но перестал использовать его в ноябре 2011 года. [24]
- CANAL+ для международной платформы по требованию CANAL+ Overseas.
- Protogrid как серверная часть хранилища для их среды быстрой разработки приложений. [25]
Манипулирование данными: документы и представления
[ редактировать ]CouchDB управляет коллекцией документов JSON . Документы организованы посредством представлений. Представления определяются с помощью агрегатных функций , а фильтры вычисляются параллельно, как и MapReduce .
Представления обычно хранятся в базе данных, и их индексы постоянно обновляются. CouchDB поддерживает систему представлений с использованием внешних серверов сокетов и протокола на основе JSON. [26] Как следствие, серверы представлений были разработаны на различных языках (по умолчанию используется JavaScript, но есть также PHP, Ruby, Python и Erlang).
Доступ к данным через HTTP
[ редактировать ]Приложения взаимодействуют с CouchDB через HTTP. Ниже показано несколько примеров использования cURL , утилиты командной строки. В этих примерах предполагается, что CouchDB работает на локальном хосте (127.0.0.1) через порт 5984.
Действие | Запрос | Ответ |
---|---|---|
Доступ к информации о сервере | curl http://127.0.0.1:5984/
|
{
"couchdb": "Welcome",
"version":"1.1.0"
}
|
Создание базы данных с именем wiki | curl -X PUT http://127.0.0.1:5984/wiki
|
{"ok": true}
|
Попытка создать вторую базу данных с именем wiki. | curl -X PUT http://127.0.0.1:5984/wiki
|
{
"error":"file_exists",
"reason":"The database could not be created, the file already exists."
}
|
Получить информацию о вики базе данных | curl 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
}
|
Удалить базу данных вики | curl -X DELETE http://127.0.0.1:5984/wiki
|
{"ok": true}
|
Создайте документ, попросив CouchDB предоставить идентификатор документа. | curl -X POST -H "Content-Type: application/json" --data \
'{ "text" : "Wikipedia on CouchDB", "rating": 5 }' \
http://127.0.0.1:5984/wiki
|
{
"ok": true,
"id": "123BAC",
"rev": "946B7D1C"
}
|
получить список баз данных | curl http://127.0.0.1:5984/_all_dbs
|
["_replicator","_users","wiki"]
|
Компоненты с открытым исходным кодом
[ редактировать ]CouchDB включает ряд других проектов с открытым исходным кодом как часть своего пакета по умолчанию.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Выпуск 3.3.3» . 4 декабря 2023 г. Проверено 19 декабря 2023 г.
- ^ Фонд программного обеспечения Apache. «Апач CouchDB» . Проверено 15 апреля 2012 г.
- ^ Смит, Джейсон. «Что такое протокол репликации CouchDB? Он похож на Git?» . StackOverflow . Обмен стеками . Проверено 14 апреля 2012 г.
- ^ «Изучение CouchDB» . Разработчик работает . ИБМ. 31 марта 2009 года . Проверено 30 сентября 2016 г.
- ^ Объявление в списке рассылки Apache на mail-archives.apache.org.
- ^ Re: Предлагаемое решение: установить CouchDB TLP на mail-archives.apache.org.
- ^ «База данных NoSQL CouchDB, готовая к использованию в производстве». Архивировано 15 ноября 2010 г. на Wayback Machine , статья из журнала PC World за июль 2010 г.
- ^ Кац, Дэмиен. «Будущее CouchDB» . Проверено 15 апреля 2012 г.
- ^ Слейтер, Ной (25 июля 2013 г.). «Добро пожаловать, Большой Диван» . Проверено 25 июля 2013 г.
- ^ « 2.0 » . 20 сентября 2016 г. Проверено 13 января 2017 г.
- ^ CouchDB, Технический обзор. Архивировано 20 октября 2011 г., на Wayback Machine.
- ^ "couchdb-fauxton" . Гитхаб . апач . Проверено 2 мая 2023 г.
- ^ Сравнение Cassandra, MongoDB, CouchDB, Redis, Riak и HBase от Кристофа Ковача
- ^ «Почему ученые Большого адронного коллайдера используют CouchDB» . ЧитатьЗапись . 26 августа 2010 г. Проверено 29 марта 2022 г.
- ^ iDAT , Кодекс Красного Креста, 31 июля 2021 г. , получено 29 марта 2022 г.
- ^ «База данных-Deep-Dives-CouchDB» . www.ibm.com . 19 июля 2019 года . Проверено 29 марта 2022 г.
- ^ «База данных-Deep-Dives-CouchDB» . www.ibm.com . 19 июля 2019 года . Проверено 29 марта 2022 г.
- ^ «United Airlines оптимизирует операции с помощью Couchbase | Практический пример» . www.couchbase.com . Проверено 29 марта 2022 г.
- ^ «CouchDB в дикой природе». Архивировано 20 июля 2017 г. в статье Wayback Machine в Интернете о продукте, списке программных проектов и веб-сайтов, использующих CouchDB.
- ^ Катлер, Ким-Май (9 июня 2012 г.). «Meebo получает классическую процедуру аренды Google Acq: большинство продуктов скоро закроются» . ТехКранч . АОЛ Инк . Проверено 7 января 2016 г.
- ^ "npm-регистрация-couchapp" . Гитхаб . нпм. 17 июня 2015 г. Проверено 7 января 2016 г.
- ^ CouchDB на BBC как отказоустойчивое, масштабируемое хранилище ключей и значений с несколькими центрами обработки данных.
- ^ Электронное письмо от Эллиота Мерфи (Canonical). Архивировано 5 мая 2011 г. на Wayback Machine в список CouchDB-Devel.
- ^ Canonical удаляет CouchDB из Ubuntu One (Slashdot)
- ^ «Протогрид — О нас» .
- ^ Просмотреть документацию по серверу , заархивированную 20 октября 2008 г. на 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 г.), Scaling 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
- Ленардт, Ян (2008). «Диван DB на высоте 10 000 футов» . Эрланг биржа 2008 . Архивировано из оригинала 9 ноября 2012 года . Проверено 15 апреля 2012 г.
- Ленхардт, Январь (2009). «CouchDB для разработчиков Erlang» . Фабрика Эрланг, Лондон, 2009 г. Архивировано из оригинала 19 июня 2011 года . Проверено 15 апреля 2012 г.
- Кац, Дэмиен (январь 2009 г.). «CouchDB и я» . РубиФриндж . ИнфоВ. Архивировано из оригинала 27 апреля 2011 года . Проверено 15 апреля 2012 г.
- Проекты Apache Software Foundation
- Клиент-серверные системы управления базами данных
- Кроссплатформенное программное обеспечение
- Программное обеспечение для работы с базами данных для Linux
- Распределенная вычислительная архитектура
- Документоориентированные базы данных
- Эрланг (язык программирования)
- Бесплатные системы управления базами данных
- NoSQL
- Структурированное хранилище
- Сетевое программное обеспечение Unix
- Бесплатное программное обеспечение, написанное на Erlang.
- программное обеспечение 2005 года