Introduction to MongoDB

1,902 views
1,804 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,902
On SlideShare
0
From Embeds
0
Number of Embeds
129
Actions
Shares
0
Downloads
19
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

×