Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introduction to MongoDB

1,951 views

Published on

  • Be the first to comment

Introduction to MongoDB

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

×