131.69K
Категория: Базы данныхБазы данных

NoSQL

1.

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

2.

 Категории NoSQL баз:
1. Key-Value (Ключ-Значение) базы данных.
Это очень простые по своей идее хранилища. Фактически это очень большие хэш- таблицы,
где каждому ключу поставлено в соответствие значение. Такие базы могут очень быстро
оперировать колоссальными объемами информации, но они имеют серьезные ограничения
в языке запросов. 
2. BigTable.
Это база данных разработанная компанией Google для собственных нужд. Эта база
представляет собой большую таблицу с тремя измерениями: колонки, строки и временны'е
метки. Такая архитектура позволяет добиться очень высокой производительности, кроме
того, она хорошо масштабируется на множество компьютеров. Но это не реляционная база,
и она не поддерживает многие возможности реляционных баз. 
3.   Документо-ориентированные базы данных.
Такие базы немного напоминают Key-Value базы, но в данном случае, база данных знает,
что из себя представляют значения. Обычно, значением является некоторый документ или
объект, к структуре которого можно делать запросы.
4. Базы данных построенные на графах.
Такие базы ориентированы на поддержку сложных взаимосвязей между объектами, и
основываются на теории графов. Структура данных в таких базах представляет собой
набор узлов, связанных между собой ссылками. При этом и узлы и ссылки могут обладать
некоторым количеством атрибутов. 

3.

Структура информации
Структуру данных в реляционных системах на примере MySQL мы можем
представить в виде следующей иерархии:
База данных -> Таблица -> Строка -> Поле + Значение.
Как это все выглядит в MongoDB:
База данных -> Коллекция -> Документ -> ключ + значение. 

4.

MongoDB
реализует новый подход к построению баз данных, где нет
таблиц, схем, запросов SQL, внешних ключей и многих других вещей, которые
присущи объектно-реляционным базам данных.
В отличие от реляционных баз данных MongoDB предлагает документоориентированную модель данных, благодаря чему MongoDB работает быстрее,
обладает лучшей масштабируемостью, ее легче использовать.
Но, даже учитывая все недостатки традиционных баз данных и достоинства
MongoDB, важно понимать, что задачи бывают разные и методы их решения
бывают разные. В какой-то ситуации MongoDB действительно улучшит
производительность вашего приложения, например, если надо хранить
сложные по структуре данные. В другой же ситуации лучше будет
использовать традиционные реляционные базы данных.

5.

Если реляционные базы данных хранят строки, то MongoDB хранит
документы. В отличие от строк документы могут хранить сложную по
структуре информацию. Документ можно представить как хранилище ключей
и значений.
Ключ представляет простую метку, с которым ассоциировано определенный
кусок данных.
Однако при всех различиях есть одна особенность, которая сближает
MongoDB и реляционные базы данных. В реляционных СУБД встречается такое
понятие как первичный ключ. Это понятие описывает некий столбец, который
имеет уникальные значения. В MongoDB для каждого документа имеется
уникальный идентификатор, который называется _id.

6.

Всю модель устройства базы данных в
MongoDB можно представить следующим
образом:
Если в реляционных БД содержимое
составляют таблицы, то в MongoDB база
данных состоит из коллекций.
Каждая коллекция имеет свое уникальное имя
- произвольный идентификатор.
В отличие от реляционных баз данных MongoDB
не использует табличное устройство с четко
заданным количеством столбцов и типов
данных.
MongoDB
является
документоориентированной
системой,
в
которой
центральным понятием является документ.
Документ можно представить как объект,
хранящий
некоторую
информацию.
В
некотором смысле он подобен строкам в
реляционных
субд,
где
строки
хранят
информацию об отдельном элементе.

7.

В отличие от строк документы могут
содержать разнородную информацию. Так, рядом
с документом, описанным выше, в одной
коллекции может находиться другой объект,
например:
Добавление данных и создание коллекций
Для вставки в коллекцию используется функция insert. Самый простой пример ее
использования:
> db.users.insert({"name": "Tom", "age": 28, languages: ["english", "spanish"]})
> db.users.find()
В данном случае в коллекцию users добавляется простой объект.

8.

Настройка запросов и сортировка
MongoDB представляет ряд функций, которые помогают управлять выборкой из бд.
Одна из них - функция limit. Она задает максимально допустимое количество получаемых
документов. Количество передается в виде числового параметра. Например, ограничим
выборку тремя документами:
> db.users.find().limit(3)
MongoDB предоствляет возможности отсортировать полученный из бд набор данных с
помощью функции sort. Передавая в эту функцию значения 1 или -1, мы можем указать в
каком порядке сортировать: по возрастанию (1) или по убыванию (-1). Во многом эта
функция по действию аналогична выражению ORDER BY в SQL. Например, сортировка по
возрастанию по полю name:
> db.users.find().sort({name: 1})

9.

Условные операторы в MongoDB
В MongoDB в запросах можно использовать условные конструкции с помощью
операторов сравнения:
$gt (больше чем)
$lt (меньше чем)
$gte (больше или равно)
$lte (меньше или равно)
Например, найдем все документы, у которых значение ключа age меньше 30:
> db.users.find ({age: {$lt : 30}})
Оператор $ne
$ne извлекает все документы, не соответствующие некоторому условию:
> db.users.find ({age: {$ne : 22}})

10.

Удаление поля
Для удаления отдельного ключа используется оператор $unset:
> db.users.update({name : "Tom"}, {$unset: {salary: 1}})
Оператор $push
Оператор $push позволяет добавить еще одно значение к уже существующему. Например,
если ключ в качестве значения хранит массив:
> db.users.update({name : "Tom"}, {$push: {languages: "russian"}})
Оператор $addToSet подобно оператору $push добавляет объекты в массив.
Отличие состоит в том, что $addToSet добавляет данные, если их еще нет в
массиве.

11.

Для удаления документов в MongoDB предусмотрен метод remove:
> db.users.remove({name : "Tom"})
В итоге все найденные документы с name=Tom будут удалены.
Мы можем удалять не только документы, но и коллекции и базы данных. Для удаления
коллекций используется функция drop:
> db.users.drop()
Чтобы удалить всю базу данных, надо воспользоваться функцией dropDatabase():
> db.dropDatabase()
English     Русский Правила