3. NoSQL?
NoSQL(Not Only SQL) - это термин, обозначающий ряд
проектов, направленных на реализацию моделей баз
данных, имеющих отличия от стандартных реляционных
баз данных
Основные характеристики:
1. Нереляционная модель данных
2. Открытые исходные тексты
3. Хорошая горизонтальная масштабируемость
4. Проблемы РБД
● Горизонтальное масштабирование(при больших
объемах данных). Например:
○ Digg - 3 терабайта для зеленых значков,
отображаемых, если ваш друг сделал dugg
на статье.
○ Facebook - 50 терабайт для поиска по входящим
сообщениям
○ eBay - 2 петабайта в целом
● Производительность каждого отдельного сервера
● Не гибкий дизайн логической структуры.
5. select fun, profit from real_world where
relational=false;
Достоинства Недостатки
● Хорошие показатели ● Отсутствующая или
горизонтальной ограниченная
масштабируемости поддержка свойств ACID
● Высокая ● Отсутствие поддержки
производительность языка SQL
каждого отдельного узла
● Упрощенная, более
гибкая, не ограниченная
схемой структура базы
данных
6. Выбор СУБД
Доступность(Availability) -
пользователю всегда доступны
операции чтения-записи
CA AP
RDBMS(MySQL, Postgres, Dynamo, Voldemort, Tokyo
...), Aster Data, Greenplum, Cabinet, KAI, Cassandra,
Vertica SimpleDB, CouchDB, Riak
Partition Tolerance - Система
Согласованность(Consistency) -
CP хорошо взаимодействует с
Пользователи всегда работают с
BigTable, MongoDB, несколькими узлами
одними и теми же данными
BerkleyDB, Hypertable,
MemcacheDB, HBase,
Scalaris, Redis
7. Модели хранения данных
Существует 4 основных нереляционных модели хранения
данных:
● Ключ-Значение (Key-Value)
● Документ-ориентированная модель (Document-Oriented)
● Колонко-Ориентированная (Column-Oriented)
● Объект-ориентированная (Object-Oriented)
8. Ключ-Значение (Key-Value)
Реализация хранилища типа ключ/значение:
keyValueStore(key)=value
Например:
telephone("211-555-9012")="James, George"
telephone("617-555-1414")="Tweed, Rob"
Зачастую возможно сохранять несколько атрибутов для
каждого ключа.
Например:
telephone(phoneNumber,"name")=value
telephone(phoneNumber,"address")=value
9. Ключ-Значение (Key-Value)
Если необходимо получить доступ к данным с помощью
другого ключа, то, соответственно, необходимо создать
второй индекс с альтернативным свойством в качестве
ключа.
Для хранилища, приведенного ранее, индекс по имени
может иметь следующую структуру:
nameIndex(name,phoneNumber)=""
Например:
nameIndex("James, George", "211-555-9012")=""
nameIndex("Tweed, Rob", "617-555-1414")=""
14. Column-Oriented
● Данные представляются в виде таблиц, но отсутствуют
операции, подобные операции JOIN в языке SQL.
● Операция JOIN реализуется в пользовательском
приложении
16. Making a Decision
Вам необходимы NoSQL-решения, когда:
1. Данные документ-ориентированны
2. Вы работаете с объект-ориентированной системой
3. Вы работаете с распределенной системой,
требовательной к параметрам горизонтальной
масштабируемости и небольшому времени отклика
4. Вам необходимо дешевое решение для хранения
данных и есть возможность интегрировать это
решение с хостинг-провайдером вашего приложения
17.
18. Список вопросов
● Что это такое?
● Создатели
● Подробно о MongoDB
○ Особенности MongoDB
○ Документ-ориентированная модель данных
○ Философия MongoDB
○ Драйвера MongoDB
○ Примеры использования MongoDB
○ Советы новичкам
○ Продукты, использующие MongDB
19. Что это такое?
MongoDB - масштабируемая, высокопроизводительная
документоориентированная СУБД.
mongo от слова "humongous" (DataBase) - большой,
значительный
подробная информация на http://www.mongodb.org/
20.
21. Создатели
10gen - (New York) компания, создавшая MongoDB
и осуществляющая дальнейшую поддержку.
Релиз версии 1.0 состоялся августе 2008 года.
На текущий момент последняя версия MongoDB 1.6.0.
MongoDB молодой продукт и поэтому в нём иногда
встречаются баги(segmentation fault, core dumped), но
благодаря высоким темпам разработки и большому
количеству разработчиков вы можете рассчитывать на
своевременную поддержку со стороны 10gen, или
сообщества MongoDB.
22. Особенности MongoDB
● Документ-ориентированная модель данных
● Субд распространяется по лицензии GNU AGPL v3.0
● Драйверы распространяются по лицензии Apache
License v2.0
● Поддержка Map/Reduce
● Репликация данных
● Auto-Sharding
● GridFS
● Полная поддержка индексов
● Коммерческая поддержка
23. Документ-ориентированная модель данных
● Система MongoDB представляет собой набор баз
данных
● База данных - набор коллекций
● Коллекция - набор документов(подобие таблицы в
РБД)
● Документ - набор полей(подобие записи в РБД,
только документы в коллекции могут иметь
различную структуру)
● Поле представляет из себя пару ключ-значение, где
○ ключ - значение типа string, название поля
○ значение :
■ массив значений
●
�
■ значение базового типа типа string, float, binary
и т.д.
24. Документ-ориентированная модель данных
MongoDB хранит все данные в формате BSON
(binary-encoded serialization of JSON-like
documents).
Данные пользователю предоставляются либо в
JSON(Javascript Object Notation), либо в BSON
форматах(в случае использования драйверов
возможна десериализация в объекты)
{"hello": "world"}→"x16x00x00x00x02hellox00 x06x00x00x00world
{"BSON": ["awesome", 5.05,1986]} → "1x00x00x00x04BSONx00&x00
x00x00x020x00x08x00x00
25. Примеры использования MongoDB
Установка MongoDB (shell)
$ aptitude install mongodb
или
$ apt-get install mongodb
для пользователей opensuse
$ zypper in mongodb
также MongoDB можно скачать здесь
http://www.mongodb.org/downloads
26. Примеры использования MongoDB
Запуск установленной mongoDB (shell)
$ ./mongo
MongoDB shell version: 1.3.2
url: test
connecting to: test
type "help" for help
>
28. Примеры использования MongoDB
Работа с базами данных (shell)
> db //текущая база данных
test
>use foo //выбрать, создать базу данных
switched to db foo
> db
foo
>
29. Примеры использования MongoDB
Работа с коллекциями (shell)
> db.my_collection //создание коллекции
foo.my_collection
>db.sefwgdrgh.find()
>db.segreh.count()
0
>db.my_collection.find()
my_collection
>db.my_collection.count()
1
>
30. Примеры использования MongoDB
Работа с документами (shell)
> db.my_collection.insert({
... "title" : "My first blog post",
... "author" : "Fred",
... "content" : "Hello, world!",
... "comments" : [] })
>
> post = db.posts.findOne()
{
"_id" : ObjectId("2fe3e4d892aa73234c910bed"),
"title" : "My first blog post",
"author" : "Fred",
"content" : "Hello, world!",
"comments" : []
}
31. Примеры использования MongoDB
Работа с документами (shell)
> post = db.my_collection.findOne()
{
"_id" : ObjectId("2fe3e4d892aa73234c910bed"),
"title" : "My first blog post",
"author" : "Fred",
"content" : "Hello, world!",
"comments" : []
}
>
37. Репликация данных
MongoDB поддерживает асинхронную репликацию
данных.(данные между серверами
синхронизируются в отложенный момент времени,
не во время добавления)
38. Auto-Sharding
MongoDB масштабируется горизонатльно благодаря
архитектуре auto-sharding.
● Автоматическая балансировка загрузки и
распределения данных
● Простота в добавлении новых узлов
● Масштабируемость на более, чем тысяча узлов
● Автоматическое восстановление ошибок
40. Драйверы MongoDB
Также со стороны mongoDB сообщества
предоставляется поддержка драйверов для таких
языков как:
● С# .NET
● Сlojure
● ColdFusion
●D
● Delphi
● Erlang
● Factor
● Fantom
● F#
● Go
● Groovy
● Lisp
● Lua
● PowerShell
● Smalltalk
●R
● Scheme
41. Советы новичкам
● Используйте 64-битную версию MongoDB
● Используйте репликацию для сохранности
данных
● Позаботьтесь о безопасности установленной
вами MongoDB
● Всегда используйте функцию getLastError(),