Перейти до основного вмісту

MongoDB

MongoDB - документоорієнтована система управління базами даних (СУБД) з відкритим вихідним кодом, що не потребує опису схеми таблиць. Класифікована як NoSQL, використовує JSON-подібні документи й схему бази даних. Написана мовою C++.

Формат даних у MongoDB

Одним із популярних стандартів обміну даними та їхнього зберігання є JSON (JavaScript Object Notation). JSON ефективно описує складні за структурою дані. Спосіб зберігання даних у MongoDB у цьому плані схожий на JSON, хоча формально JSON не використовується. Для зберігання в MongoDB застосовується формат, який називається BSON (БіСон) або скорочення від binary JSON.

BSON дає змогу працювати з даними швидше: швидше виконується пошук і обробка. Хоча треба зазначити, що BSON на відміну від зберігання даних у форматі JSON має невеликий недолік: загалом дані в JSON-форматі займають менше місця, ніж у форматі BSON, з іншого боку, цей недолік з лишком окупається швидкістю.

Документи замість рядків

Якщо реляційні бази даних зберігають рядки, то MongoDB зберігає документи. На відміну від рядків документи можуть зберігати складну за структурою інформацію. Документ можна уявити як сховище ключів і значень.

Ключ являє собою просту мітку, з якою асоційовано певний шматок даних.

Однак за всіх відмінностей є одна особливість, яка зближує MongoDB і реляційні бази даних. У реляційних СУБД зустрічається таке поняття як первинний ключ. Це поняття описує якийсь стовпець, який має унікальні значення. У MongoDB для кожного документа є унікальний ідентифікатор, який називається _id. І якщо явно не вказати його значення, то MongoDB автоматично згенерує для нього значення.

Кожному ключу зіставляється певне значення. Але тут також треба враховувати одну особливість: якщо в реляційних базах є чітко окреслена структура, де є поля, і якщо якесь поле не має значення, йому (залежно від налаштувань конкретної бд) можна присвоїти значення NULL. У MongoDB все інакше. Якщо якомусь ключу не зіставлено значення, то цей ключ просто опускається в документі й не вживається.

Колекції

Якщо в традиційному світі SQL є таблиці, то у світі MongoDB є колекції. І якщо в реляційних БД таблиці зберігають однотипні жорстко структуровані об'єкти, то в колекції можуть містити найрізноманітніші об'єкти, що мають різну структуру і різний набір властивостей.

Реплікація

Система зберігання даних у MongoDB являє собою набір реплік. У цьому наборі є основний вузол, а також може бути набір вторинних вузлів. Усі вторинні вузли зберігають цілісність і автоматично оновлюються разом з оновленням головного вузла. І якщо основний вузол з якихось причин виходить з ладу, то один із вторинних вузлів стає головним.

Простота у використанні

Відсутність жорсткої схеми бази даних і у зв'язку з цим потреби при найменшій зміні концепції зберігання даних перестворювати цю схему значно полегшують роботу з базами даних MongoDB і подальшим їх масштабуванням. Крім того, економиться час розробників. Їм більше не треба думати про перестворення бази даних і витрачати час на побудову складних запитів.

GridFS

Однією з проблем під час роботи з будь-якими системами баз даних є збереження даних великого розміру. Можна зберігати дані у файлах, використовуючи різні мови програмування. Деякі СУБД пропонують спеціальні типи даних для зберігання бінарних даних у БД (наприклад, BLOB у MySQL).

На відміну від реляційних СУБД MongoDB дає змогу зберігати різні документи з різним набором даних, однак при цьому розмір документа обмежується 16 мб. Але MongoDB пропонує рішення - спеціальну технологію GridFS, яка дає змогу зберігати дані за розміром більшим, ніж 16 мб.

Система GridFS складається з двох колекцій. У першій колекції, яка називається files, зберігаються імена файлів, а також їхні метадані, наприклад, розмір. А в іншій колекції, яка називається chunks, у вигляді невеликих сегментів зберігаються дані файлів, зазвичай сегментами по 256 кб.

Для тестування GridFS можна використовувати спеціальну утиліту mongofiles, яка йде в пакеті mongodb.

Загальні команди

mongo # Доступ до інтерактивного інтерфейсу бази даних cli

Перегляд бази даних

show dbs
# Ці три доступні за замовчуванням (існує також тестова база даних, яка не відображається, оскільки вона спочатку порожня)
# admin
# config
# local

Нова/переключити базу даних

use <імя бази даних>

Видалити базу даних

use <цільова база даних>
db.dropDatabase()

Переглянути всі колекції

show collections
### Показати всі колекції для поточної бази даних (подібно до таблиць бази даних в Mysql)

Створити нову колекцію

db.createCollection(<ім'я колекції>)

Видалити колекцію

db.<ім'я колекції>.drop()

Знайти дані

db.<ім'я колекції>.find() ### Знайти всі дані в поточній колекції 
db.<ім'я колекції>.find({name: 'Petro'}) # Знайти за умовою