Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Общий конспект по Технологии анализа и обработ...docx
Скачиваний:
0
Добавлен:
24.12.2019
Размер:
2.63 Mб
Скачать
  1. Документно-ориентированная система управления базами данных CouchDb

Введение

Беспрецедентные объемы данных заставляют разработчиков и бизнес приглядываться к альтернативам реляционных баз данных, используемым вот уже более тридцати лет. В совокупности все эти технологии известны как «NoSQL базы данных».

Идея использования внешней базы данных появилась после того как столкнулся с необходимостью размещения большого количества файлов в базе УПП с привязкой к справочникам и документам. И соответственно при их размещении стандартными средствами в хранилище дополнительной информации, начал увеличиваться размер самой базы и размеры архивных копий.

Основной проблемой является то, что реляционные базы данных не могут справляться с нагрузками актуальными в наше время (мы говорим о high-load проектах). Есть три конкретные проблемных области:

  • горизонтальное масштабирование при больших объемах данных, например как в случае Digg (3 терабайта для зеленых значков, отображаемых, если ваш друг сделал dugg на статье) или Facebook (50 терабайт для поиска по входящим сообщениям) или eBay (2 петабайта в целом)

  • производительность каждого отдельного сервера

  • не гибкий дизайн логической структуры.

Понятие о Apache CouchDB

Apache CouchDB— документо-ориентированная система управления базами данных, не требующая описания схемы данных. Аналогично самой всемирной паутине, CouchDB проектировалась с учетом необходимости масштабирования. Она написана на Erlang – языке параллельного программирования, специально предназначенном для создания распределенных, отказоустойчивых, непрерывно работающих приложений. Этот язык, доступный бесплатно всем желающим, был разработан компанией Ericson и широко используется в телекоммуникационных системах.

Некоторые люди относятся неодобрительно к термину NoSQL так как он звучит как основанный на том что мы не хотим делать, а не на том кем мы являемся. Движение NoSQL это не движение против реляционных баз данных. NoSQL — это «Не только SQL» (Not Only SQL), а не «Нет SQL» (No SQL at all).

CouchDB можно рассматривать как сервер веб-приложений; для реализации этой идеи в CouchDB встроен производительный веб-сервер, а программный код, как и данные, сохраняется в той же базе данных. Для автоматизации работы с приложениями CouchDB используется утилита CouchApp.

Все данные в базе данных хранятся в виде записей (документов). Любая запись (документ) в базе данных может содержать произвольное количество полей и вложений (файлов). Доступ к данным осуществляется через REST интерфейс по протоколу HTTP. Все данные передаются в JSON формате.

Архитектура системы

Особый интерес представляет архитектура CouchDB, в которой воплощены в жизнь фундаментальные и чрезвычайно удачные концепции Web. Эта СУБД предоставляет API, следующие принципам REST, для создания, выборки, изменения и удаления документов, представлений и баз данных. Это существенно облегчает работу с СУБД, поскольку вам не потребуются ни драйверы, ни другие библиотеки для начала ее использования (достаточно лишь Web-браузера). Разумеется, существует ряд библиотек, облегчающих работу с CouchDB, однако они всего лишь используют сервисы REST через HTTP.

Каждый документ в базе данных может иметь собственные уникальные имена полей, хотя на практике это встречается довольно редко. Гораздо чаще можно встретить обычный набор полей для нескольких документов, с некоторыми изменениями в особых случаях.

Подобно иным документно-ориентированным СУБД (Mnesia, Lotus Notes, MongoDB), и в отличие от реляционных СУБД, CouchDB предназначена для работы с полу-структурированной информацией и имеет следующие особенности:

  • данные сохраняются не в строках и колонках, а в виде JSON-подобных документов, моделью которых является не таблицы, а деревья;

  • типизация элементов данных, то есть сопоставление отдельным полям документов типов INTEGER, DATE и пр., не поддерживается — вместо этого пользователь может написать функцию-валидатор;

  • целостность базы данных обеспечивается исключительно на уровне отдельных записей (но не на уровне связей между ними);

  • связи между таблицами или записями принципиально не поддерживаются, соответственно операция объединения (JOIN) между таблицами не определена;

  • для построения индексов и выполнения запросов используются функции представления (view);

  • функции-валидаторы, функции-представления, функции-фильтры сохраняются в текстовом виде в самой базе данных;

  • эти функции, как правило, написаны на языках JavaScript или Erlang, а для их выполнения запускается отдельный сервер запросов, взаимодействие с которым происходит посредством сокетов и текстового JSON-протокола;

  • каждой базе данных в системе CouchDB соответствует единственное B-дерево (не путать с двоичным деревом);

  • каждое B-дерево хранится в виде отдельного файла на диске;

  • одновременно может быть запущено несколько потоков для чтения базы данных и только один — для записи;

  • целостность базы данных обеспечивается только при записи данных на диск;

  • представления хранятся в БД и их индексы обновляются непрерывно, однако при каждом обновлении функций представления или отображения обновляется всё B-дерево целиком;

  • при обработке данных с помощью функций-представлений используется упрощённая модель технологии MapReduce, что позволяет производить параллельные вычисления, в том числе и на многоядерном процессоре;

  • распределение вычислений на несколько узлов не поддерживается — вместо этого используется механизм репликации;

  • обработка данных с помощью цепочки последовательных функций MapReduce не поддерживается;

  • поддерживается вертикальная масштабируемость, что означает поддержку не только огромных кластеров, но и портативных устройств (нетбуки, смартфоны и пр.);

  • внешний интерфейс (API) к данной СУБД построен на основе архитектуры REST, то есть сама база данных, отдельные записи, отображения и запросы — суть ресурсы, которые имеют уникальный адрес (URL) и поддерживают операции GET, PUT, POST, DELETE;

  • поэтому для взаимодействия с базой данных было написано много клиентских библиотек, в том числе на таких языках JavaScript[3], PHP, Ruby, Python и Erlang;

  • взаимодействие между отдельными компонентами СУБД, то есть с серверами представлений осуществляется опять-таки с помощью текстового протокола, а данные передаются в формате JSON; это позволило использовать различные языки программирования для написания этих компонентов — Java, Python, JavaScript и пр.

История развития

Проект CouchDB был принят в инкубатор Apache в феврале 2008 года. Несмотря на то, что CouchDB изначально предназначался для работы в операционной системе Linux, уже разработаны варианты этой системы для операционных систем Microsoft Windows и Mac OS. Более того, дистрибутив Linux Ubuntu с 9.10 (Karmic Koala) поставляется с системой CouchDB.

Использование CouchDB

CouchDB используется во многих программных продуктах и на множестве веб-сайтов , в том числе:

  • UbuntuOne, Firefox, TomBoy, Akonadi, Evolution — для синхронизации адресов, заметок и закладок.

  • Mozilla Raindrop — агрегатор сообщений электронной почты, социальных сетей, систем обмена мгновенными сообщениями (Skype, Jabber).

  • Ajatus — распределенная CRM-система.

Отличительная особенность данных СУБД в том, что данные сохраняются не в строках и колонках, а в виде документов в формате JSON, моделью которых является не таблица, а дерево. Типизация отдельных полей не поддерживается. Целостность БД обеспечивается исключительно на уровне отдельных документов, но не связей между ними. Главным плюсом является отсутствие требований к единству записей.

Map-Reduce

Подход к обработке данных, пришедший из функциональных языков и позволяющий параллельно обрабатывать большие объемы данных. В CouchDB данный подход используется для построения пользовательских представлений поверх распределенных документов.

Ход работы состоит из двух этапов:

  1. Map — операция предварительной обработки данных, применение некоторой функции к каждому документу. Поскольку отсутствует side-effect, данный этап легко разделяется на независимые потоки. Результаты данного этапа сохраняются в B-дереве, что позволяет в дальнейшем быстро находить нужные документы. На вход поступает документ, на выходе получаются набор пар Ключ-Значение, которые передаются на следующий шаг.

  2. Reduce — опциональная операция свертки данных, поступивших из предыдущего этапа. К данным применяются фильтры для отбора данных по некоторым условиям, подсчета групповых функций.

Клиент

Доступ к функциональным возможностям программы осуществляется через тонкого клиента — веб-браузер. Данные между клиентом и сервером передаются практически без изменений в формате JSON посредством AJAX запросов.

Для визуализации пользовательского интерфейса применяется библиотека JQuery и интерфейсная надстройка JQueryUI. Данные библиотеки предоставляют богатые возможности по работе со страницей в браузере, передачи данных посредством AJAX.

Для доступа на запись к основным данным можно использовать любой FTP-клиент. В гостевом режиме можно использовать любой современный браузер.