SlideShare una empresa de Scribd logo
1 de 32
MongoDB

Области применения, преимущества и узкие места,
тонкости использования в высоконагруженных системах.



                Александр Чайка <marco.manti@gmail.com>, 06/2012
                                                               1
Что такое NoSQL?

Основная цель подхода —
  расширить возможности
  базы данных там, где SQL
  недостаточно гибок…


                             2
В основе идей NoSQL лежит следующее:
1. Нереляционная модель данных;

 RDBMS              NoSQL




                                       3
2. Открытый
   исходный код;

3. Хорошая горизонтальная
   масштабируемость “из коробки”;

MySQL Community      MongoDB
   4 nodes         1’000 nodes
                                    4
Установка
Windows – качаем и ставим:
 > mongod --logpath /var/log --logappend
 --dbpath /var/data --install

Ubuntu/Linux – ставим в ручную:
  https://github.com/mongodb/mongo.git
  apt-get install mongodb
                                           5
Проблемы репозиториев
MongoDB database versions
• Ubuntu 10.04 LTS (AWS default) - 1.2.2
• Mongodb.org – 2.0.5

MongoDB PHP driver versions
• PEAR channel – 1.2.1
• GITHub official – 1.2.5

                                           6
Динамические базы и коллекции
1. Не надо знать, существует ли база;
2. Не надо знать структуру базы;
3. Не надо знать имя коллекции
   (таблицы);
4. У каждого документа (строки)
   может быть своя структура.
                                    7
Динамические базы и коллекции
$mongo = new Mongo;
$mongo->database->collection->insert(array(
    “id” => 1,
    “name” => “user”,
    “pass” => “pass”
));
$mongo->database->collection->insert(array(
    “id” => 1,
    “action” => “control”,
    “desc” => “description”
));
                                              8
Динамические базы и коллекции
$mongo->database->collection->find(array(“id”:1));
  array(
      “id” => 1,
      “name” => “user”,
      “pass” => “pass”
  );
  array(
      “id” => 1,
      “action” => “control”,
      “desc” => “description”
  );
                                                 9
JSON-style and JavaScript
• Весь синтаксис запросов построен на основе
  JSON-объектов:
  > use database
  > db.collection
    .find({ id: {$ne: 1}}, { name: 1})
    .sort(, ‘group.id’:-1, id:-1})
    .limit(10);
• Для внутреннего хранения используется
  BSON – бинарное представление JSON.
                                               10
SQL to Mongo mapping chart




                             11
MySQL Join vs. Embed document




                                12
2 таблицы = одна коллекция
MySQL                             MongoDB

TABLE USER                        {
id INT (10) AUTO_INCREMENT            id : 1,
group_id INT (10) NOT NULL            username: user,
username VARCHAR (255) NOT NULL       password: somepass,
password VARCHAR (32) NOT NULL        group: {
                                         id : 1,
TABLE GROUP                              name: administrator
id INT (10) AUTO_INCREMENT            }
name VARCHAR (255) NOT NULL       }


                                                               13
Область применения




                     14
Производительность и масштабиремость



                       Memcached / Key-value



 MongoDB / NoSQL




                    MySQL / RDBMS



Функциональность          Целостность данных
                                               15
{
    "id": "1234567893",
    "at": 2,
    "tmax": 120,
    "imp": [
       {
          "id": "1",
          "video": {
             "mimes": [ "video/x-flv", "video/mp4"],
             "minduration": 5,
             "protocol": [ 1, 2, 3, 4],
             "w": 640,
             "h": 480,
             "maxextended": 30,
             "minbitrate": 300,
             "pos": 1,
          }
       }
    ],
    "site": {
       "id": "1345135123",
       "name": "Site ABCD",
       "domain": "siteabcd.com",
       "device": {
          "ip": "64.124.253.1",
          "ua": "Mozilla/5.0(MacOSX10.6)",
          "os": "OSX",
          "flashversion": "10.1",
          "js": 1
       },
       "user": {
          "uid": "456789876567897654678987656789",
          "buyeruid": "545678765467876567897654",
       }
    }
}
                                                       16
Multiple INSERT – возможно ли это?




                                     17
Multiple INSERT – возможно ли это?

• MySQL: из коробки – НЕТ,
  использовать “хуки” – ДА;




                                     18
Multiple INSERT – возможно ли это?

• Oracle – ДА, но цена?




                                     19
Multiple INSERT – возможно ли это?

• NoSQL/MongoDB – а зачем?
     > db.collection.insert({
         id : 1,
         username: user,
         password: somepass,
         group: {
            id : 1,
            name: administrator
         }
       });
                                     20
Ключи и индексы




                  21
Индексы: типы, опции и комманды
• Индексные ключи
  db.collection.ensureIndex(,‘group.name’:1-);
• Уникальные “unique” ключи
  db.collection.ensureIndex(,‘group.name’:1-,,unique:true});
• Опция “dropDups”;
• Разбросанные “sparse” ключи;
          MEMORY

           User country: BLR      User country: GBR      User country: USA

            Pointer to uid = 1     Pointer to uid = 2     Pointer to uid = 3

            Pointer to uid = 4     Pointer to uid = 5     Pointer to uid = 6

            Pointer to uid = 7     Pointer to uid = 8     Pointer to uid = 9

            Pointer to uid = 10    Pointer to uid = 11    Pointer to uid = 12




• db.collection.totalIndexSize();
                                                                                22
Оптимизация и масштабирование

Memory Mapped Files
прямое отображение
байлов в память
“сквозь” буфер обмена;




                                 23
Оптимизация и масштабирование
• Capped collections /
  Round-robin Database:

                  При заполнении
                  всего отведенного
                  места, записи
                  удаляются по
                  принципу FIFO
                                  24
Оптимизация и масштабирование

• Mater / Slave replication;
• Replica set;




                                 25
Оптимизация и масштабирование
• Sharding (sparse):
Shard servers
 Shard key              Shard key             Shard key
 “country: BLR”         “country: GBR”        “country: USA”

  Pointer to uid = 1    Pointer to uid = 2    Pointer to uid = 3

  Pointer to uid = 4    Pointer to uid = 5    Pointer to uid = 6

  Pointer to uid = 7    Pointer to uid = 8    Pointer to uid = 9

  Pointer to uid = 10   Pointer to uid = 11   Pointer to uid = 12


                                                                    26
Тонкости и нюансы




                    27
1. Все возвращаемые объекты в PHP по умолчанию
   являются ассоциативными массивами;




                                                 28
2. Индексы должны помещаться в память
   db.collection.totalIndexSize();
3. Чем больше объект, тем ниже скорость
   записи (экпоненциально)
   db.collection.batchInsert(*,…-, ,…-,..+);

       1’000 записей
     x
     =
       1Kb документ
       1Mb пакет
                                               29
4. Чем больше подключений, тем больше
   памяти расходуется (линейно);
5. Очень медленно работает REMOVE.
   После каждого атомарного удаления
   перестраивается индекс?
   db.collection.dropIndexes();
   db.collection.remove({id:{$lte:100}});
   db.collection.ensureIndex({id:1});
   Используйте DROP;
   db.collection.drop();
6. Для обновления используйте Safe Mode.
                                            30
Вывод
• MongoDB – быстрая и легко
  масштабируемая база данных;
• Понятный синтаксис
  (JSON/JavaScript);
• Адаптирована для
  высоконагруженных систем;
• Избыточна, без “foreign keys”.
                                   31
Спасибо за внимание.
Вопросы?




                       32

Más contenido relacionado

La actualidad más candente

ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...Ontico
 
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Ontico
 
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминHOWWEDOIT
 
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)Ontico
 
Алексей Чумаков. Apache Cassandra на реальном проекте
Алексей Чумаков. Apache Cassandra на реальном проектеАлексей Чумаков. Apache Cassandra на реальном проекте
Алексей Чумаков. Apache Cassandra на реальном проектеVolha Banadyseva
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Ontico
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...Ontico
 
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)Ontico
 
Введение в Apache Cassandra
Введение в Apache CassandraВведение в Apache Cassandra
Введение в Apache CassandraAlexander Tivelkov
 
Cassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системахCassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системахAlexander Mezhov
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанкуNikolay Sivko
 
Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Yandex
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Ontico
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхVasil Remeniuk
 
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяцКак мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяцMikhail Tabunov
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)Nikolay Samokhvalov
 

La actualidad más candente (20)

ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
 
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
 
Анализируем данные с Clickhouse
Анализируем данные с  ClickhouseАнализируем данные с  Clickhouse
Анализируем данные с Clickhouse
 
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
 
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
 
Алексей Чумаков. Apache Cassandra на реальном проекте
Алексей Чумаков. Apache Cassandra на реальном проектеАлексей Чумаков. Apache Cassandra на реальном проекте
Алексей Чумаков. Apache Cassandra на реальном проекте
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
 
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
 
Введение в Apache Cassandra
Введение в Apache CassandraВведение в Apache Cassandra
Введение в Apache Cassandra
 
Cassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системахCassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системах
 
Mysql vs postgresql
Mysql vs postgresqlMysql vs postgresql
Mysql vs postgresql
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанку
 
Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
 
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяцКак мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 

Destacado

Преимущества NoSQL баз данных на примере MongoDB
Преимущества NoSQL баз данных на примере MongoDBПреимущества NoSQL баз данных на примере MongoDB
Преимущества NoSQL баз данных на примере MongoDBUNETA
 
Документо-ориентированные базы даннах
Документо-ориентированные базы даннахДокументо-ориентированные базы даннах
Документо-ориентированные базы даннахracoons
 
MongoDB Pros and Cons
MongoDB Pros and ConsMongoDB Pros and Cons
MongoDB Pros and Consjohnrjenson
 
Boeing 747-8F AirBridge Cargo
Boeing 747-8F AirBridge CargoBoeing 747-8F AirBridge Cargo
Boeing 747-8F AirBridge CargoArtem Katranzhi
 
Intro to MongoDB and datamodeling
Intro to MongoDB and datamodeling Intro to MongoDB and datamodeling
Intro to MongoDB and datamodeling rogerbodamer
 
Building your first application w/mongoDB MongoSV2011
Building your first application w/mongoDB MongoSV2011Building your first application w/mongoDB MongoSV2011
Building your first application w/mongoDB MongoSV2011Steven Francia
 
The Fine Art of Schema Design in MongoDB: Dos and Don'ts
The Fine Art of Schema Design in MongoDB: Dos and Don'tsThe Fine Art of Schema Design in MongoDB: Dos and Don'ts
The Fine Art of Schema Design in MongoDB: Dos and Don'tsMatias Cascallares
 
Java BigData Full Stack Development (version 2.0)
Java BigData Full Stack Development (version 2.0)Java BigData Full Stack Development (version 2.0)
Java BigData Full Stack Development (version 2.0)Alexey Zinoviev
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation FrameworkTyler Brock
 
MongoDB Performance Tuning
MongoDB Performance TuningMongoDB Performance Tuning
MongoDB Performance TuningMongoDB
 
Strengths and Weaknesses of MongoDB
Strengths and Weaknesses of MongoDBStrengths and Weaknesses of MongoDB
Strengths and Weaknesses of MongoDBlehresman
 
Facetz DMP English 2014
Facetz DMP English 2014Facetz DMP English 2014
Facetz DMP English 2014Kirill Chistov
 
Agg framework selectgroup feb2015 v2
Agg framework selectgroup feb2015 v2Agg framework selectgroup feb2015 v2
Agg framework selectgroup feb2015 v2MongoDB
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Ontico
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)Ontico
 
"Пути развития Java разработчика" Дмитрий Соколов
"Пути развития Java разработчика" Дмитрий Соколов"Пути развития Java разработчика" Дмитрий Соколов
"Пути развития Java разработчика" Дмитрий СоколовFwdays
 
Webinar: 10-Step Guide to Creating a Single View of your Business
Webinar: 10-Step Guide to Creating a Single View of your BusinessWebinar: 10-Step Guide to Creating a Single View of your Business
Webinar: 10-Step Guide to Creating a Single View of your BusinessMongoDB
 

Destacado (20)

Преимущества NoSQL баз данных на примере MongoDB
Преимущества NoSQL баз данных на примере MongoDBПреимущества NoSQL баз данных на примере MongoDB
Преимущества NoSQL баз данных на примере MongoDB
 
Документо-ориентированные базы даннах
Документо-ориентированные базы даннахДокументо-ориентированные базы даннах
Документо-ориентированные базы даннах
 
MongoDB Pros and Cons
MongoDB Pros and ConsMongoDB Pros and Cons
MongoDB Pros and Cons
 
Boeing 747-8F AirBridge Cargo
Boeing 747-8F AirBridge CargoBoeing 747-8F AirBridge Cargo
Boeing 747-8F AirBridge Cargo
 
Intro to MongoDB and datamodeling
Intro to MongoDB and datamodeling Intro to MongoDB and datamodeling
Intro to MongoDB and datamodeling
 
Building your first application w/mongoDB MongoSV2011
Building your first application w/mongoDB MongoSV2011Building your first application w/mongoDB MongoSV2011
Building your first application w/mongoDB MongoSV2011
 
The Fine Art of Schema Design in MongoDB: Dos and Don'ts
The Fine Art of Schema Design in MongoDB: Dos and Don'tsThe Fine Art of Schema Design in MongoDB: Dos and Don'ts
The Fine Art of Schema Design in MongoDB: Dos and Don'ts
 
Believe in your call centre
Believe in your call centreBelieve in your call centre
Believe in your call centre
 
MongoDB and Schema Design
MongoDB and Schema DesignMongoDB and Schema Design
MongoDB and Schema Design
 
Java BigData Full Stack Development (version 2.0)
Java BigData Full Stack Development (version 2.0)Java BigData Full Stack Development (version 2.0)
Java BigData Full Stack Development (version 2.0)
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation Framework
 
MongoDB Performance Tuning
MongoDB Performance TuningMongoDB Performance Tuning
MongoDB Performance Tuning
 
Strengths and Weaknesses of MongoDB
Strengths and Weaknesses of MongoDBStrengths and Weaknesses of MongoDB
Strengths and Weaknesses of MongoDB
 
Facetz DMP English 2014
Facetz DMP English 2014Facetz DMP English 2014
Facetz DMP English 2014
 
Agg framework selectgroup feb2015 v2
Agg framework selectgroup feb2015 v2Agg framework selectgroup feb2015 v2
Agg framework selectgroup feb2015 v2
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
 
"Пути развития Java разработчика" Дмитрий Соколов
"Пути развития Java разработчика" Дмитрий Соколов"Пути развития Java разработчика" Дмитрий Соколов
"Пути развития Java разработчика" Дмитрий Соколов
 
Webinar: 10-Step Guide to Creating a Single View of your Business
Webinar: 10-Step Guide to Creating a Single View of your BusinessWebinar: 10-Step Guide to Creating a Single View of your Business
Webinar: 10-Step Guide to Creating a Single View of your Business
 

Similar a MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)Ontico
 
Sphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияSphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияandreyborue
 
HSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработкиHSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработкиBusiness incubator HSE
 
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах EmbarcaderoПоддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах EmbarcaderoAndrew Sovtsov
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...PavelKonotopov
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Yandex
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»e-Legion
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011CodeCamp
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностейДенис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностейDev_Party
 
Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Сергей Чистович "Подходы к кешированию на UGC-сервисе"Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Сергей Чистович "Подходы к кешированию на UGC-сервисе"Yandex
 
DevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомDevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомAlexander Titov
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42DevDay
 
Devconf2013 new-features-in-mysql-and-mariadb
Devconf2013 new-features-in-mysql-and-mariadbDevconf2013 new-features-in-mysql-and-mariadb
Devconf2013 new-features-in-mysql-and-mariadbSergey Petrunya
 
Cтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDBCтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDBDmitry Viskov
 

Similar a MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах (20)

Nosql and Mongodb
Nosql and MongodbNosql and Mongodb
Nosql and Mongodb
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
 
Sphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияSphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатация
 
HSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработкиHSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработки
 
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах EmbarcaderoПоддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах Embarcadero
 
MongoDB@addconf
MongoDB@addconfMongoDB@addconf
MongoDB@addconf
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностейДенис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
 
Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Сергей Чистович "Подходы к кешированию на UGC-сервисе"Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Сергей Чистович "Подходы к кешированию на UGC-сервисе"
 
DevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомDevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектом
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42
 
Devconf2013 new-features-in-mysql-and-mariadb
Devconf2013 new-features-in-mysql-and-mariadbDevconf2013 new-features-in-mysql-and-mariadb
Devconf2013 new-features-in-mysql-and-mariadb
 
Cтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDBCтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDB
 

Más de phpdevby

Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Безопасность веб-приложений. Так ли опасна виртуальная угроза?phpdevby
 
Использование AMQP в основе архитектуры бэкенда для мобильного приложения
Использование AMQP в основе архитектуры бэкенда для мобильного приложенияИспользование AMQP в основе архитектуры бэкенда для мобильного приложения
Использование AMQP в основе архитектуры бэкенда для мобильного приложенияphpdevby
 
Современная разработка сайтов на CMF Drupal.
Современная разработка сайтов на CMF Drupal.Современная разработка сайтов на CMF Drupal.
Современная разработка сайтов на CMF Drupal.phpdevby
 
Php архитектор - кто он?
Php архитектор - кто он?Php архитектор - кто он?
Php архитектор - кто он?phpdevby
 
Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью GitКак удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Gitphpdevby
 
Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git phpdevby
 
Sphinx в реальных проектах: шишки и плюшки
Sphinx в реальных проектах: шишки и плюшкиSphinx в реальных проектах: шишки и плюшки
Sphinx в реальных проектах: шишки и плюшкиphpdevby
 
Как удержать проект от анархии с помощью Git.
Как удержать проект от анархии с помощью Git.Как удержать проект от анархии с помощью Git.
Как удержать проект от анархии с помощью Git.phpdevby
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?phpdevby
 
Сайт на Zend Framework в составе промышленной системы
Сайт на Zend Framework в составе промышленной системыСайт на Zend Framework в составе промышленной системы
Сайт на Zend Framework в составе промышленной системыphpdevby
 

Más de phpdevby (10)

Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
 
Использование AMQP в основе архитектуры бэкенда для мобильного приложения
Использование AMQP в основе архитектуры бэкенда для мобильного приложенияИспользование AMQP в основе архитектуры бэкенда для мобильного приложения
Использование AMQP в основе архитектуры бэкенда для мобильного приложения
 
Современная разработка сайтов на CMF Drupal.
Современная разработка сайтов на CMF Drupal.Современная разработка сайтов на CMF Drupal.
Современная разработка сайтов на CMF Drupal.
 
Php архитектор - кто он?
Php архитектор - кто он?Php архитектор - кто он?
Php архитектор - кто он?
 
Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью GitКак удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git
 
Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git
 
Sphinx в реальных проектах: шишки и плюшки
Sphinx в реальных проектах: шишки и плюшкиSphinx в реальных проектах: шишки и плюшки
Sphinx в реальных проектах: шишки и плюшки
 
Как удержать проект от анархии с помощью Git.
Как удержать проект от анархии с помощью Git.Как удержать проект от анархии с помощью Git.
Как удержать проект от анархии с помощью Git.
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 
Сайт на Zend Framework в составе промышленной системы
Сайт на Zend Framework в составе промышленной системыСайт на Zend Framework в составе промышленной системы
Сайт на Zend Framework в составе промышленной системы
 

MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

  • 1. MongoDB Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах. Александр Чайка <marco.manti@gmail.com>, 06/2012 1
  • 2. Что такое NoSQL? Основная цель подхода — расширить возможности базы данных там, где SQL недостаточно гибок… 2
  • 3. В основе идей NoSQL лежит следующее: 1. Нереляционная модель данных; RDBMS NoSQL 3
  • 4. 2. Открытый исходный код; 3. Хорошая горизонтальная масштабируемость “из коробки”; MySQL Community MongoDB 4 nodes 1’000 nodes 4
  • 5. Установка Windows – качаем и ставим: > mongod --logpath /var/log --logappend --dbpath /var/data --install Ubuntu/Linux – ставим в ручную: https://github.com/mongodb/mongo.git apt-get install mongodb 5
  • 6. Проблемы репозиториев MongoDB database versions • Ubuntu 10.04 LTS (AWS default) - 1.2.2 • Mongodb.org – 2.0.5 MongoDB PHP driver versions • PEAR channel – 1.2.1 • GITHub official – 1.2.5 6
  • 7. Динамические базы и коллекции 1. Не надо знать, существует ли база; 2. Не надо знать структуру базы; 3. Не надо знать имя коллекции (таблицы); 4. У каждого документа (строки) может быть своя структура. 7
  • 8. Динамические базы и коллекции $mongo = new Mongo; $mongo->database->collection->insert(array( “id” => 1, “name” => “user”, “pass” => “pass” )); $mongo->database->collection->insert(array( “id” => 1, “action” => “control”, “desc” => “description” )); 8
  • 9. Динамические базы и коллекции $mongo->database->collection->find(array(“id”:1)); array( “id” => 1, “name” => “user”, “pass” => “pass” ); array( “id” => 1, “action” => “control”, “desc” => “description” ); 9
  • 10. JSON-style and JavaScript • Весь синтаксис запросов построен на основе JSON-объектов: > use database > db.collection .find({ id: {$ne: 1}}, { name: 1}) .sort(, ‘group.id’:-1, id:-1}) .limit(10); • Для внутреннего хранения используется BSON – бинарное представление JSON. 10
  • 11. SQL to Mongo mapping chart 11
  • 12. MySQL Join vs. Embed document 12
  • 13. 2 таблицы = одна коллекция MySQL MongoDB TABLE USER { id INT (10) AUTO_INCREMENT id : 1, group_id INT (10) NOT NULL username: user, username VARCHAR (255) NOT NULL password: somepass, password VARCHAR (32) NOT NULL group: { id : 1, TABLE GROUP name: administrator id INT (10) AUTO_INCREMENT } name VARCHAR (255) NOT NULL } 13
  • 15. Производительность и масштабиремость Memcached / Key-value MongoDB / NoSQL MySQL / RDBMS Функциональность Целостность данных 15
  • 16. { "id": "1234567893", "at": 2, "tmax": 120, "imp": [ { "id": "1", "video": { "mimes": [ "video/x-flv", "video/mp4"], "minduration": 5, "protocol": [ 1, 2, 3, 4], "w": 640, "h": 480, "maxextended": 30, "minbitrate": 300, "pos": 1, } } ], "site": { "id": "1345135123", "name": "Site ABCD", "domain": "siteabcd.com", "device": { "ip": "64.124.253.1", "ua": "Mozilla/5.0(MacOSX10.6)", "os": "OSX", "flashversion": "10.1", "js": 1 }, "user": { "uid": "456789876567897654678987656789", "buyeruid": "545678765467876567897654", } } } 16
  • 17. Multiple INSERT – возможно ли это? 17
  • 18. Multiple INSERT – возможно ли это? • MySQL: из коробки – НЕТ, использовать “хуки” – ДА; 18
  • 19. Multiple INSERT – возможно ли это? • Oracle – ДА, но цена? 19
  • 20. Multiple INSERT – возможно ли это? • NoSQL/MongoDB – а зачем? > db.collection.insert({ id : 1, username: user, password: somepass, group: { id : 1, name: administrator } }); 20
  • 22. Индексы: типы, опции и комманды • Индексные ключи db.collection.ensureIndex(,‘group.name’:1-); • Уникальные “unique” ключи db.collection.ensureIndex(,‘group.name’:1-,,unique:true}); • Опция “dropDups”; • Разбросанные “sparse” ключи; MEMORY User country: BLR User country: GBR User country: USA Pointer to uid = 1 Pointer to uid = 2 Pointer to uid = 3 Pointer to uid = 4 Pointer to uid = 5 Pointer to uid = 6 Pointer to uid = 7 Pointer to uid = 8 Pointer to uid = 9 Pointer to uid = 10 Pointer to uid = 11 Pointer to uid = 12 • db.collection.totalIndexSize(); 22
  • 23. Оптимизация и масштабирование Memory Mapped Files прямое отображение байлов в память “сквозь” буфер обмена; 23
  • 24. Оптимизация и масштабирование • Capped collections / Round-robin Database: При заполнении всего отведенного места, записи удаляются по принципу FIFO 24
  • 25. Оптимизация и масштабирование • Mater / Slave replication; • Replica set; 25
  • 26. Оптимизация и масштабирование • Sharding (sparse): Shard servers Shard key Shard key Shard key “country: BLR” “country: GBR” “country: USA” Pointer to uid = 1 Pointer to uid = 2 Pointer to uid = 3 Pointer to uid = 4 Pointer to uid = 5 Pointer to uid = 6 Pointer to uid = 7 Pointer to uid = 8 Pointer to uid = 9 Pointer to uid = 10 Pointer to uid = 11 Pointer to uid = 12 26
  • 28. 1. Все возвращаемые объекты в PHP по умолчанию являются ассоциативными массивами; 28
  • 29. 2. Индексы должны помещаться в память db.collection.totalIndexSize(); 3. Чем больше объект, тем ниже скорость записи (экпоненциально) db.collection.batchInsert(*,…-, ,…-,..+); 1’000 записей x = 1Kb документ 1Mb пакет 29
  • 30. 4. Чем больше подключений, тем больше памяти расходуется (линейно); 5. Очень медленно работает REMOVE. После каждого атомарного удаления перестраивается индекс? db.collection.dropIndexes(); db.collection.remove({id:{$lte:100}}); db.collection.ensureIndex({id:1}); Используйте DROP; db.collection.drop(); 6. Для обновления используйте Safe Mode. 30
  • 31. Вывод • MongoDB – быстрая и легко масштабируемая база данных; • Понятный синтаксис (JSON/JavaScript); • Адаптирована для высоконагруженных систем; • Избыточна, без “foreign keys”. 31