SlideShare a Scribd company logo
  MongoDB Огиенко Юрий linkedin.com/in/ogiienko Zend_Coffee&Code #4 Июль, 2011
Что такое mongoDB ? СУБД: Open source Документо-ориентированная С гибкой схемой данных Высокопроизводительная Написаная на C++
Pros/Cons Нет JOIN Нет сложных транзакций Горизонтальное масштабирование Индексы, вторичные индексы Репликация, отказоустойчивость Шардинг из коробки Документная структура Встроенный язык - javascript MMAP  Preallocation (open files limit)
Коллекции документов База данных - база данных  Таблица - Коллекция Строка - Документ Документ это BSON = бинарному JSON Процедуры на JavaScript  SpiderMonkey (V8 в будущем)
Типы данных 1. BSON типы данных          * целочисленные, с плавающей запятой          * Unicode строки          * бинарные данные          * булевые данные          * массивы          * timstamp и UTC datetime          *  http://bsonspec.org/#/specification 2. typeof и instanceof 3. Используя PHP и следим за приведениями.
Отсутствие схемы данных Храним только необходимые данные: Ни каких больше миграций и блокирующих ALTER TABLE
Динамические запросы: Поддерживается все обычные фишки SQL (CRUD): insert/save find update remove Нестандартные: findAndModify атомарные операции mapReduce GridFS
Поиск  - find (SQL SELECT) Поиск документов в колекции.  При поиске возвращается cursor
Поиск  - limit, count, sort Получив курсор можно над ним поколдовать:
Вставка - insert, save Вставляем обычный JSON объект. Второй параметр safe - гарантирует запись на диск Ограничение на документ - 4mb Скоро будет 16mb Максимум 24000 коллекций
Скорость вставки по отношению к размеру блока записи 1.5 mb         ~80 insert/sec              ~120 mb/sec записи 0.5 mb         ~ 300 insert/sec           ~150 mb/sec записи 0.03 mb       ~ 3500 ins/sec             ~105 mb/sec Следим за пропускной способностью канала!
Удаление - remove Быстрее всего удалять используя _id документа каторый у вас в памяти. Можно удалять передав полоностью документ в фильтр, но это не эффективно.
Обновление - update Самая мощная операция.
Плюшки обновления Данные опарации позволяют менять структуру документа
Индексы Создание, удаление индексов
еще индексы Блокировка при создании индекса, память и переиндексация
Двумерные индексы Двумерные индексы позволяют искать по координатам один индекс на колекцию несколько локейшинов в документе
Еще! Двумерные индексы позволяют искать по разному
Скорость вставки по отношению к числу индексов 1 индекс                 ~4000 insert/sec             20% lock 8 индексов             ~ 3500 insert/sec            40% lock 20 индексов           ~ 3000 insert/sec            70% lock Используем: db.table.find(col1:"value").sort(col3: -1).limit(20).explain() Следим за "nscanned" и "indexBounds"
Профилирование запросов Профилирование nscanned, millis
Индексы в память
MapReduce - map and reduce
MapReduce - finilize and output
ReplicaSet Сет реплицируеммых серверов. 1. Должна содержать минимум 3 ноды, для обеспечения отказоустойчивости. 2. Пишем на одну, а читаем со всех 3. Система автоматически преключается и выбирает мастера в случае если текущий упал. 4. В момент падаения вы теряете данные которые неуспели реплицироватся на слейвы.
ReplicaSet 1.          2. 3.       4.
Sharding Идеальный шардинг
Мониторинг mongostat - основная утилита профилирования \ insert, query, update, delete - число запросов по нодам getmore - выборка по курсору command - число комманд (gelLastError) flushes - записи на диск, по умолчанию 1 раз в 60 сек.
Мониторинг mapped - объем отображаемой виртуальной памяти в РАМ vsize - память виртуальная, отведенная под колекции faults - промахи, когда требуемая страница находится на     HDD и ее надо загрузить locked - степень блокировки при записи, обновлении, индексировании idx miss - запросы которые не используют индекс
Мониторинг \\\\ netIn, netOut - объем передаваемых данных по сети conn - число подключений qr, qw, ar, aw - очередь запросов на чтение/запись
Общее состояние
Инсталяция и поддержка 1. Установка mongoDB 2. Установка драйвера 3. mongod.lock - при некорректном падении базы, необходимо удалить lock файл и выполнить комманду repair
Ad

Recommended

Работа с большими файлами под перлом‎
Работа с большими файлами под перлом‎
mayperl
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
Roman Pavlushko
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
Roman Pavlushko
 
HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5
Technopark
 
HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3
Technopark
 
HighLoad весна 2014 лекция 6
HighLoad весна 2014 лекция 6
Technopark
 
HighLoad весна 2014 лекция 2
HighLoad весна 2014 лекция 2
Technopark
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
it-people
 
Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...
Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...
Coub
 
05 db server_deployment_ru
05 db server_deployment_ru
mcroitor
 
Массовые операции над письмами в Яндекс.Почте — Денис Кутуков
Массовые операции над письмами в Яндекс.Почте — Денис Кутуков
Yandex
 
MongoDB. Как готовить, с чем едят?
MongoDB. Как готовить, с чем едят?
Tim Mironov
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
Андрей Фролов
 
Kubasov
Kubasov
kuchinskaya
 
Redis: возможности, выгоды, примеры использования
Redis: возможности, выгоды, примеры использования
Alexey Kachayev
 
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Lenvendo
 
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Fuenteovejuna
 
Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"
Fwdays
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)
Ontico
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Ontico
 
Frontera обход испанского интернета
Frontera обход испанского интернета
Alexander Sibiryakov
 
Владислав Животнев - Основы DNS
Владислав Животнев - Основы DNS
Yandex
 
Борис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ru
Ontico
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Ontico
 
Безопасность весна 2014 лекция 7
Безопасность весна 2014 лекция 7
Technopark
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Ontico
 
Big Data Testing: Ensuring MongoDB Data Quality
Big Data Testing: Ensuring MongoDB Data Quality
RTTS
 
Intro To MongoDB
Intro To MongoDB
Alex Sharp
 

More Related Content

What's hot (20)

Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...
Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...
Coub
 
05 db server_deployment_ru
05 db server_deployment_ru
mcroitor
 
Массовые операции над письмами в Яндекс.Почте — Денис Кутуков
Массовые операции над письмами в Яндекс.Почте — Денис Кутуков
Yandex
 
MongoDB. Как готовить, с чем едят?
MongoDB. Как готовить, с чем едят?
Tim Mironov
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
Андрей Фролов
 
Kubasov
Kubasov
kuchinskaya
 
Redis: возможности, выгоды, примеры использования
Redis: возможности, выгоды, примеры использования
Alexey Kachayev
 
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Lenvendo
 
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Fuenteovejuna
 
Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"
Fwdays
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)
Ontico
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Ontico
 
Frontera обход испанского интернета
Frontera обход испанского интернета
Alexander Sibiryakov
 
Владислав Животнев - Основы DNS
Владислав Животнев - Основы DNS
Yandex
 
Борис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ru
Ontico
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Ontico
 
Безопасность весна 2014 лекция 7
Безопасность весна 2014 лекция 7
Technopark
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Ontico
 
Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...
Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...
Coub
 
05 db server_deployment_ru
05 db server_deployment_ru
mcroitor
 
Массовые операции над письмами в Яндекс.Почте — Денис Кутуков
Массовые операции над письмами в Яндекс.Почте — Денис Кутуков
Yandex
 
MongoDB. Как готовить, с чем едят?
MongoDB. Как готовить, с чем едят?
Tim Mironov
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
Андрей Фролов
 
Redis: возможности, выгоды, примеры использования
Redis: возможности, выгоды, примеры использования
Alexey Kachayev
 
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Lenvendo
 
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Fuenteovejuna
 
Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"
Fwdays
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)
Ontico
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Ontico
 
Frontera обход испанского интернета
Frontera обход испанского интернета
Alexander Sibiryakov
 
Владислав Животнев - Основы DNS
Владислав Животнев - Основы DNS
Yandex
 
Борис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ru
Ontico
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Ontico
 
Безопасность весна 2014 лекция 7
Безопасность весна 2014 лекция 7
Technopark
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Ontico
 

Viewers also liked (6)

Big Data Testing: Ensuring MongoDB Data Quality
Big Data Testing: Ensuring MongoDB Data Quality
RTTS
 
Intro To MongoDB
Intro To MongoDB
Alex Sharp
 
Optimizing MongoDB: Lessons Learned at Localytics
Optimizing MongoDB: Lessons Learned at Localytics
andrew311
 
Introduction to MongoDB
Introduction to MongoDB
Ravi Teja
 
Introduction to MongoDB
Introduction to MongoDB
Mike Dirolf
 
MongoDB, E-commerce and Transactions
MongoDB, E-commerce and Transactions
Steven Francia
 
Big Data Testing: Ensuring MongoDB Data Quality
Big Data Testing: Ensuring MongoDB Data Quality
RTTS
 
Intro To MongoDB
Intro To MongoDB
Alex Sharp
 
Optimizing MongoDB: Lessons Learned at Localytics
Optimizing MongoDB: Lessons Learned at Localytics
andrew311
 
Introduction to MongoDB
Introduction to MongoDB
Ravi Teja
 
Introduction to MongoDB
Introduction to MongoDB
Mike Dirolf
 
MongoDB, E-commerce and Transactions
MongoDB, E-commerce and Transactions
Steven Francia
 
Ad

Similar to Introduction to MongoDB (20)

MongoDB первые впечатления
MongoDB первые впечатления
fudz1k
 
Nosql and Mongodb
Nosql and Mongodb
Eduard Antsupov
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
phpdevby
 
Базы данных. MongoDB
Базы данных. MongoDB
Vadim Tsesko
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
Alexey Tokar
 
MongoDB basics in Russian
MongoDB basics in Russian
Oleg Kachan
 
MongoDB@addconf
MongoDB@addconf
Sergei Tulentsev
 
Моделирование для NoSQL БД
Моделирование для NoSQL БД
Andrew Sovtsov
 
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
Evgeniy Kuzmin
 
NoSQL pain
NoSQL pain
Ivan Grishaev
 
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
Dev_Party
 
Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорас...
Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорас...
Yandex
 
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)
it-people
 
Cтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDB
Dmitry Viskov
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Ontico
 
Преимущества NoSQL баз данных на примере MongoDB
Преимущества NoSQL баз данных на примере MongoDB
UNETA
 
No sql.mongodb scaling
No sql.mongodb scaling
Олег Винников
 
Практическое применение MongoDB Aggregation Framework
Практическое применение MongoDB Aggregation Framework
Денис Кравченко
 
А. Аксенов "Как устроен NoSql", DUMP-2014
А. Аксенов "Как устроен NoSql", DUMP-2014
it-people
 
Новое в Mongodb 2.4
Новое в Mongodb 2.4
Gleb Lebedev
 
MongoDB первые впечатления
MongoDB первые впечатления
fudz1k
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
phpdevby
 
Базы данных. MongoDB
Базы данных. MongoDB
Vadim Tsesko
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
Alexey Tokar
 
MongoDB basics in Russian
MongoDB basics in Russian
Oleg Kachan
 
Моделирование для NoSQL БД
Моделирование для NoSQL БД
Andrew Sovtsov
 
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
Evgeniy Kuzmin
 
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
Dev_Party
 
Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорас...
Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорас...
Yandex
 
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)
it-people
 
Cтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDB
Dmitry Viskov
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Ontico
 
Преимущества NoSQL баз данных на примере MongoDB
Преимущества NoSQL баз данных на примере MongoDB
UNETA
 
Практическое применение MongoDB Aggregation Framework
Практическое применение MongoDB Aggregation Framework
Денис Кравченко
 
А. Аксенов "Как устроен NoSql", DUMP-2014
А. Аксенов "Как устроен NoSql", DUMP-2014
it-people
 
Новое в Mongodb 2.4
Новое в Mongodb 2.4
Gleb Lebedev
 
Ad

Introduction to MongoDB

  • 1.   MongoDB Огиенко Юрий linkedin.com/in/ogiienko Zend_Coffee&Code #4 Июль, 2011
  • 2. Что такое mongoDB ? СУБД: Open source Документо-ориентированная С гибкой схемой данных Высокопроизводительная Написаная на C++
  • 3. Pros/Cons Нет JOIN Нет сложных транзакций Горизонтальное масштабирование Индексы, вторичные индексы Репликация, отказоустойчивость Шардинг из коробки Документная структура Встроенный язык - javascript MMAP  Preallocation (open files limit)
  • 4. Коллекции документов База данных - база данных  Таблица - Коллекция Строка - Документ Документ это BSON = бинарному JSON Процедуры на JavaScript  SpiderMonkey (V8 в будущем)
  • 5. Типы данных 1. BSON типы данных         * целочисленные, с плавающей запятой         * Unicode строки         * бинарные данные         * булевые данные         * массивы         * timstamp и UTC datetime         *  http://bsonspec.org/#/specification 2. typeof и instanceof 3. Используя PHP и следим за приведениями.
  • 6. Отсутствие схемы данных Храним только необходимые данные: Ни каких больше миграций и блокирующих ALTER TABLE
  • 7. Динамические запросы: Поддерживается все обычные фишки SQL (CRUD): insert/save find update remove Нестандартные: findAndModify атомарные операции mapReduce GridFS
  • 8. Поиск  - find (SQL SELECT) Поиск документов в колекции.  При поиске возвращается cursor
  • 9. Поиск  - limit, count, sort Получив курсор можно над ним поколдовать:
  • 10. Вставка - insert, save Вставляем обычный JSON объект. Второй параметр safe - гарантирует запись на диск Ограничение на документ - 4mb Скоро будет 16mb Максимум 24000 коллекций
  • 11. Скорость вставки по отношению к размеру блока записи 1.5 mb         ~80 insert/sec              ~120 mb/sec записи 0.5 mb         ~ 300 insert/sec           ~150 mb/sec записи 0.03 mb       ~ 3500 ins/sec             ~105 mb/sec Следим за пропускной способностью канала!
  • 12. Удаление - remove Быстрее всего удалять используя _id документа каторый у вас в памяти. Можно удалять передав полоностью документ в фильтр, но это не эффективно.
  • 13. Обновление - update Самая мощная операция.
  • 14. Плюшки обновления Данные опарации позволяют менять структуру документа
  • 16. еще индексы Блокировка при создании индекса, память и переиндексация
  • 17. Двумерные индексы Двумерные индексы позволяют искать по координатам один индекс на колекцию несколько локейшинов в документе
  • 18. Еще! Двумерные индексы позволяют искать по разному
  • 19. Скорость вставки по отношению к числу индексов 1 индекс                 ~4000 insert/sec             20% lock 8 индексов             ~ 3500 insert/sec            40% lock 20 индексов           ~ 3000 insert/sec            70% lock Используем: db.table.find(col1:"value").sort(col3: -1).limit(20).explain() Следим за "nscanned" и "indexBounds"
  • 23. MapReduce - finilize and output
  • 24. ReplicaSet Сет реплицируеммых серверов. 1. Должна содержать минимум 3 ноды, для обеспечения отказоустойчивости. 2. Пишем на одну, а читаем со всех 3. Система автоматически преключается и выбирает мастера в случае если текущий упал. 4. В момент падаения вы теряете данные которые неуспели реплицироватся на слейвы.
  • 25. ReplicaSet 1.          2. 3.       4.
  • 27. Мониторинг mongostat - основная утилита профилирования \ insert, query, update, delete - число запросов по нодам getmore - выборка по курсору command - число комманд (gelLastError) flushes - записи на диск, по умолчанию 1 раз в 60 сек.
  • 28. Мониторинг mapped - объем отображаемой виртуальной памяти в РАМ vsize - память виртуальная, отведенная под колекции faults - промахи, когда требуемая страница находится на     HDD и ее надо загрузить locked - степень блокировки при записи, обновлении, индексировании idx miss - запросы которые не используют индекс
  • 29. Мониторинг \\\\ netIn, netOut - объем передаваемых данных по сети conn - число подключений qr, qw, ar, aw - очередь запросов на чтение/запись
  • 31. Инсталяция и поддержка 1. Установка mongoDB 2. Установка драйвера 3. mongod.lock - при некорректном падении базы, необходимо удалить lock файл и выполнить комманду repair