MongoDB

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
MongoDB
MongoDB Logo.png
Розробник(и) 10gen
Перший випуск 2009
Стабільний випуск 2.6 (8 квітня 2014; 167 днів тому)
Написано на C++
Операційна система крос-платформова
Доступні мови англійська
Стан розробки активний
Тип документо-орієнтована система керування базами даних
Ліцензія GNU AGPL v3.0 (драйвери: Apache license)
Сайт www.mongodb.org

MongoDBдокументо-орієнтована система керування базами даних (СКБД) з відкритим сирцевим кодом, яка не потребує опису схеми таблиць. MongoDB займає нішу між швидкими і масштабованими системами, що оперують даними у форматі ключ/значення, і реляційними СКБД, функціональними і зручними у формуванні запитів.

Код MongoDB написаний на мові C++ і поширюється в рамках ліцензії AGPLv3.

MongoDB підтримує зберігання документів в JSON-подібному форматі, має досить гнучку мову для формування запитів, може створювати індекси для різних збережених атрибутів, ефективно забезпечує зберігання великих бінарних об'єктів, підтримує журналювання операцій зі зміни і додавання даних в БД, може працювати відповідно до парадигми Map/Reduce, підтримує реплікацію і побудову відмовостійких конфігурацій. У MongoDB є вбудовані засоби із забезпечення шардінга (розподіл набору даних по серверах на основі певного ключа), комбінуючи який реплікацією даних можна побудувати горизонтально масштабований кластер зберігання, в якому відсутня єдина точка відмови (збій будь-якого вузла не позначається на роботі БД), підтримується автоматичне відновлення після збою і перенесення навантаження з вузла, який вийшов з ладу. Розширення кластера або перетворення одного сервера в кластер проводиться без зупинки роботи БД простим додаванням нових машин.

Філософія[ред.ред. код]

При розробці автори виходили з необхідності спеціалізації баз даних, завдяки чому їм вдалося відійти від принципу «один розмір під усе». За рахунок мінімізації семантики для роботи з транзакціями з'являється можливість вирішення цілого ряду проблем, пов'язаних з нестачею продуктивності, причому горизонтальне масштабування стає простішим. Використовувана модель документів зберігання даних (JSON/BSON) простіше кодується, простіше управляється (у тому числі за рахунок застосування так званого "безсхемного стилю» (англ. schemaless style)[1]), а внутрішня угруповання релевантних даних забезпечує додатковий виграш в швидкодії. Нереляційний підхід досить зручний для створення баз даних, у яких горизонтальне масштабування означає розгортання на множині машин. Можливість забезпечувати найкращу продуктивність повинна існувати паралельно з підтримкою більшої функціональності, ніж це дозволяє використання пар «ключ-значення» (у чистому вигляді). Технологія баз даних має працювати скрізь, починаючи з серверів користувача та віртуальних машин і закінчуючи хмарними технологіями[2].

MongoDB, на думку розробників, має заповнити розрив між простими сховищами даних типу «ключ-значення» (швидкими і легко масштабованими) і великими РСКБД (зі структурними схемами і потужними запитами).

Можливості[ред.ред. код]

Основні можливості MongoDB:

  • Документо-орієнтоване сховище (проста та потужна JSON -подібна схема даних)
  • Досить гнучка мова для формування запитів
  • Динамічні запити
  • Повна підтримка індексів
  • Профілювання запитів
  • Швидкі оновлення «на місці»
  • Ефективне зберігання двійкових даних великих обсягів, наприклад, фото та відео
  • Журналювання операцій, що модифікують дані в БД
  • Підтримка відмовостійкості і масштабованості: асинхронна реплікація, набір реплік і шардінг
  • Може працювати відповідно до парадигми MapReduce

Огляд[ред.ред. код]

СКБД управляє наборами JSON-подібних документів, що зберігаються в двійковому вигляді в форматі BSON. Зберігання і пошук файлів в MongoDB відбувається завдяки викликам протоколу GridFS. Подібно до інших документо-орієнтованих СКБД (CouchDB тощо), MongoDB не є реляційною СКБД.

Є докладна і якісна документація, велике число прикладів і драйверів під популярні мови Java, C++, C#, PHP, Python, Perl, Ruby[3].

При випуску одразу було заявлено, що реліз MongoDB 1.0 готовий до використання у виробництві як в якості одиничного хоста, так і в зв'язках master/slave. Код цього релізу досить стабільний і перевірений в промисловій експлуатації протягом 1,5 років[4]. За можливості MongoDB має бути розгорнута мінімум на двох серверах, використовуючи реплікацію Master/Slave[5]. Це забезпечує наявність актуальних даних при виході з ладу однієї з СКБД. MongoDB — продукт досить молодий, і відтак у ньому зустрічаються помилки, з'являються нові можливості тощо. Характерний високий темп розробки (проект пишуть не тільки волонтери, а й компанія людей на повній зайнятості)[6]. Компанія-розробник надає платні підтримку, хостинг, консультації.

Приклади запитів[ред.ред. код]

Запити можуть витягати дані з вбудованих об'єктів та масивів. Якщо в колекцію users вставлений такий об'єкт

 {
   "username" : "bob",
   "address" : {
     "street" : "123 Main Street",
     "city" : "Springfield",
     "state" : "NY"
   }
 }

ми можемо запитати цей документ (і всі документи з адресою в Нью-Йорку) за допомогою:

> db.users.find({"address.state" : "NY"})

Можна також запитати елементи масиву:

> db.food.insert({"fruit" : ["peach", "plum", "pear"]})
> db.food.find({"fruit" : "pear"})

Виноски[ред.ред. код]

Посилання[ред.ред. код]

Література[ред.ред. код]

  • Banker, Kyle (March 28, 2011), MongoDB in Action (1st ed.), Manning, pp. 375, ISBN 978-1-935182-87-0
  • Chodorow, Kristina; Dirolf, Michael (September 23, 2010), MongoDB: The Definitive Guide (1st ed.), O'Reilly Media, pp. 216, ISBN 978-1-4493-8156-1
  • Pirtle, Mitch (March 3, 2011), MongoDB for Web Development (1st ed.), Addison-Wesley Professional, pp. 360, ISBN 978-0-321-70533-4
  • Hawkins, Tim; Plugge, Eelco; Membrey, Peter (September 26, 2010), The Definitive Guide to MongoDB: The NoSQL Database for Cloud and Desktop Computing (1st ed.), Apress, pp. 350, ISBN 978-1-4302-3051-9