Вышел релиз распределенной, документ-ориентированной базы данных Apache CouchDB, относящейся к классу NoSQL-систем. Запросы к CouchDB и индексация данных могут выполняться в соответствии с парадигмой MapReduce, используя для формирования логики выборки данных язык JavaScript. Ядро системы написано на языке Erlang, оптимизированного для создания обслуживающих множество параллельных запросов распределенных систем. View-сервер написан на языке Си и базируется на JavaScript-движке Mozilla Spidermonkey. Исходные тексты проекта распространяются под лицензией Apache 2.
Доступ к БД производится при помощи протокола HTTP с использованием RESTful JSON API. В качестве единицы хранения данных выступает документ, имеющий уникальный идентификатор, версию и содержащий произвольный набор именованных полей в формате ключ/значение. Для организации псевдо-структурированного набора данных из произвольных документов (агрегирования и формирования выборок) применяется концепция формирования представлений (view), для определения которых используется язык JavaScript. На JavaScript также можно определять функции для проверки корректности данных при добавлении новых документов в рамках определенного представления.
CouchDB хранит данные в формате упорядоченного списка и позволяет производить частичную репликацию данных между несколькими БД в режиме «мастер-мастер» с одновременным обнаружением и разрешением конфликтных ситуаций. Каждый сервер хранит свой локальный набор данных, синхронизированный с другими серверами, которые могут переводиться в offline-режим и периодически реплицировать изменения. В частности, данная возможность делает CouchDB привлекательным решением для организации синхронизации настроек программ между разными компьютерами, что уже используется для синхронизации содержимого адресной книги ПК c мобильным телефоном через сервис Ubuntu One. Решения на базе CouchDB внедрены в таких компаниях как BBC, Apple и CERN.
Основные улучшения, добавленные в CouchDB 1.1.0:
- Нативная поддержка SSL;
- Поддержка обработки HTTP-заголовков группы "range" для отдачи прикрепленных данных не с начала файла, а с указанной позиции (например, позволяет организовать докачку после обрыва соединения);
- Добавлена опция конфигурации для включения TCP_NODELAY;
- Добавлены встроенные фильтры для базы "_changes": "_doc_ids" и "_design";
- В описании виртуальных хостов теперь допустимо использование масок;
- Обеспечена более гранулированная поддержка ETag для представлений;
- Увеличена гибкость системы подмены URL (URL rewriter);
- Добавлен модуль OS Process для управления фоновыми процессами вне CouchDB;
- Добавлен обработчик HTTP Proxy;
- Добавлена база "_replicator" для управления репликацией;
- Множественные микро-оптимизации для увеличения производительности операций чтения данных;
- В функцию map добавлена поддержка CommonJS;
- Добавлена используемая в запросах опция "stale=update_after", дающая возможность обновить представление после возврата состояния "stale=ok";
- В web-интерфейс Futon добавлена функция изменения пароля.