Знакомство с CouchDB

NoSQL был одной из самых обсуждаемых тем на протяжении нескольких прошедших месяцев. В этом уроке мы познакомим вас с CouchDB, которая не работает с SQL запросами, а также дадим хороший старт для самостоятельного изучения.

Что такое NoSQL?

NoSQL - это специальная концепция, которая позволяет вам быть более раскрепощённым в запросах к БД.

NoSQL [не только SQL] - это концепция, предназначенная для осуществления доступа к группированным данным, не использующая реляционную модель данных. Фундаментальные различия кроются в способе осуществлении доступа и актуализации данных, а также их размещении. Например, когда вы должны были бы хранить данные о каком-то счете, то вам требовалась специальная таблица, работа с которой предусматривала знание особого серверного языка для того, чтобы преобразовать эти данные в реальные объекты. Используя NoSQL, вам нужно хранить только данные о счёте. NoSQL абсолютна не превиредлива к структуре хранения данных, что позволяет вам не заморачиваться насчёт структуры таблиц — вы можете просто начать хранить новые записи.

Продолжим приведённый выше пример. Некоторые счета могут содержать число VAT, другие нет. В обычном привычном подходе, вам необходимо сообщить таблице, что значение этого поля (VAT) может иметь значение, а также может быть равно просто null. В свою очередь, в NoSQL, вы можете сохранить как счета без числа VAT, так и счёт с этим значением — строгой схемы тут нет. Имейте в виду, что NoSQL - не совсем совершенное орудие. Если ваши данные лучше ложатся на реляционную модель, то лучше использовать SQL-ские базы данных, иначе можно потерять много времени и сил.

Запросы в базах данных NoSQL

Принцип MapReducing содержит несколько преимуществ по сравнению с SQL-скими базами данных, потому что элементарные задачи могут выполняться быстрее, чем это происходит в реляционных Системах Управления Базами Данных.

Базы данных, основанные на NoSQL используют маппинг для создания запросов и индексации баз данных. В реляционных СУБД вы выполняете запрос, который соединяет множество таблиц для того, чтобы вытащить пачку данных, а затем с помощью специальных операций преобразовать эти данные во что-то, с чем можно будет работать в дальнейшем. В NoSQL вы используете маппинг для того, чтобы сформировать 'представление' (другими словами, набор результатов).

Маппинг, по сути, просто производит извлечение данных, уменьшая их агрегацию. Чем больше вы привыкли к Реляционным Системам Управления Базами Данных, тем непонятней будет для вас этот урок. Ну ничего, надо же как-то освежать свои знания. MapReducing превосходит SQL-запросы, потому что различного рода задачи могут быть распределены между многократными узлами, что является невозможным в Реляционных СУБД. И так далее...

Знакомство с CouchDB

Несколько фактов о CouchDB, которые вам не помешает знать:

CouchDB - это база данных, которая ориентируется на хранение данных в формате JSON, написанная на языке программирования Erlang.

  • Это действительно сильный конкурент на своём рынке, созданный для того, чтобы упростить многие задачи, которые можно будет осуществить на различных устройствах без всяких осложнений.
  • Это очередной представитель баз данных, не базирующихся на SQL запросах.
  • Этот инструмент входит в пакет вместе с проектом Apache.
  • CouchDB позволяет приложениям хранить данные в формате JSON и осуществлять доступ к ним через особый интерфейс.
  • Это новый способ хранения, индексации и осуществления доступа к данным.

Главные преимущества CouchDB

  • JSON документы – все, что вы хотите сохранить в CouchDB должно быть преобразовано к формату JSON.
  • REST интерфейс – все операции, включая вставку данных, в CouchDB осуществляются через HTTP.
  • Множественная репликация – вы можете использовать неограниченное количество 'устройств', создавая особенные и неповторимые топологии репликации.
  • Пригодный для офлайнового использования – CouchDB может быть реплицирован к различным устройствам (к примеру, таким, как телефоны Android), которые могут менять данные офлайн, а в последствии, сохранять изменения при помощи специальной системы синхронизации, когда сеть будет снова доступна.
  • Фильтры репликации – вы можете фильтровать данные, которые хотите тиражировать на различные узлы.

Всё в кучу

CouchDB представляет собой следующий виток развития баз данных, разработанных для работы в сети.

CouchDB позволяет вам писать клиентские приложения, которые будут общаться с нутром программы без какой-либо посреднической серверной стороны, что значительно уменьшает время разработки веб приложений. CouchDB предоставляет более гибкие средства для репликации данных на различные устройства. Работая с CouchDB, вы также можете создать специальные фильтры для определённого пользователя.

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

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

Шаг 1 – Установка CouchDB

Самый легкий способ установки CouchDB на вашу систему заключается в том, чтобы перейти на сайт CouchOne (http://www.couchone.com/get) и загрузить установочный файл CouchDB специально для вашей операционной системы — в моём случае это OSX. Загрузите zip файл, распакуйте его и поместите CouchDBX в папку приложения.

Далее запускаем CouchDBX.

Шаг 2 – Добро пожаловать в Futon

После того, как вы запустите CouchDB, вы должны увидеть панель управления Futon. Если, по какой-либо причине, осуществить доступ к интерфейсу не удалось, то то же самое можно проделать через ваш браузер. Если вы посмотрите в логи, CouchDBX сообщит вам, что CouchDB был запущен по адресу http:// 127.0.0.1:5984/ (может отличаться на вашей системе). Откройте браузер и зайдите на адрес http://127.0.0.1:5984/_utils/, после чего вы должны увидеть Futon.

Оставшуюся часть урока я будут обращаться к панели управления Futon через Firefox. Для удобства у меня также стоит Firebug и активирована консоль, с помощью которой я могу отслеживать все HTTP запросы, которые Futon будет отправлять. Это очень хорошо, так как ваше приложение может функционировать также, как и Futon. Давайте двинемся вперёд и создадим базу данных, название которой будет mycouchshop.

jQuery плагин CouchDB

Futon фактически использует jQuery плагин, чтобы взаимодействовать с CouchDB. Вы можете найти по адресу http://127.0.0.1:5984/_utils/script/jquery.couch.js (прошу отметить тот момент, что ваш порт может отличаться). Разобрав тот код, вы сможете узнать много интересных вещей, которые позволяют скрипту взаимодействовать с CouchDB.

Шаг 3 – CouchDB и пользователи

По умолчанию CouchDB абсолютно открыт, что даёт возможность каждому пользовательскому администратору права на доступ ко всем базам данных. Это очень удобно для разработки. Давайте двинемся дальше и создадим администратора. В нижнем правом углу вы увидите следующее: "Добро пожаловать в панель администрирования! Все являются администраторами! Исправляйте положение”.

Не медлите и щёлкайте по ссылке fix this, что позволит вам указать имя пользователя и пароль. Эти действия помогут вам создать учетную запись администратора и предоставить анонимный пользовательский доступ к операциям чтения и операциям записи на всех базах данных. Внимание: это не касается операций, проводимых над конфигурацией.

Ещё немного о пользователях

Для CouchDB было бы неблагоразумным создание единственного супер пользователя и предоставление ему прав на чтение и запись.

Поначалу вы можете быть немного обескуражены тем, как представлены пользователи в CouchDB, особенно если вы привыкли к созданию различных пользователей для всех своих приложений, а затем управлять ими самостоятельно в пределах пользовательской таблицы. В CouchDB было бы неблагоразумно создание одного единственного супер пользователя и предоставление ему прав доступа на чтение и запись. Если вы принимаетесь делать клиентскую часть приложения, то данные об этой учетной записи будут расположены в вашем исходном коде JavaScript.

В СouchDB существует встроенная система создания пользователя и авторизации. Вы можете создать пользователей при помощи jQuery плагина, используя $.couch.signup(). Таким образом, вы можете создавать пользователей вашей системы. Пользователи представляют собой те же записи в формате JSON, так что вы можете назначать им любые дополнительные атрибуты, которые вам понадобятся. Например, электронная почта. Для того, чтобы прикрепить одни и те же атрибуты к множеству пользователей, вы можете создать специальные группы в пределах CouchDB.

Шаг 4 – Создание документа

Теперь давайте создадим наш первый документ, используя Futon:

  • Откройте базу данных mycouchshop.
  • Щелкните “New Document”.
  • Щелкните, "Add Field”, чтобы начать добавлять данные к документу JSON. Заметьте, что поле ID уже предварительно создано. Я очень не советую изменять его. Добавьте ключевое "имя" со значением “Nettuts CouchDB Tutorial One”.
  • Убедитесь, что вы отметили галочкой каждый атрибут, чтобы сохранить изменения.
  • Щелкните, "Save Document”.

Теперь поднимитесь на уровень выше, к нашей базе данных.Теперь вы можете увидеть только что созданный документ с некоторыми ключами.

Шаг 5 – Обновление документа

CouchDB - это база данных, в которую можно что-то добавлять — новые обновления, добавленные к базе данных, не перезаписывают старую версию. Каждое новое обновление к документу JSON с существующим ранее ID добавит новую версию обновлённого документа. Для этого используется автоматически вставленный ключ версии:

  • При просмотре содержания базы данных mycouchshop щелкните по единственной доступной записи.
  • Добавьте другой атрибут с ключевым "type" и значением "production".
  • Нажмите “Save Document”.

После сохранения новый ключ версии должен быть равен 2. Возвращаясь к представлению базы данных mycouchshop. Вы по-прежнему должны видеть один документ, т.к. по умолчанию отображается только самая последняя версия.

Версии

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

Шаг 6 – Создание документа, используя cURL

Я уже упомянул, что CouchDB использует REST интерфейс, так что все запросы мы можем просмотреть через консоль в Firebug. Теперь давайте воспользуемся терминалом для того, чтобы создать документ, используя cURL.

Во-первых, давайте создадим документ JSON с содержанием, указанным ниже, и сохраним с именем person.json на рабочий стол.

{
    "forename": "Gavin",
    "surname":  "Cooper",
    "type":     "person"
}

Затем откройте терминал и выполните команду cd ~/Desktop/, а затем curl -X POST http://127.0.0.1:5984/mycouchshop/ -d @person.json -H "Content-Type: application/json". CouchDB должен был возвратить документ JSON, подобный тому, что вы можете найти ниже.

{"ok":true,"id":"c6e2f3d7f8d0c91ce7938e9c0800131c","rev":"1-abadd48a09c270047658dbc38dc8a892"}

Это ID и число, представляющее версию вставленного документа. CouchDB использует седующие правила:

  • POST – создает новую запись
  • GET – извлекает записи
  • PUT – обновляет запись
  • DELETE – удаляет запись

Шаг 7 – Просмотр всех документов

Вы можете осуществить проверку вставки нового документа в базу mycouchshop следующим образом: перейдя по адресу curl -X GET http://127.0.0.1:5984/mycouchshop/_all_docs.

Шаг 8 – Создание простой функции

Теперь давайте рассмотрим другой способ просмотра всех документов:

  • В пределах Futon щелкните по выпадающему меню и выберите “Temporary View”.
  • Скопируйте код, который вы увидите.
function (doc) {
    if (doc.type === "product" && doc.name) {
    emit(doc.name, doc);
    }
}
  • Кликните на run , и вы должны будете увидеть единственный продукт, который мы добавили ранее.
  • Вы также можете сохранить полученное представление.

После создания простой функции мы можем теперь запросить это представление и увидеть, что передаваемое содержание по HTTP, используя следующую команду: curl -X GET http://127.0.0.1:5984/mycouchshop/_design/products/_view/products.

Так мы получаем ID документа и версию по умолчанию.

Шаг 9 – Усложняем ситуацию

Давайте добавим другой продукт к нашей базе данных, предварительно внеся новый ценовой атрибут со значением 1.75 нашему первому продукту.

{
    "name":     "My Product",
    "price":    2.99,
    "type":     "product"
}

Для нашего нового представления мы будем использовать следующее. Во-первых:

function (doc) {
    if (doc.type === "product" && doc.price) {
        emit(doc.id, doc.price);
    }
}

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

function (keys, prices) {
    return sum(prices);
}

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

Заключение

В этом уроке мы начали знакомство с CouchDB. Я уверен, что эта тема будет для большинства из вас нова и сложна. Но мне кажется, что в некоторых случаях, нужно отойти от традиционной работы с базами данных и воспользоваться какой-то альтернативой, если это конечно облегчит вам работу!

Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/0qZ5L00x9Nk/lessons.php

Читать комменты и комментировать

Добавить комментарий / отзыв



Защитный код
Обновить

Знакомство с CouchDB | | 2012-06-19 12:04:43 | | Статьи Web-мастеру | | NoSQL был одной из самых обсуждаемых тем на протяжении нескольких прошедших месяцев. В этом уроке мы познакомим вас с CouchDB, которая не работает с SQL запросами, а также дадим хороший старт для | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: