introduction to mongodb
DESCRIPTION
TRANSCRIPT
MongoDB
Огиенко Юрийlinkedin.com/in/ogiienkoZend_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