Выпуск документоориентированной СУБД Apache CouchDB 2.3.0

Доступен релиз распределённой документоориентированной базы данных Apache CouchDB 2.3.0, относящейся к классу NoSQL-систем. Исходные тексты проекта распространяются под лицензией Apache 2.0.

В новом выпуске устранена уязвимость (CVE-2018-17188), позволяющая удалённо поднять свои привилегии в системе (пользователь с правами администратора СУБД может получить доступ к окружению операционной системы с правами пользователя, под которым запускается CouchDB). Так как за последние два года это пятая уязвимость, связанная изменением конфигурации СУБД во время работы (ранее были исправлены похожие уязвимости CVE-2018-8007CVE-2018-11769CVE-2017-12636 и 2017-12635), разработчики Apache CouchDB приняли решение полностью запретить изменение ключевых настроек СУБД через API. Настройки теперь могут быть изменены только при наличии shell-доступа к серверу.

Улучшения, реализованные в Apache CouchDB 2.3.0

  • Добавлена поддержка кластерной очистки (clustered purge), позволяющая полностью удалить из БД любой документ (удалённый или не удалённый) с любым числом ревизий и конфликтов;
  • Реализована новая настройка (seedlist), позволяющая администратору задать начальный список узлов, к которым новый узел должен обратиться на этапе запуска. Узлы из данного списка, в случае доступности, автоматически будут добавлены в БД _nodes и использованы для репликации внутренних системных БД;
  • Добавлена возможность репликации с обращением к пирам, доступным только по IPv6;
  • Возвращено старое поведение CouchDB 1.x, связанное с указанием UUID сервера/кластера в ответе на запрос "GET /";
  • В реализации операции пакетного выполнения запроса (_bulk_get) появилась поддержка типов контента multipart/mixed и multipart/related;
  • Прекращено жёсткое задание размера буфера TCP для приёма данных (ранее устанавливался в 256KB), что позволяет операционной системе динамически корректировать размер буфера. Данное изменение существенно увеличило производительность передачи по сети больших вложений;
  • Упрощено включение SSL в файле конфигурации, теперь достаточно создать секцию "[ssl]" с опцией "enable = true";
  • Все скрипты, написанные на языке Python, включая couchup и dev/run, для своего выполнения отныне требуют наличия Python 3.x;
  • Обеспечена совместимость с Erlang 21.x.
  • Встраиваемая версия инструментария rebar, используемого для сборки CouchDB, обновлена до последней версии ветки rebar2, что улучшило поддержку сборки на платформах, отличных от x86.

Напомним, что CouchDB хранит данные в формате упорядоченного списка и позволяет производить частичную репликацию данных между несколькими БД в режиме «мастер-мастер» с одновременным обнаружением и разрешением конфликтных ситуаций. Каждый сервер хранит свой локальный набор данных, синхронизированный с другими серверами, которые могут переводиться в offline-режим и периодически реплицировать изменения. В частности, данная возможность делает CouchDB привлекательным решением для организации синхронизации настроек программ между разными компьютерами. Решения на базе CouchDB внедрены в таких компаниях как BBC, Apple и CERN.

Запросы к CouchDB и индексация данных могут выполняться в соответствии с парадигмой MapReduce, используя для формирования логики выборки данных язык JavaScript. Ядро системы написано на языке Erlang, оптимизированного для создания обслуживающих множество параллельных запросов распределенных систем. View-сервер написан на языке Си и базируется на JavaScript-движке от проекта Mozilla. Доступ к БД производится при помощи протокола HTTP с использованием RESTful JSON API, что позволяет обращаться к данным в том числе из выполняемых в браузере web-приложений.

В качестве единицы хранения данных выступает документ, имеющий уникальный идентификатор, версию и содержащий произвольный набор именованных полей в формате ключ/значение. Для организации псевдо-структурированного набора данных из произвольных документов (агрегирования и формирования выборок) применяется концепция формирования представлений (view), для определения которых используется язык JavaScript. На JavaScript также можно определять функции для проверки корректности данных при добавлении новых документов в рамках определенного представления.

Источник: OpenNET