MongoDB

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

CMNS: MongoDB на Вікісховищі

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"})

Проблеми з безпекою[ред.ред. код]

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

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

Примітки[ред.ред. код]

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

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

  • 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