SlideShare a Scribd company logo
1 of 42
Download to read offline
NoSQL

No problem
NoSQL?

NoSQL(Not Only SQL) - это термин, обозначающий ряд
проектов, направленных на реализацию моделей баз
данных, имеющих отличия от стандартных реляционных
баз данных

Основные характеристики:
   1. Нереляционная модель данных
   2. Открытые исходные тексты
   3. Хорошая горизонтальная масштабируемость
Проблемы РБД

● Горизонтальное масштабирование(при больших
  объемах данных). Например:
   ○ Digg - 3 терабайта для зеленых значков,
     отображаемых, если ваш друг сделал dugg
     на статье.
   ○ Facebook - 50 терабайт для поиска по входящим
     сообщениям
   ○ eBay - 2 петабайта в целом
● Производительность каждого отдельного сервера
● Не гибкий дизайн логической структуры.
select fun, profit from real_world where
relational=false;
Достоинства                  Недостатки
 ● Хорошие показатели         ● Отсутствующая или
   горизонтальной               ограниченная
   масштабируемости             поддержка свойств ACID
 ● Высокая                    ● Отсутствие поддержки
   производительность           языка SQL
   каждого отдельного узла
 ● Упрощенная, более
   гибкая, не ограниченная
   схемой структура базы
   данных
Выбор СУБД
                    Доступность(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
Модели хранения данных

Существует 4 основных нереляционных модели хранения
данных:
 ● Ключ-Значение (Key-Value)
 ● Документ-ориентированная модель (Document-Oriented)
 ● Колонко-Ориентированная (Column-Oriented)
 ● Объект-ориентированная (Object-Oriented)
Ключ-Значение (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
Ключ-Значение (Key-Value)

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

Для хранилища, приведенного ранее, индекс по имени
может иметь следующую структуру:
nameIndex(name,phoneNumber)=""

Например:
nameIndex("James, George", "211-555-9012")=""
nameIndex("Tweed, Rob", "617-555-1414")=""
Ключ-Значение (Key-Value)
Документ-ориентированная модель

Примеры документов:

FirstName="Bob", Address="5 Oak St.", Hobby="sailing".

FirstName="Jonathan", Address="15 Wanamassa Point Road",
Children=("Michael,10", "Jennifer,8", "Samantha,5", "Elena,2").
Документ-ориентированная модель
XML-документ:
<Person firstName="John" lastName="Smith" age="25">
<Address streetAddress="21 2nd Street"    city="New York" state="NY"
postalCode="10021" />
<PhoneNumbers>
<PhoneNumber type="home" number="212 555-1234"/>
<PhoneNumber type="fax" number="646 555-4567"/>
</PhoneNumbers>
</Person>
JSON-документ:
{
"firstName": "John",
"lastName": "Smith",
"age": 25,
"address":
{
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumber":
[
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "fax",
"number": "646 555-4567"
}
]
}
Column-Oriented

● Данные представляются в виде таблиц, но отсутствуют
  операции, подобные операции JOIN в языке SQL.
● Операция JOIN реализуется в пользовательском
  приложении
Объект-ориентированная
Making a Decision

Вам необходимы NoSQL-решения, когда:

   1. Данные документ-ориентированны
   2. Вы работаете с объект-ориентированной системой
   3. Вы работаете с распределенной системой,
      требовательной к параметрам горизонтальной
      масштабируемости и небольшому времени отклика
   4. Вам необходимо дешевое решение для хранения
      данных и есть возможность интегрировать это
      решение с хостинг-провайдером вашего приложения
Список вопросов

● Что это такое?
● Создатели
● Подробно о MongoDB
   ○ Особенности MongoDB
   ○ Документ-ориентированная модель данных
   ○ Философия MongoDB
   ○ Драйвера MongoDB
   ○ Примеры использования MongoDB
   ○ Советы новичкам
   ○ Продукты, использующие MongDB
Что это такое?
 MongoDB - масштабируемая, высокопроизводительная
 документоориентированная СУБД.

 mongo от слова "humongous" (DataBase) - большой,
 значительный




подробная информация на http://www.mongodb.org/
Создатели
10gen - (New York) компания, создавшая MongoDB
и     осуществляющая дальнейшую поддержку.

Релиз версии 1.0 состоялся августе 2008 года.

На текущий момент последняя версия MongoDB 1.6.0.

MongoDB молодой продукт и поэтому в нём иногда
встречаются баги(segmentation fault, core dumped), но
благодаря высоким темпам разработки и большому
количеству разработчиков вы можете рассчитывать на
своевременную поддержку со стороны 10gen, или
сообщества MongoDB.
Особенности MongoDB
● Документ-ориентированная модель данных
● Субд распространяется по лицензии GNU AGPL v3.0
● Драйверы распространяются по лицензии Apache
  License v2.0
● Поддержка Map/Reduce
● Репликация данных
● Auto-Sharding
● GridFS
● Полная поддержка индексов
● Коммерческая поддержка
Документ-ориентированная модель данных
 ● Система MongoDB представляет собой набор баз
   данных
 ● База данных - набор коллекций
 ● Коллекция - набор документов(подобие таблицы в
   РБД)
 ● Документ - набор полей(подобие записи в РБД,
   только документы в коллекции могут иметь
   различную структуру)
 ● Поле представляет из себя пару ключ-значение, где
    ○ ключ - значение типа string, название поля
    ○ значение :
       ■ массив значений
  ●
      �
       ■ значение базового типа типа string, float, binary
         и т.д.
Документ-ориентированная модель данных


 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
Примеры использования MongoDB

Установка MongoDB (shell)
   $ aptitude install mongodb

или
  $ apt-get install mongodb

 для пользователей opensuse
  $ zypper in mongodb

также MongoDB можно скачать здесь
  http://www.mongodb.org/downloads
Примеры использования MongoDB

Запуск установленной mongoDB (shell)
    $ ./mongo
    MongoDB shell version: 1.3.2
url: test
connecting to: test
type "help" for help
>
Примеры использования MongoDB

mongo поддерживает javascript (shell)
> x = 123+1
124
>var obj = new Object
> obj.test = 12
> obj.test
    12
>
Примеры использования MongoDB

Работа с базами данных (shell)
> db //текущая база данных
test
>use foo //выбрать, создать базу данных
switched to db foo
> db
foo
>
Примеры использования 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
>
Примеры использования 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" : []
}
Примеры использования MongoDB

Работа с документами (shell)
> post = db.my_collection.findOne()
{
"_id" : ObjectId("2fe3e4d892aa73234c910bed"),
"title" : "My first blog post",
"author" : "Fred",
"content" : "Hello, world!",
"comments" : []
}
>
Примеры использования MongoDB

Индексация в MongoDB (shell)
> print(post._id)
2fe3e4d892aa73234c910bed
|------------| |-----| |---| |------|
    ts          mac pid inc

>
Примеры использования MongoDB

Вставка, обновление данных(shell)
> use chess
switched to db chess
>db.chess.insert({
    ..."name" : "black king",
    ..."symbol" : "♚",
    ..."pos" : {"x":"e", "y":8}
    ...}
    ...)
> db.chess.update(
... {"name" : "black king"},
... {"$inc" : {"pos.y" : -1}})
>
Примеры использования MongoDB

Обновление данных(shell)
> db.chess.update(//update можно использоват как insert
... {"name" : "black king"},
... {"$inc" : {"pos.y" : -1}})
     > db.chess.update(
... {"name" : "black king"},
... {"$set" : {"name" : "white king"}})
> db.chess.update(
... {"name" : "black king"},
... {"$set" : {"additional" : 23}})
Примеры использования MongoDB

Обновление данных(shell)
>db.chess.find()
{{"name" : "white king",
    ..."symbol" : "♚",
    ..."pos" : {"x":"e", "y":7},
    ..."additional" : 23
    ...}}
Примеры использования MongoDB

Поиск данных(shell)
>db.chess.find(){
{{"name" : "white king",
    ..."symbol" : "♚",
    ..."pos" : {"x":"e", "y":7},
    ..."additional" : 23
    ...}}
>db.findOne({"name":"test"})
>db.findOne({"name":"white king"})
{{"name" : "white king",
    ..."symbol" : "♚",
    ..."pos" : {"x":"e", "y":7},
    ..."additional" : 23
    ...}}
>
Репликация данных
 MongoDB поддерживает асинхронную репликацию
 данных.(данные между серверами
 синхронизируются в отложенный момент времени,
 не во время добавления)
Auto-Sharding
 MongoDB масштабируется горизонатльно благодаря
 архитектуре auto-sharding.

  ● Автоматическая балансировка загрузки и
    распределения данных
  ● Простота в добавлении новых узлов
  ● Масштабируемость на более, чем тысяча узлов
  ● Автоматическое восстановление ошибок
Драйверы MongoDB
 10gen предоставляет поддержку драйверов для
 следующих языков:
  ●С
  ● С++
  ● С#
  ● Haskell
  ● Java
  ● Javascript
  ● Perl
  ● PHP
  ● Python
  ● Ruby
  ● Scala
Драйверы MongoDB
 Также со стороны mongoDB сообщества
 предоставляется поддержка драйверов для таких
 языков как:
  ● С# .NET
  ● Сlojure
  ● ColdFusion
  ●D
  ● Delphi
  ● Erlang
  ● Factor
  ● Fantom
  ● F#
  ● Go
  ● Groovy
  ● Lisp
  ● Lua
  ● PowerShell
  ● Smalltalk
  ●R
  ● Scheme
Советы новичкам

 ● Используйте 64-битную версию MongoDB
 ● Используйте репликацию для сохранности
   данных
 ● Позаботьтесь о безопасности установленной
   вами MongoDB
 ● Всегда используйте функцию getLastError(),
Nosql and Mongodb

More Related Content

What's hot

Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Alexey Zinoviev
 
NoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий НикулинNoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий НикулинAnatoliy Nikulin
 
Кратко о MongoDB
Кратко о MongoDBКратко о MongoDB
Кратко о MongoDBGleb Lebedev
 
MongoDB basics in Russian
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in RussianOleg Kachan
 
MongoDB. Как готовить, с чем едят?
MongoDB. Как готовить, с чем едят?MongoDB. Как готовить, с чем едят?
MongoDB. Как готовить, с чем едят?Tim Mironov
 
Миграция данных при помощи Feeds
Миграция данных при помощи FeedsМиграция данных при помощи Feeds
Миграция данных при помощи Feedszabej
 
Couchbase, что за зверь и на что способен.
Couchbase, что за зверь и на что способен.Couchbase, что за зверь и на что способен.
Couchbase, что за зверь и на что способен.Alexey Rusnak
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Fwdays
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...phpdevby
 
Кэширование и куки
Кэширование и кукиКэширование и куки
Кэширование и кукиISsoft
 
Alexander Krizhanovsky Krizhanovsky Hpds
Alexander Krizhanovsky Krizhanovsky HpdsAlexander Krizhanovsky Krizhanovsky Hpds
Alexander Krizhanovsky Krizhanovsky Hpdsguest092df8
 
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяцКак мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяцMikhail Tabunov
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитикиИлья Середа
 
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Ontico
 
ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop Vladimir Klimontovich
 

What's hot (19)

Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
 
NoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий НикулинNoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий Никулин
 
Кратко о MongoDB
Кратко о MongoDBКратко о MongoDB
Кратко о MongoDB
 
MongoDB basics in Russian
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in Russian
 
MongoDB. Как готовить, с чем едят?
MongoDB. Как готовить, с чем едят?MongoDB. Как готовить, с чем едят?
MongoDB. Как готовить, с чем едят?
 
Миграция данных при помощи Feeds
Миграция данных при помощи FeedsМиграция данных при помощи Feeds
Миграция данных при помощи Feeds
 
Couchbase, что за зверь и на что способен.
Couchbase, что за зверь и на что способен.Couchbase, что за зверь и на что способен.
Couchbase, что за зверь и на что способен.
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
 
Кэширование и куки
Кэширование и кукиКэширование и куки
Кэширование и куки
 
How to-build-google
How to-build-googleHow to-build-google
How to-build-google
 
No sql.mongodb scaling
No sql.mongodb scalingNo sql.mongodb scaling
No sql.mongodb scaling
 
Cassandra design patterns
Cassandra design patternsCassandra design patterns
Cassandra design patterns
 
Alexander Krizhanovsky Krizhanovsky Hpds
Alexander Krizhanovsky Krizhanovsky HpdsAlexander Krizhanovsky Krizhanovsky Hpds
Alexander Krizhanovsky Krizhanovsky Hpds
 
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяцКак мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитики
 
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
 
Mysql vs postgresql
Mysql vs postgresqlMysql vs postgresql
Mysql vs postgresql
 
ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop
 

Similar to Nosql and Mongodb

СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.mikhaelsmirnov
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...Vyacheslav Nikulin
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Ontico
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БДAndrew Sovtsov
 
What do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptWhat do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptVasiliy Teliatnikov
 
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Ontico
 
Александр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.comАлександр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.comOntico
 
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах EmbarcaderoПоддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах EmbarcaderoAndrew Sovtsov
 
11 - Hadoop. NoSQL
11 - Hadoop. NoSQL11 - Hadoop. NoSQL
11 - Hadoop. NoSQLRoman Brovko
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)it-people
 
Hadoop presentation
Hadoop presentationHadoop presentation
Hadoop presentationVlad Orlov
 
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...it-people
 
Frontera обход испанского интернета
Frontera обход испанского интернетаFrontera обход испанского интернета
Frontera обход испанского интернетаAlexander Sibiryakov
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхVasil Remeniuk
 
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаковIBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаковMaxim Zinal
 
Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011Igor Brovchenko
 
NoSQL: issues and progress, current status and prospects
NoSQL: issues and progress, current status and prospectsNoSQL: issues and progress, current status and prospects
NoSQL: issues and progress, current status and prospectsAndrei Nikolaenko
 

Similar to Nosql and Mongodb (20)

СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БД
 
What do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptWhat do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScript
 
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
 
Александр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.comАлександр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.com
 
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах EmbarcaderoПоддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах Embarcadero
 
Druid - Interactive Analytics At Scale
Druid - Interactive Analytics At ScaleDruid - Interactive Analytics At Scale
Druid - Interactive Analytics At Scale
 
11 - Hadoop. NoSQL
11 - Hadoop. NoSQL11 - Hadoop. NoSQL
11 - Hadoop. NoSQL
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)
 
Hadoop presentation
Hadoop presentationHadoop presentation
Hadoop presentation
 
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
 
Frontera обход испанского интернета
Frontera обход испанского интернетаFrontera обход испанского интернета
Frontera обход испанского интернета
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
 
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаковIBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
 
Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011
 
NoSQL: issues and progress, current status and prospects
NoSQL: issues and progress, current status and prospectsNoSQL: issues and progress, current status and prospects
NoSQL: issues and progress, current status and prospects
 

More from Eduard Antsupov

More from Eduard Antsupov (8)

Lift, play, akka, rails part1
Lift, play, akka, rails part1Lift, play, akka, rails part1
Lift, play, akka, rails part1
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
SuSE Studio
SuSE StudioSuSE Studio
SuSE Studio
 
Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
Multiplayer
MultiplayerMultiplayer
Multiplayer
 
Linux Kernel Processes
Linux Kernel ProcessesLinux Kernel Processes
Linux Kernel Processes
 
Smalltalk
SmalltalkSmalltalk
Smalltalk
 
Lovely scrum
Lovely scrumLovely scrum
Lovely scrum
 

Nosql and Mongodb

  • 2.
  • 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")=""
  • 11. Документ-ориентированная модель Примеры документов: FirstName="Bob", Address="5 Oak St.", Hobby="sailing". FirstName="Jonathan", Address="15 Wanamassa Point Road", Children=("Michael,10", "Jennifer,8", "Samantha,5", "Elena,2").
  • 12. Документ-ориентированная модель XML-документ: <Person firstName="John" lastName="Smith" age="25"> <Address streetAddress="21 2nd Street" city="New York" state="NY" postalCode="10021" /> <PhoneNumbers> <PhoneNumber type="home" number="212 555-1234"/> <PhoneNumber type="fax" number="646 555-4567"/> </PhoneNumbers> </Person>
  • 13. JSON-документ: { "firstName": "John", "lastName": "Smith", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021" }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }
  • 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 >
  • 27. Примеры использования MongoDB mongo поддерживает javascript (shell) > x = 123+1 124 >var obj = new Object > obj.test = 12 > obj.test 12 >
  • 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" : [] } >
  • 32. Примеры использования MongoDB Индексация в MongoDB (shell) > print(post._id) 2fe3e4d892aa73234c910bed |------------| |-----| |---| |------| ts mac pid inc >
  • 33. Примеры использования MongoDB Вставка, обновление данных(shell) > use chess switched to db chess >db.chess.insert({ ..."name" : "black king", ..."symbol" : "♚",     ..."pos" : {"x":"e", "y":8}     ...}     ...) > db.chess.update( ... {"name" : "black king"}, ... {"$inc" : {"pos.y" : -1}}) >
  • 34. Примеры использования MongoDB Обновление данных(shell) > db.chess.update(//update можно использоват как insert ... {"name" : "black king"}, ... {"$inc" : {"pos.y" : -1}}) > db.chess.update( ... {"name" : "black king"}, ... {"$set" : {"name" : "white king"}}) > db.chess.update( ... {"name" : "black king"}, ... {"$set" : {"additional" : 23}})
  • 35. Примеры использования MongoDB Обновление данных(shell) >db.chess.find() {{"name" : "white king", ..."symbol" : "♚",     ..."pos" : {"x":"e", "y":7}, ..."additional" : 23 ...}}
  • 36. Примеры использования MongoDB Поиск данных(shell) >db.chess.find(){ {{"name" : "white king", ..."symbol" : "♚",     ..."pos" : {"x":"e", "y":7}, ..."additional" : 23 ...}} >db.findOne({"name":"test"}) >db.findOne({"name":"white king"}) {{"name" : "white king", ..."symbol" : "♚",     ..."pos" : {"x":"e", "y":7}, ..."additional" : 23 ...}} >
  • 37. Репликация данных MongoDB поддерживает асинхронную репликацию данных.(данные между серверами синхронизируются в отложенный момент времени, не во время добавления)
  • 38. Auto-Sharding MongoDB масштабируется горизонатльно благодаря архитектуре auto-sharding. ● Автоматическая балансировка загрузки и распределения данных ● Простота в добавлении новых узлов ● Масштабируемость на более, чем тысяча узлов ● Автоматическое восстановление ошибок
  • 39. Драйверы MongoDB 10gen предоставляет поддержку драйверов для следующих языков: ●С ● С++ ● С# ● Haskell ● Java ● Javascript ● Perl ● PHP ● Python ● Ruby ● Scala
  • 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(),