MongoDB

MongoDB
ТипNoSQL
документоорієнтована система керування базами даних
система управління базами даних і програмне забезпечення з доступним кодомd
РозробникMongoDB Inc.d
Перший випуск2009
Стабільний випуск4.4 (30 липня 2020; 4 роки тому (2020-07-30)[1])
Операційна системакрос-платформова
Мова програмуванняC++, JavaScript, C і Python[2]
Доступні мовианглійська
Стан розробкиактивний
ЛіцензіяServer Side Public Licensed[3][4]
Репозиторійgithub.com/mongodb/mongo
Вебсайтmongodb.com

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

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

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

Філософія

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

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

Можливості

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

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

Огляд

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

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

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

Приклади запитів

Запити можуть витягати дані з вбудованих об'єктів та масивів. Якщо в колекцію 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"})

Проблеми з безпекою

За час існування та інтенсивного використання MongoDB в системі було виявлено низку вразливостей. Наприклад, в березні 2015 року було знайдено вразливість типу DoS, спричинену використанням вразливої версії бібліотеки регулярних виразів PCRE (версії 8.30, виправлено у 8.36 та новіших)[11].

Щонайменше з 2014 року дослідники намагаються привернути увагу до існування великої кількості незахищених NoSQL серверів баз даних, в тому числі й MongoDB. Однак по-справжньому проблема налаштування захисту БД привернула до себе увагу у грудні 2016 року, коли хакер ідентифікований за адресою електронної пошти як harak1r1@sigaint[.]org спромігся взяти під свій контроль понад 2000 серверів MongoDB. Захопивши сервер зловмисник робив для себе резервну копію даних після чого знищував їх на сервері. Повернути вкрадені дані зловмисник обіцяв після сплати викупу в 0.2 біткойна. Станом на початок січня 2017 року йому вдалось заробити близько $ 2700[12]. Інший зловмисник, kraken0, спромігся отримати доступ до даних із 15 482 серверів MongoDB. Оголошена ним сума викупу — 1 біткойн (близько 900 доларів США за тодішнім курсом)[13].

Примітки

  1. Release Notes for MongoDB 4.4. Архів оригіналу за 12 серпня 2020. Процитовано 16 серпня 2020. [Архівовано 2020-08-12 у Wayback Machine.]
  2. Languages
  3. https://www.mongodb.com/licensing/server-side-public-license
  4. https://jira.mongodb.org/browse/SERVER-37651
  5. Why Schemaless? [Архівовано 5 вересня 2011 у Wayback Machine.] (англ.)
  6. Design Philosophy [Архівовано 24 вересня 2011 у Wayback Machine.] (англ.)
  7. Проверенный чёрт : MongoDB. Архів оригіналу за 17 серпня 2011. Процитовано 13 вересня 2011.
  8. MongoDB 1.0 GA — первый релиз новой СУБД — Новости GNU/Linux и Open Source (NIXP.RU)
  9. Master-Slave репликация MongoDB. Архів оригіналу за 30 травня 2011. Процитовано 13 вересня 2011.
  10. MongoDB или как разлюбить SQL / Web-разработка / Хабрахабр. Архів оригіналу за 25 жовтня 2011. Процитовано 13 вересня 2011.
  11. Michael Mimoso (31 березня 2015). MongoDB Patches Remote Denial-of-Service Vulnerability. Threatpost. Архів оригіналу за 11 січня 2017. Процитовано 10 січня 2017.
  12. Matt B (Jan 3, 2017). It’s 10PM; Do You Know Where Your MongoDB Is?. A DFIR Blog. Архів оригіналу за 11 січня 2017. Процитовано 10 січня 2017.
  13. Darren Pauli (9 Jan 2017). MongoDB ransom attacks soar, body count hits 27,000 in hours. The Register. Архів оригіналу за 10 січня 2017. Процитовано 10 січня 2017.

Посилання

Література

  • 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