CouchDB: обзор СУБД без четкой структуры данных
CouchDB — документоориентированная, реализованная в соответствии с NoSQL подходом, система управления базами данных. Информация в таких типах баз данных хранится без четкой структуры и явных взаимосвязей между данными: вместо этого хранятся любые сведения — например, в виде текстовых документов, аудиофайлов или записи в сети.
Система распространяется в соответствии с Apache License 2.0, как свободное программное обеспечение с открытым исходным кодом. Это означает, что CouchDB можно использовать в любых целях, как угодно изменять и распространять измененные копии. Единственное, что нельзя делать по условиям — это изменять название программного обеспечения.
Разработка ведется на языке Erlang — функциональном языке программирования от компании Ericsson. Он был создан специально для использования в распределенных вычислительных системах с повышенной отказоустойчивостью.
Первые версии СУБД хвалили за скорость, но сильно критиковали за слабую безопасность, особенно за настройки, выставленные по умолчанию. Однако начиная с 3.0 версии, разработчики серьезно переработали подход к безопасности, и теперь стандартные настройки требуют для работы установку и использование паролей везде, где это необходимо.
История возникновения и развития CouchDB
Первый релиз программного обеспечения увидел свет еще в 2005 г. Разработчиком выступил Damien Katz, программист, до этого работавший в IBM, но решивший посвятить себя созданию собственного продукта. Толчком для начала разработки послужило желание создать совершенно новую систему, которая бы не несла с собой старые ошибки и ограничения, а была сразу идеальной. Что касается названия, то Couch — это аббревиатура от cluster of unreliable commodity hardware, а не диван, как мог бы подумать читатель. По крайней мере, так утверждает английская Википедия.
На протяжении первых 2 лет проект разрабатывался исключительно за счет самого разработчика (Damien Katz) и его силами, после чего был опубликован на условиях лицензии GNU General Public License — то есть, он передал программное обеспечение в общественную собственность. Спустя несколько месяцев оно попало под крыло Apache Software Foundation, где и находится до сих пор. СУБД непрерывно развивается и модифицируется, последняя на сегодня версия вышла в апреле этого года.
В настоящее время система используется как в небольших, так и крупных организациях. Из известных компаний CouchDB задействуют Европейская организация ядерных исследований CERN, International Business Machines Corporation (IBM), Node.js, Британская радиовещательная корпорация, Mozilla Firefox, Tomboy, почтовый клиент Evolution и другие.
Как устроена СУБД CouchDB и принцип работы
Как мы уже писали, в качестве языка разработки используется Erlang, а сама СУБД является документоориентированной NoSQL системой с поддержкой репликации между несколькими БД в формате «master-master» — так обеспечивается высокая надежность и производительность. Хранение данных организовано в виде набора независимых документов, а не в связях и таблицах. При этом в метаданных каждого документа указаны параметры версии — это помогает избежать проблем при работе с репликами и объединенными базами, если они были на время разъединены.
Для управления доступом нескольких пользователей используется хорошо зарекомендовавший себя механизм multiversion concurrency control (MVCC) — выделение каждому пользователю собственного снимка базы, изменения в котором будут недоступны другим пользователям до момента фиксации транзакции. Таким образом происходит разделение, при котором транзакции пишущие/читающие не блокируют друг друга.
Есть возможность использовать СУБД в качестве сервера web-приложений: программное обеспечение включает в себя встроенный web-сервер. Автоматизация операций выполняется с использованием CouchApp — его можно размещать на самом сервере.
CouchDB, как и другие документоориентированные СУБД, нацелена на использование со слабоструктурированными данными. Основные характеристики системы можно отобразить в следующем:
- в качестве единицы хранения информации используется JSON (JavaScript Object Notation) документ;
- нет поддержки сопоставления данных отдельным полям документа, но доступно использование функций-валидаторов;
- запросы и индексы обеспечиваются за счет функции представления;
- доступно создание сегментированных баз данных с возможностью назначать индивидуальные правила распределения по сегментам;
- сегментирование может выполняться с использованием автоматического режима разделения;
- есть автоматическое индексирование, выполняемое в фоне, для актуализации вторичных индексов.
Запросы к СУБД, а также индексация данных, реализованы с помощью технологии MapReduce, с использованием JavaScript. Обращение к базам данных происходит с помощью HTTP и REST API. Существует множество клиентских библиотек, использующих разные языки. Кроме этого, обращаться к данным можно и с помощью web-приложений, выполняемых в браузере.
Преимущества и недостатки CouchDB
Очевидно, что система обладает большинством преимуществ, присущих всем NoSQL системам управления базами данных, не использующих реляционную модель. К примеру, не нужно заранее проектировать и структурировать таблицы, а вместо этого можно хранить любые данные в формате JSON. Метаданные каждого документа содержат значения, указывающие на версию — таким образом всегда понятно, какой документ новее, в случае, если базы были разъединены.
СУБД максимально проста в установке, настройке и запуске. На официальном сайте представленные версии для Windows, macOS, Пакеты Debian/Ubuntu/RHEL/CentOS, а также исходники. Система бесплатна, что всегда является плюсом, как минимум для изучения и оценки производительности в своих проектах — лучше один раз попробовать, чем сто раз прочитать.
Одним из основных направлений, где используется CouchDB, являются мобильные и web-приложения. Это неудивительно, так как она и задумывалась для работы в интернет-сегменте. Есть преобразование документов «на лету» и оповещения в реальном времени об изменениях — это сильно упрощает web-разработку.
Надежность реализована за счет соответствия принципам Atomic Consistent Isolated Durable (ACID) — зафиксированные данные или связанные структуры никогда не перезаписываются, — а также механизмом репликации. Любой сервер хранит собственный блок локальных данных, которые можно использовать офлайн, и периодически, при необходимости синхронизировать с остальными серверами. Эту особенность часто используют для переноса настроек между несколькими экземплярами программного обеспечения.
Система непрерывно обновляется, а значит в распоряжении пользователя всегда будут актуальные инструменты, позволяющие работать с современным ПО и оборудованием с максимальной эффективностью. В целом, обозреваемая СУБД, как и остальные документоориентированные СУБД, хорошо подходит для определенных задач, где требуется хранение и анализ слабоструктурированных данных, и может предложить хорошую скорость и надежность.