|
|
13 июня 2011
Оглавление: 1. CouchDB 2. История развития
документо-ориентированная система управления базами данных, не требующая описания схемы данных. Эта программа является свободной, открытой, и написана на языке Erlang.
CouchDB можно рассматривать как сервер веб-приложений; для реализации этой идеи в CouchDB встроен производительный веб-сервер, а программный код, как и данные, сохраняется в той же базе данных. Для автоматизации работы с приложениями CouchDB используется утилита CouchApp.
Архитектура системы
Подобно иным документно-ориентированным СУБД, и в отличие от реляционных СУБД, CouchDB предназначена для работы с полу-структурированной информацией и имеет следующие особенности:
- данные сохраняются не в строках и колонках, а в виде JSON-подобных документов, моделью которых является не таблицы, а деревья;
- типизация элементов данных, то есть сопоставление отдельным полям документов типов INTEGER, DATE и пр., не поддерживается вместо этого пользователь может написать функцию-валидатор;
- целостность базы данных обеспечивается исключительно на уровне отдельных записей;
- связи между таблицами или записями принципиально не поддерживаются, соответственно операция объединения между таблицами не определена;
- для построения индексов и выполнения запросов используются функции представления;
- функции-валидаторы, функции-представления, функции-фильтры сохраняются в текстовом виде в самой базе данных;
- эти функции, как правило, написаны на языках JavaScript или Erlang, а для их выполнения запускается отдельный сервер запросов, взаимодействие с которым происходит посредством сокетов и текстового JSON-протокола;
- каждой базе данных в системе CouchDB соответствует единственное B-дерево;
- каждое B-дерево хранится в виде отдельного файла на диске;
- одновременно может быть запущено несколько потоков для чтения базы данных и только один для записи;
- целостность базы данных обеспечивается только при записи данных на диск;
- представления хранятся в БД и их индексы обновляются непрерывно, однако при каждом обновлении функций представления или отображения обновляется всё B-дерево целиком;
- при обработке данных с помощью функций-представлений используется упрощённая модель технологии MapReduce, что позволяет производить параллельные вычисления, в том числе и на многоядерном процессоре;
- распределение вычислений на несколько узлов не поддерживается вместо этого используется механизм репликации;
- обработка данных с помощью цепочки последовательных функций MapReduce не поддерживается;
- поддерживается вертикальная масштабируемость, что означает поддержку не только огромных кластеров, но и портативных устройств;
- внешний интерфейс к данной СУБД построен на основе архитектуры REST, то есть сама база данных, отдельные записи, отображения и запросы суть ресурсы, которые имеют уникальный адрес и поддерживают операции GET, PUT, POST, DELETE;
- поэтому для взаимодействия с базой данных было написано много клиентских библиотек, в том числе на таких языках JavaScript, PHP, Ruby, Python и Erlang;
- взаимодействие между отдельными компонентами СУБД, то есть с серверами представлений осуществляется опять-таки с помощью текстового протокола, а данные передаются в формате JSON; это позволило использовать различные языки программирования для написания этих компонентов Java, Python, JavaScript и пр.
Просмотров: 5201
|